wg-quicker/vendor/github.com/xanzy/go-gitlab/geo_nodes.go

434 lines
26 KiB
Go

//
// Copyright 2021, Sander van Harmelen
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package gitlab
import (
"fmt"
"net/http"
)
// GeoNode represents a GitLab Geo Node.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/geo_nodes.html
type GeoNode struct {
ID int `json:"id"`
Name string `json:"name"`
URL string `json:"url"`
InternalURL string `json:"internal_url"`
Primary bool `json:"primary"`
Enabled bool `json:"enabled"`
Current bool `json:"current"`
FilesMaxCapacity int `json:"files_max_capacity"`
ReposMaxCapacity int `json:"repos_max_capacity"`
VerificationMaxCapacity int `json:"verification_max_capacity"`
SelectiveSyncType string `json:"selective_sync_type"`
SelectiveSyncShards []string `json:"selective_sync_shards"`
SelectiveSyncNamespaceIds []int `json:"selective_sync_namespace_ids"`
MinimumReverificationInterval int `json:"minimum_reverification_interval"`
ContainerRepositoriesMaxCapacity int `json:"container_repositories_max_capacity"`
SyncObjectStorage bool `json:"sync_object_storage"`
CloneProtocol string `json:"clone_protocol"`
WebEditURL string `json:"web_edit_url"`
WebGeoProjectsURL string `json:"web_geo_projects_url"`
Links GeoNodeLinks `json:"_links"`
}
// GeoNodeLinks represents links for GitLab GeoNode.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/geo_nodes.html
type GeoNodeLinks struct {
Self string `json:"self"`
Status string `json:"status"`
Repair string `json:"repair"`
}
// GeoNodesService handles communication with Geo Nodes related methods
// of GitLab API.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/geo_nodes.html
type GeoNodesService struct {
client *Client
}
// CreateGeoNodesOptions represents the available CreateGeoNode() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/geo_nodes.html#create-a-new-geo-node
type CreateGeoNodesOptions struct {
Primary *bool `url:"primary,omitempty" json:"primary,omitempty"`
Enabled *bool `url:"enabled,omitempty" json:"enabled,omitempty"`
Name *string `url:"name,omitempty" json:"name,omitempty"`
URL *string `url:"url,omitempty" json:"url,omitempty"`
InternalURL *string `url:"internal_url,omitempty" json:"internal_url,omitempty"`
FilesMaxCapacity *int `url:"files_max_capacity,omitempty" json:"files_max_capacity,omitempty"`
ReposMaxCapacity *int `url:"repos_max_capacity,omitempty" json:"repos_max_capacity,omitempty"`
VerificationMaxCapacity *int `url:"verification_max_capacity,omitempty" json:"verification_max_capacity,omitempty"`
ContainerRepositoriesMaxCapacity *int `url:"container_repositories_max_capacity,omitempty" json:"container_repositories_max_capacity,omitempty"`
SyncObjectStorage *bool `url:"sync_object_storage,omitempty" json:"sync_object_storage,omitempty"`
SelectiveSyncType *string `url:"selective_sync_type,omitempty" json:"selective_sync_type,omitempty"`
SelectiveSyncShards []string `url:"selective_sync_shards,omitempty" json:"selective_sync_shards,omitempty"`
SelectiveSyncNamespaceIds []int `url:"selective_sync_namespace_ids,omitempty" json:"selective_sync_namespace_ids,omitempty"`
MinimumReverificationInterval *int `url:"minimum_reverification_interval,omitempty" json:"minimum_reverification_interval,omitempty"`
}
// CreateGeoNode creates a new Geo Node.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/geo_nodes.html#create-a-new-geo-node
func (s *GeoNodesService) CreateGeoNode(opt *CreateGeoNodesOptions, options ...RequestOptionFunc) (*GeoNode, *Response, error) {
req, err := s.client.NewRequest(http.MethodPost, "geo_nodes", opt, options)
if err != nil {
return nil, nil, err
}
g := new(GeoNode)
resp, err := s.client.Do(req, g)
if err != nil {
return nil, resp, err
}
return g, resp, err
}
// ListGeoNodesOptions represents the available ListGeoNodes() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/geo_nodes.html#retrieve-configuration-about-all-geo-nodes
type ListGeoNodesOptions ListOptions
// ListGeoNodes gets a list of geo nodes.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/geo_nodes.html#retrieve-configuration-about-all-geo-nodes
func (s *GeoNodesService) ListGeoNodes(opt *ListGeoNodesOptions, options ...RequestOptionFunc) ([]*GeoNode, *Response, error) {
req, err := s.client.NewRequest(http.MethodGet, "geo_nodes", opt, options)
if err != nil {
return nil, nil, err
}
var gs []*GeoNode
resp, err := s.client.Do(req, &gs)
if err != nil {
return nil, resp, err
}
return gs, resp, err
}
// GetGeoNode gets a specific geo node.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/geo_nodes.html#retrieve-configuration-about-a-specific-geo-node
func (s *GeoNodesService) GetGeoNode(id int, options ...RequestOptionFunc) (*GeoNode, *Response, error) {
u := fmt.Sprintf("geo_nodes/%d", id)
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
if err != nil {
return nil, nil, err
}
g := new(GeoNode)
resp, err := s.client.Do(req, g)
if err != nil {
return nil, resp, err
}
return g, resp, err
}
// UpdateGeoNodesOptions represents the available EditGeoNode() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/geo_nodes.html#edit-a-geo-node
type UpdateGeoNodesOptions struct {
ID *int `url:"primary,omitempty" json:"primary,omitempty"`
Enabled *bool `url:"enabled,omitempty" json:"enabled,omitempty"`
Name *string `url:"name,omitempty" json:"name,omitempty"`
URL *string `url:"url,omitempty" json:"url,omitempty"`
InternalURL *string `url:"internal_url,omitempty" json:"internal_url,omitempty"`
FilesMaxCapacity *int `url:"files_max_capacity,omitempty" json:"files_max_capacity,omitempty"`
ReposMaxCapacity *int `url:"repos_max_capacity,omitempty" json:"repos_max_capacity,omitempty"`
VerificationMaxCapacity *int `url:"verification_max_capacity,omitempty" json:"verification_max_capacity,omitempty"`
ContainerRepositoriesMaxCapacity *int `url:"container_repositories_max_capacity,omitempty" json:"container_repositories_max_capacity,omitempty"`
SyncObjectStorage *bool `url:"sync_object_storage,omitempty" json:"sync_object_storage,omitempty"`
SelectiveSyncType *string `url:"selective_sync_type,omitempty" json:"selective_sync_type,omitempty"`
SelectiveSyncShards []string `url:"selective_sync_shards,omitempty" json:"selective_sync_shards,omitempty"`
SelectiveSyncNamespaceIds []int `url:"selective_sync_namespace_ids,omitempty" json:"selective_sync_namespace_ids,omitempty"`
MinimumReverificationInterval *int `url:"minimum_reverification_interval,omitempty" json:"minimum_reverification_interval,omitempty"`
}
// EditGeoNode updates settings of an existing Geo node.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/geo_nodes.html#edit-a-geo-node
func (s *GeoNodesService) EditGeoNode(id int, opt *UpdateGeoNodesOptions, options ...RequestOptionFunc) (*GeoNode, *Response, error) {
u := fmt.Sprintf("geo_nodes/%d", id)
req, err := s.client.NewRequest(http.MethodPut, u, opt, options)
if err != nil {
return nil, nil, err
}
g := new(GeoNode)
resp, err := s.client.Do(req, g)
if err != nil {
return nil, resp, err
}
return g, resp, err
}
// DeleteGeoNode removes the Geo node.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/geo_nodes.html#delete-a-geo-node
func (s *GeoNodesService) DeleteGeoNode(id int, options ...RequestOptionFunc) (*Response, error) {
u := fmt.Sprintf("geo_nodes/%d", id)
req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
if err != nil {
return nil, err
}
return s.client.Do(req, nil)
}
// RepairGeoNode to repair the OAuth authentication of a Geo node.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/geo_nodes.html#repair-a-geo-node
func (s *GeoNodesService) RepairGeoNode(id int, options ...RequestOptionFunc) (*GeoNode, *Response, error) {
u := fmt.Sprintf("geo_nodes/%d/repair", id)
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
if err != nil {
return nil, nil, err
}
g := new(GeoNode)
resp, err := s.client.Do(req, g)
if err != nil {
return nil, resp, err
}
return g, resp, err
}
// GeoNodeStatus represents the status of Geo Node.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/geo_nodes.html#retrieve-status-about-all-geo-nodes
type GeoNodeStatus struct {
GeoNodeID int `json:"geo_node_id"`
Healthy bool `json:"healthy"`
Health string `json:"health"`
HealthStatus string `json:"health_status"`
MissingOauthApplication bool `json:"missing_oauth_application"`
AttachmentsCount int `json:"attachments_count"`
AttachmentsSyncedCount int `json:"attachments_synced_count"`
AttachmentsFailedCount int `json:"attachments_failed_count"`
AttachmentsSyncedMissingOnPrimaryCount int `json:"attachments_synced_missing_on_primary_count"`
AttachmentsSyncedInPercentage string `json:"attachments_synced_in_percentage"`
DbReplicationLagSeconds int `json:"db_replication_lag_seconds"`
LfsObjectsCount int `json:"lfs_objects_count"`
LfsObjectsSyncedCount int `json:"lfs_objects_synced_count"`
LfsObjectsFailedCount int `json:"lfs_objects_failed_count"`
LfsObjectsSyncedMissingOnPrimaryCount int `json:"lfs_objects_synced_missing_on_primary_count"`
LfsObjectsSyncedInPercentage string `json:"lfs_objects_synced_in_percentage"`
JobArtifactsCount int `json:"job_artifacts_count"`
JobArtifactsSyncedCount int `json:"job_artifacts_synced_count"`
JobArtifactsFailedCount int `json:"job_artifacts_failed_count"`
JobArtifactsSyncedMissingOnPrimaryCount int `json:"job_artifacts_synced_missing_on_primary_count"`
JobArtifactsSyncedInPercentage string `json:"job_artifacts_synced_in_percentage"`
ContainerRepositoriesCount int `json:"container_repositories_count"`
ContainerRepositoriesSyncedCount int `json:"container_repositories_synced_count"`
ContainerRepositoriesFailedCount int `json:"container_repositories_failed_count"`
ContainerRepositoriesSyncedInPercentage string `json:"container_repositories_synced_in_percentage"`
DesignRepositoriesCount int `json:"design_repositories_count"`
DesignRepositoriesSyncedCount int `json:"design_repositories_synced_count"`
DesignRepositoriesFailedCount int `json:"design_repositories_failed_count"`
DesignRepositoriesSyncedInPercentage string `json:"design_repositories_synced_in_percentage"`
ProjectsCount int `json:"projects_count"`
RepositoriesCount int `json:"repositories_count"`
RepositoriesFailedCount int `json:"repositories_failed_count"`
RepositoriesSyncedCount int `json:"repositories_synced_count"`
RepositoriesSyncedInPercentage string `json:"repositories_synced_in_percentage"`
WikisCount int `json:"wikis_count"`
WikisFailedCount int `json:"wikis_failed_count"`
WikisSyncedCount int `json:"wikis_synced_count"`
WikisSyncedInPercentage string `json:"wikis_synced_in_percentage"`
ReplicationSlotsCount int `json:"replication_slots_count"`
ReplicationSlotsUsedCount int `json:"replication_slots_used_count"`
ReplicationSlotsUsedInPercentage string `json:"replication_slots_used_in_percentage"`
ReplicationSlotsMaxRetainedWalBytes int `json:"replication_slots_max_retained_wal_bytes"`
RepositoriesCheckedCount int `json:"repositories_checked_count"`
RepositoriesCheckedFailedCount int `json:"repositories_checked_failed_count"`
RepositoriesCheckedInPercentage string `json:"repositories_checked_in_percentage"`
RepositoriesChecksummedCount int `json:"repositories_checksummed_count"`
RepositoriesChecksumFailedCount int `json:"repositories_checksum_failed_count"`
RepositoriesChecksummedInPercentage string `json:"repositories_checksummed_in_percentage"`
WikisChecksummedCount int `json:"wikis_checksummed_count"`
WikisChecksumFailedCount int `json:"wikis_checksum_failed_count"`
WikisChecksummedInPercentage string `json:"wikis_checksummed_in_percentage"`
RepositoriesVerifiedCount int `json:"repositories_verified_count"`
RepositoriesVerificationFailedCount int `json:"repositories_verification_failed_count"`
RepositoriesVerifiedInPercentage string `json:"repositories_verified_in_percentage"`
RepositoriesChecksumMismatchCount int `json:"repositories_checksum_mismatch_count"`
WikisVerifiedCount int `json:"wikis_verified_count"`
WikisVerificationFailedCount int `json:"wikis_verification_failed_count"`
WikisVerifiedInPercentage string `json:"wikis_verified_in_percentage"`
WikisChecksumMismatchCount int `json:"wikis_checksum_mismatch_count"`
RepositoriesRetryingVerificationCount int `json:"repositories_retrying_verification_count"`
WikisRetryingVerificationCount int `json:"wikis_retrying_verification_count"`
LastEventID int `json:"last_event_id"`
LastEventTimestamp int `json:"last_event_timestamp"`
CursorLastEventID int `json:"cursor_last_event_id"`
CursorLastEventTimestamp int `json:"cursor_last_event_timestamp"`
LastSuccessfulStatusCheckTimestamp int `json:"last_successful_status_check_timestamp"`
Version string `json:"version"`
Revision string `json:"revision"`
MergeRequestDiffsCount int `json:"merge_request_diffs_count"`
MergeRequestDiffsChecksumTotalCount int `json:"merge_request_diffs_checksum_total_count"`
MergeRequestDiffsChecksummedCount int `json:"merge_request_diffs_checksummed_count"`
MergeRequestDiffsChecksumFailedCount int `json:"merge_request_diffs_checksum_failed_count"`
MergeRequestDiffsSyncedCount int `json:"merge_request_diffs_synced_count"`
MergeRequestDiffsFailedCount int `json:"merge_request_diffs_failed_count"`
MergeRequestDiffsRegistryCount int `json:"merge_request_diffs_registry_count"`
MergeRequestDiffsVerificationTotalCount int `json:"merge_request_diffs_verification_total_count"`
MergeRequestDiffsVerifiedCount int `json:"merge_request_diffs_verified_count"`
MergeRequestDiffsVerificationFailedCount int `json:"merge_request_diffs_verification_failed_count"`
MergeRequestDiffsSyncedInPercentage string `json:"merge_request_diffs_synced_in_percentage"`
MergeRequestDiffsVerifiedInPercentage string `json:"merge_request_diffs_verified_in_percentage"`
PackageFilesCount int `json:"package_files_count"`
PackageFilesChecksumTotalCount int `json:"package_files_checksum_total_count"`
PackageFilesChecksummedCount int `json:"package_files_checksummed_count"`
PackageFilesChecksumFailedCount int `json:"package_files_checksum_failed_count"`
PackageFilesSyncedCount int `json:"package_files_synced_count"`
PackageFilesFailedCount int `json:"package_files_failed_count"`
PackageFilesRegistryCount int `json:"package_files_registry_count"`
PackageFilesVerificationTotalCount int `json:"package_files_verification_total_count"`
PackageFilesVerifiedCount int `json:"package_files_verified_count"`
PackageFilesVerificationFailedCount int `json:"package_files_verification_failed_count"`
PackageFilesSyncedInPercentage string `json:"package_files_synced_in_percentage"`
PackageFilesVerifiedInPercentage string `json:"package_files_verified_in_percentage"`
PagesDeploymentsCount int `json:"pages_deployments_count"`
PagesDeploymentsChecksumTotalCount int `json:"pages_deployments_checksum_total_count"`
PagesDeploymentsChecksummedCount int `json:"pages_deployments_checksummed_count"`
PagesDeploymentsChecksumFailedCount int `json:"pages_deployments_checksum_failed_count"`
PagesDeploymentsSyncedCount int `json:"pages_deployments_synced_count"`
PagesDeploymentsFailedCount int `json:"pages_deployments_failed_count"`
PagesDeploymentsRegistryCount int `json:"pages_deployments_registry_count"`
PagesDeploymentsVerificationTotalCount int `json:"pages_deployments_verification_total_count"`
PagesDeploymentsVerifiedCount int `json:"pages_deployments_verified_count"`
PagesDeploymentsVerificationFailedCount int `json:"pages_deployments_verification_failed_count"`
PagesDeploymentsSyncedInPercentage string `json:"pages_deployments_synced_in_percentage"`
PagesDeploymentsVerifiedInPercentage string `json:"pages_deployments_verified_in_percentage"`
TerraformStateVersionsCount int `json:"terraform_state_versions_count"`
TerraformStateVersionsChecksumTotalCount int `json:"terraform_state_versions_checksum_total_count"`
TerraformStateVersionsChecksummedCount int `json:"terraform_state_versions_checksummed_count"`
TerraformStateVersionsChecksumFailedCount int `json:"terraform_state_versions_checksum_failed_count"`
TerraformStateVersionsSyncedCount int `json:"terraform_state_versions_synced_count"`
TerraformStateVersionsFailedCount int `json:"terraform_state_versions_failed_count"`
TerraformStateVersionsRegistryCount int `json:"terraform_state_versions_registry_count"`
TerraformStateVersionsVerificationTotalCount int `json:"terraform_state_versions_verification_total_count"`
TerraformStateVersionsVerifiedCount int `json:"terraform_state_versions_verified_count"`
TerraformStateVersionsVerificationFailedCount int `json:"terraform_state_versions_verification_failed_count"`
TerraformStateVersionsSyncedInPercentage string `json:"terraform_state_versions_synced_in_percentage"`
TerraformStateVersionsVerifiedInPercentage string `json:"terraform_state_versions_verified_in_percentage"`
SnippetRepositoriesCount int `json:"snippet_repositories_count"`
SnippetRepositoriesChecksumTotalCount int `json:"snippet_repositories_checksum_total_count"`
SnippetRepositoriesChecksummedCount int `json:"snippet_repositories_checksummed_count"`
SnippetRepositoriesChecksumFailedCount int `json:"snippet_repositories_checksum_failed_count"`
SnippetRepositoriesSyncedCount int `json:"snippet_repositories_synced_count"`
SnippetRepositoriesFailedCount int `json:"snippet_repositories_failed_count"`
SnippetRepositoriesRegistryCount int `json:"snippet_repositories_registry_count"`
SnippetRepositoriesVerificationTotalCount int `json:"snippet_repositories_verification_total_count"`
SnippetRepositoriesVerifiedCount int `json:"snippet_repositories_verified_count"`
SnippetRepositoriesVerificationFailedCount int `json:"snippet_repositories_verification_failed_count"`
SnippetRepositoriesSyncedInPercentage string `json:"snippet_repositories_synced_in_percentage"`
SnippetRepositoriesVerifiedInPercentage string `json:"snippet_repositories_verified_in_percentage"`
GroupWikiRepositoriesCount int `json:"group_wiki_repositories_count"`
GroupWikiRepositoriesChecksumTotalCount int `json:"group_wiki_repositories_checksum_total_count"`
GroupWikiRepositoriesChecksummedCount int `json:"group_wiki_repositories_checksummed_count"`
GroupWikiRepositoriesChecksumFailedCount int `json:"group_wiki_repositories_checksum_failed_count"`
GroupWikiRepositoriesSyncedCount int `json:"group_wiki_repositories_synced_count"`
GroupWikiRepositoriesFailedCount int `json:"group_wiki_repositories_failed_count"`
GroupWikiRepositoriesRegistryCount int `json:"group_wiki_repositories_registry_count"`
GroupWikiRepositoriesVerificationTotalCount int `json:"group_wiki_repositories_verification_total_count"`
GroupWikiRepositoriesVerifiedCount int `json:"group_wiki_repositories_verified_count"`
GroupWikiRepositoriesVerificationFailedCount int `json:"group_wiki_repositories_verification_failed_count"`
GroupWikiRepositoriesSyncedInPercentage string `json:"group_wiki_repositories_synced_in_percentage"`
GroupWikiRepositoriesVerifiedInPercentage string `json:"group_wiki_repositories_verified_in_percentage"`
PipelineArtifactsCount int `json:"pipeline_artifacts_count"`
PipelineArtifactsChecksumTotalCount int `json:"pipeline_artifacts_checksum_total_count"`
PipelineArtifactsChecksummedCount int `json:"pipeline_artifacts_checksummed_count"`
PipelineArtifactsChecksumFailedCount int `json:"pipeline_artifacts_checksum_failed_count"`
PipelineArtifactsSyncedCount int `json:"pipeline_artifacts_synced_count"`
PipelineArtifactsFailedCount int `json:"pipeline_artifacts_failed_count"`
PipelineArtifactsRegistryCount int `json:"pipeline_artifacts_registry_count"`
PipelineArtifactsVerificationTotalCount int `json:"pipeline_artifacts_verification_total_count"`
PipelineArtifactsVerifiedCount int `json:"pipeline_artifacts_verified_count"`
PipelineArtifactsVerificationFailedCount int `json:"pipeline_artifacts_verification_failed_count"`
PipelineArtifactsSyncedInPercentage string `json:"pipeline_artifacts_synced_in_percentage"`
PipelineArtifactsVerifiedInPercentage string `json:"pipeline_artifacts_verified_in_percentage"`
UploadsCount int `json:"uploads_count"`
UploadsSyncedCount int `json:"uploads_synced_count"`
UploadsFailedCount int `json:"uploads_failed_count"`
UploadsRegistryCount int `json:"uploads_registry_count"`
UploadsSyncedInPercentage string `json:"uploads_synced_in_percentage"`
}
// RetrieveStatusOfAllGeoNodes get the list of status of all Geo Nodes.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/geo_nodes.html#retrieve-status-about-all-geo-nodes
func (s *GeoNodesService) RetrieveStatusOfAllGeoNodes(options ...RequestOptionFunc) ([]*GeoNodeStatus, *Response, error) {
req, err := s.client.NewRequest(http.MethodGet, "geo_nodes/status", nil, options)
if err != nil {
return nil, nil, err
}
var gnss []*GeoNodeStatus
resp, err := s.client.Do(req, &gnss)
if err != nil {
return nil, resp, err
}
return gnss, resp, err
}
// RetrieveStatusOfGeoNode get the of status of a specific Geo Nodes.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/geo_nodes.html#retrieve-status-about-a-specific-geo-node
func (s *GeoNodesService) RetrieveStatusOfGeoNode(id int, options ...RequestOptionFunc) (*GeoNodeStatus, *Response, error) {
u := fmt.Sprintf("geo_nodes/%d/status", id)
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
if err != nil {
return nil, nil, err
}
gns := new(GeoNodeStatus)
resp, err := s.client.Do(req, gns)
if err != nil {
return nil, resp, err
}
return gns, resp, err
}