github.com/google/go-github/v69@v69.2.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.15/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.15/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.15/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.15/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  }