github.com/google/go-github/v71@v71.0.0/github/enterprise_manage_ghes.go (about) 1 // Copyright 2025 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "context" 10 ) 11 12 // NodeQueryOptions specifies the optional parameters to the EnterpriseService 13 // Node management APIs. 14 type NodeQueryOptions struct { 15 // UUID filters issues based on the node UUID. 16 UUID *string `url:"uuid,omitempty"` 17 18 // ClusterRoles filters the cluster roles from the cluster configuration file. 19 ClusterRoles *string `url:"cluster_roles,omitempty"` 20 } 21 22 // ClusterStatus represents a response from the ClusterStatus and ReplicationStatus methods. 23 type ClusterStatus struct { 24 Status *string `json:"status,omitempty"` 25 Nodes []*ClusterStatusNode `json:"nodes"` 26 } 27 28 // ClusterStatusNode represents the status of a cluster node. 29 type ClusterStatusNode struct { 30 Hostname *string `json:"hostname,omitempty"` 31 Status *string `json:"status,omitempty"` 32 Services []*ClusterStatusNodeServiceItem `json:"services"` 33 } 34 35 // ClusterStatusNodeServiceItem represents the status of a service running on a cluster node. 36 type ClusterStatusNodeServiceItem struct { 37 Status *string `json:"status,omitempty"` 38 Name *string `json:"name,omitempty"` 39 Details *string `json:"details,omitempty"` 40 } 41 42 // SystemRequirements represents a response from the CheckSystemRequirements method. 43 type SystemRequirements struct { 44 Status *string `json:"status,omitempty"` 45 Nodes []*SystemRequirementsNode `json:"nodes"` 46 } 47 48 // SystemRequirementsNode represents the status of a system node. 49 type SystemRequirementsNode struct { 50 Hostname *string `json:"hostname,omitempty"` 51 Status *string `json:"status,omitempty"` 52 RolesStatus []*SystemRequirementsNodeRoleStatus `json:"roles_status"` 53 } 54 55 // SystemRequirementsNodeRoleStatus represents the status of a role on a system node. 56 type SystemRequirementsNodeRoleStatus struct { 57 Status *string `json:"status,omitempty"` 58 Role *string `json:"role,omitempty"` 59 } 60 61 // NodeReleaseVersion represents a response from the GetNodeReleaseVersions method. 62 type NodeReleaseVersion struct { 63 Hostname *string `json:"hostname,omitempty"` 64 Version *ReleaseVersion `json:"version"` 65 } 66 67 // ReleaseVersion holds the release version information of the node. 68 type ReleaseVersion struct { 69 Version *string `json:"version,omitempty"` 70 Platform *string `json:"platform,omitempty"` 71 BuildID *string `json:"build_id,omitempty"` 72 BuildDate *string `json:"build_date,omitempty"` 73 } 74 75 // CheckSystemRequirements checks if GHES system nodes meet the system requirements. 76 // 77 // GitHub API docs: https://docs.github.com/enterprise-server@3.16/rest/enterprise-admin/manage-ghes#get-the-system-requirement-check-results-for-configured-cluster-nodes 78 // 79 //meta:operation GET /manage/v1/checks/system-requirements 80 func (s *EnterpriseService) CheckSystemRequirements(ctx context.Context) (*SystemRequirements, *Response, error) { 81 u := "manage/v1/checks/system-requirements" 82 req, err := s.client.NewRequest("GET", u, nil) 83 if err != nil { 84 return nil, nil, err 85 } 86 87 systemRequirements := new(SystemRequirements) 88 resp, err := s.client.Do(ctx, req, systemRequirements) 89 if err != nil { 90 return nil, resp, err 91 } 92 93 return systemRequirements, resp, nil 94 } 95 96 // ClusterStatus gets the status of all services running on each cluster node. 97 // 98 // GitHub API docs: https://docs.github.com/enterprise-server@3.16/rest/enterprise-admin/manage-ghes#get-the-status-of-services-running-on-all-cluster-nodes 99 // 100 //meta:operation GET /manage/v1/cluster/status 101 func (s *EnterpriseService) ClusterStatus(ctx context.Context) (*ClusterStatus, *Response, error) { 102 u := "manage/v1/cluster/status" 103 req, err := s.client.NewRequest("GET", u, nil) 104 if err != nil { 105 return nil, nil, err 106 } 107 108 clusterStatus := new(ClusterStatus) 109 resp, err := s.client.Do(ctx, req, clusterStatus) 110 if err != nil { 111 return nil, resp, err 112 } 113 114 return clusterStatus, resp, nil 115 } 116 117 // ReplicationStatus gets the status of all services running on each replica node. 118 // 119 // GitHub API docs: https://docs.github.com/enterprise-server@3.16/rest/enterprise-admin/manage-ghes#get-the-status-of-services-running-on-all-replica-nodes 120 // 121 //meta:operation GET /manage/v1/replication/status 122 func (s *EnterpriseService) ReplicationStatus(ctx context.Context, opts *NodeQueryOptions) (*ClusterStatus, *Response, error) { 123 u, err := addOptions("manage/v1/replication/status", opts) 124 if err != nil { 125 return nil, nil, err 126 } 127 req, err := s.client.NewRequest("GET", u, nil) 128 if err != nil { 129 return nil, nil, err 130 } 131 132 status := new(ClusterStatus) 133 resp, err := s.client.Do(ctx, req, status) 134 if err != nil { 135 return nil, resp, err 136 } 137 138 return status, resp, nil 139 } 140 141 // GetNodeReleaseVersions gets the version information deployed to each node. 142 // 143 // GitHub API docs: https://docs.github.com/enterprise-server@3.16/rest/enterprise-admin/manage-ghes#get-all-ghes-release-versions-for-all-nodes 144 // 145 //meta:operation GET /manage/v1/version 146 func (s *EnterpriseService) GetNodeReleaseVersions(ctx context.Context, opts *NodeQueryOptions) ([]*NodeReleaseVersion, *Response, error) { 147 u, err := addOptions("manage/v1/version", opts) 148 if err != nil { 149 return nil, nil, err 150 } 151 req, err := s.client.NewRequest("GET", u, nil) 152 if err != nil { 153 return nil, nil, err 154 } 155 156 var releaseVersions []*NodeReleaseVersion 157 resp, err := s.client.Do(ctx, req, &releaseVersions) 158 if err != nil { 159 return nil, resp, err 160 } 161 162 return releaseVersions, resp, nil 163 }