pitr/cli/internal/pkg/agent-server.go (125 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 pkg import ( "context" "fmt" "net/http" "github.com/apache/shardingsphere-on-cloud/pitr/cli/internal/pkg/model" "github.com/apache/shardingsphere-on-cloud/pitr/cli/internal/pkg/xerr" "github.com/apache/shardingsphere-on-cloud/pitr/cli/pkg/httputils" ) type agentServer struct { addr string _apiBackup string _apiRestore string _apiShowDetail string _apiShowList string _apiDiskspace string _apiHealthCheck string } type IAgentServer interface { CheckStatus(in *model.HealthCheckIn) error Backup(in *model.BackupIn) (string, error) DeleteBackup(in *model.DeleteBackupIn) error Restore(in *model.RestoreIn) error ShowDetail(in *model.ShowDetailIn) (*model.BackupInfo, error) ShowList(in *model.ShowListIn) ([]model.BackupInfo, error) ShowDiskSpace(in *model.DiskSpaceIn) (*model.DiskSpaceInfo, error) } var _ IAgentServer = (*agentServer)(nil) func NewAgentServer(addr string) IAgentServer { return &agentServer{ addr: addr, _apiBackup: "/api/backup", _apiRestore: "/api/restore", _apiShowDetail: "/api/show", _apiShowList: "/api/show/list", _apiDiskspace: "/api/diskspace", _apiHealthCheck: "/api/healthz", } } // CheckStatus check agent server is alive func (as *agentServer) CheckStatus(in *model.HealthCheckIn) error { url := fmt.Sprintf("%s%s", as.addr, as._apiHealthCheck) r := httputils.NewRequest(context.Background(), http.MethodPost, url) if err := r.Send(in); err != nil { return xerr.NewUnknownErr(url, in, nil, err) } return nil } func (as *agentServer) Backup(in *model.BackupIn) (string, error) { url := fmt.Sprintf("%s%s", as.addr, as._apiBackup) out := &model.BackupOutResp{} r := httputils.NewRequest(context.Background(), http.MethodPost, url) r.Body(in) if err := r.Send(out); err != nil { return "", xerr.NewUnknownErr(url, in, out, err) } if out.Code != 0 { return "", xerr.NewAgentServerErr(out.Code, out.Msg) } return out.Data.ID, nil } // nolint:dupl func (as *agentServer) Restore(in *model.RestoreIn) error { url := fmt.Sprintf("%s%s", as.addr, as._apiRestore) out := &model.RestoreResp{} r := httputils.NewRequest(context.Background(), http.MethodPost, url) r.Body(in) if err := r.Send(out); err != nil { return xerr.NewUnknownErr(url, in, out, err) } if out.Code != 0 { return xerr.NewAgentServerErr(out.Code, out.Msg) } return nil } func (as *agentServer) ShowDetail(in *model.ShowDetailIn) (*model.BackupInfo, error) { url := fmt.Sprintf("%s%s", as.addr, as._apiShowDetail) out := &model.BackupDetailResp{} r := httputils.NewRequest(context.Background(), http.MethodPost, url) r.Body(in) if err := r.Send(out); err != nil { return nil, xerr.NewUnknownErr(url, in, out, err) } if out.Code != 0 { return nil, xerr.NewAgentServerErr(out.Code, out.Msg) } return &out.Data, nil } func (as *agentServer) ShowList(in *model.ShowListIn) ([]model.BackupInfo, error) { url := fmt.Sprintf("%s%s", as.addr, as._apiShowList) out := &model.BackupListResp{} r := httputils.NewRequest(context.Background(), http.MethodPost, url) r.Body(in) if err := r.Send(out); err != nil { return nil, xerr.NewUnknownErr(url, in, out, err) } if out.Code != 0 { return nil, xerr.NewAgentServerErr(out.Code, out.Msg) } return out.Data, nil } func (as *agentServer) ShowDiskSpace(in *model.DiskSpaceIn) (*model.DiskSpaceInfo, error) { url := fmt.Sprintf("%s%s", as.addr, as._apiDiskspace) out := &model.DiskSpaceInfo{} r := httputils.NewRequest(context.Background(), http.MethodPost, url) r.Body(in) if err := r.Send(out); err != nil { return nil, xerr.NewUnknownErr(url, in, out, err) } if out.Code != 0 { return nil, xerr.NewAgentServerErr(out.Code, out.Msg) } return out, nil } // nolint:dupl func (as *agentServer) DeleteBackup(in *model.DeleteBackupIn) error { url := fmt.Sprintf("%s%s", as.addr, as._apiBackup) out := &model.DeleteBackupOut{} r := httputils.NewRequest(context.Background(), http.MethodDelete, url) r.Body(in) if err := r.Send(out); err != nil { return xerr.NewUnknownErr(url, in, out, err) } if out.Code != 0 { return xerr.NewAgentServerErr(out.Code, out.Msg) } return nil }