You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by mi...@apache.org on 2023/03/06 10:58:34 UTC
[shardingsphere-on-cloud] branch main updated: feat(pitr):cli-agent api integration (#246)
This is an automated email from the ASF dual-hosted git repository.
miaoliyao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shardingsphere-on-cloud.git
The following commit(s) were added to refs/heads/main by this push:
new ad84b45 feat(pitr):cli-agent api integration (#246)
ad84b45 is described below
commit ad84b45007ce207940a4559a3298c84ec9ec6381
Author: lltgo <ll...@foxmail.com>
AuthorDate: Mon Mar 6 18:58:28 2023 +0800
feat(pitr):cli-agent api integration (#246)
* feat(pitr):cli-agent api integration,restore
* feat(pitr):cli-agent api integration,showDetail
* feat(pitr):cli-agent api integration,showList
---
pitr/cli/internal/pkg/agent-server.go | 84 ++++++++++++++++++++++
pitr/cli/internal/pkg/agent-server_test.go | 70 ++++++++++++++++++
.../{agent-server_test.go => model/as_restore.go} | 40 ++++-------
pitr/cli/internal/pkg/model/as_show.go | 61 ++++++++++++++++
4 files changed, 230 insertions(+), 25 deletions(-)
diff --git a/pitr/cli/internal/pkg/agent-server.go b/pitr/cli/internal/pkg/agent-server.go
index 5531b12..7af91b7 100644
--- a/pitr/cli/internal/pkg/agent-server.go
+++ b/pitr/cli/internal/pkg/agent-server.go
@@ -74,3 +74,87 @@ func (as *agentServer) Backup(in *model.BackupIn) (string, error) {
return out.Data.ID, nil
}
+
+func (as *agentServer) Restore(in *model.RestoreIn) error {
+ url := fmt.Sprintf("%s%s", as.addr, as._apiRestore)
+
+ out := &model.RestoreResp{}
+ httpCode, err := httputils.NewRequest(context.Background(), http.MethodPost, url).
+ Header(map[string]string{
+ "x-request-id": uuid.New().String(),
+ "content-type": "application/json",
+ }).
+ Body(in).
+ Send(out)
+ if err != nil {
+ efmt := "httputils.NewRequest[url=%s,body=%v,out=%v] return err=%s,wrap=%w"
+ return fmt.Errorf(efmt, url, in, out, err, xerr.NewCliErr(xerr.Unknown))
+ }
+
+ if httpCode != http.StatusOK {
+ return fmt.Errorf("unknown http status[code=%d],err=%w", httpCode, xerr.NewCliErr(xerr.InvalidHttpStatus))
+ }
+
+ if out.Code != 0 {
+ asErr := xerr.NewAgentServerErr(out.Code, out.Msg)
+ return fmt.Errorf("agent server error[code=%d,msg=%s],err=%w", out.Code, out.Msg, asErr)
+ }
+
+ return nil
+}
+
+func (as *agentServer) ShowDetail(in *model.ShowDetailIn) (*model.BackupInfo, error) {
+ url := fmt.Sprintf("%s%s", as.addr, as._apiShowDetail)
+
+ out := &model.BackupDetailResp{}
+ httpCode, err := httputils.NewRequest(context.Background(), http.MethodPost, url).
+ Header(map[string]string{
+ "x-request-id": uuid.New().String(),
+ "content-type": "application/json",
+ }).
+ Body(in).
+ Send(out)
+ if err != nil {
+ efmt := "httputils.NewRequest[url=%s,body=%v,out=%v] return err=%s,wrap=%w"
+ return nil, fmt.Errorf(efmt, url, in, out, err, xerr.NewCliErr(xerr.Unknown))
+ }
+
+ if httpCode != http.StatusOK {
+ return nil, fmt.Errorf("unknown http status[code=%d],err=%w", httpCode, xerr.NewCliErr(xerr.InvalidHttpStatus))
+ }
+
+ if out.Code != 0 {
+ asErr := xerr.NewAgentServerErr(out.Code, out.Msg)
+ return nil, fmt.Errorf("agent server error[code=%d,msg=%s],err=%w", out.Code, out.Msg, asErr)
+ }
+
+ 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{}
+ httpCode, err := httputils.NewRequest(context.Background(), http.MethodPost, url).
+ Header(map[string]string{
+ "x-request-id": uuid.New().String(),
+ "content-type": "application/json",
+ }).
+ Body(in).
+ Send(out)
+ if err != nil {
+ efmt := "httputils.NewRequest[url=%s,body=%v,out=%v] return err=%s,wrap=%w"
+ return nil, fmt.Errorf(efmt, url, in, out, err, xerr.NewCliErr(xerr.Unknown))
+ }
+
+ if httpCode != http.StatusOK {
+ return nil, fmt.Errorf("unknown http status[code=%d],err=%w", httpCode, xerr.NewCliErr(xerr.InvalidHttpStatus))
+ }
+
+ if out.Code != 0 {
+ asErr := xerr.NewAgentServerErr(out.Code, out.Msg)
+ return nil, fmt.Errorf("agent server error[code=%d,msg=%s],err=%w", out.Code, out.Msg, asErr)
+ }
+
+ return out.Data, nil
+}
diff --git a/pitr/cli/internal/pkg/agent-server_test.go b/pitr/cli/internal/pkg/agent-server_test.go
index 218bd31..46c7668 100644
--- a/pitr/cli/internal/pkg/agent-server_test.go
+++ b/pitr/cli/internal/pkg/agent-server_test.go
@@ -18,6 +18,7 @@
package pkg
import (
+ "encoding/json"
"fmt"
"github.com/apache/shardingsphere-on-cloud/pitr/cli/internal/pkg/model"
"testing"
@@ -43,3 +44,72 @@ func TestAgentServer_Backup(t *testing.T) {
}
fmt.Println(backupID)
}
+
+func TestAgentServer_Restore(t *testing.T) {
+ t.SkipNow()
+ //Note:just for test api,you need map you own host.
+ as := NewAgentServer("http://agent-server:18080")
+
+ err := as.Restore(&model.RestoreIn{
+ DbPort: 5432,
+ DbName: "omm",
+ Username: "og",
+ Password: "1234567890@SphereEx",
+ DnBackupPath: "/home/omm/data",
+ Instance: "ins-default-0",
+ DnBackupId: "RR3FIC",
+ })
+ if err != nil {
+ panic(err)
+ }
+ fmt.Println("Success")
+}
+
+func TestAgentServer_ShowDetail(t *testing.T) {
+ t.SkipNow()
+ //Note:just for test api,you need map you own host.
+ as := NewAgentServer("http://agent-server:18080")
+
+ backupInfo, err := as.ShowDetail(&model.ShowDetailIn{
+ DbPort: 5432,
+ DbName: "omm",
+ Username: "og",
+ Password: "1234567890@SphereEx",
+ DnBackupPath: "/home/omm/data",
+ Instance: "ins-default-0",
+ DnBackupId: "RR3FIC",
+ })
+ if err != nil {
+ panic(err)
+ }
+
+ indent, err := json.MarshalIndent(backupInfo, "", " ")
+ if err != nil {
+ panic(err)
+ }
+ fmt.Println(string(indent))
+}
+
+func TestAgentServer_ShowList(t *testing.T) {
+ t.SkipNow()
+ //Note:just for test api,you need map you own host.
+ as := NewAgentServer("http://agent-server:18080")
+
+ list, err := as.ShowList(&model.ShowListIn{
+ DbPort: 5432,
+ DbName: "omm",
+ Username: "og",
+ Password: "1234567890@SphereEx",
+ DnBackupPath: "/home/omm/data",
+ Instance: "ins-default-0",
+ })
+ if err != nil {
+ panic(err)
+ }
+
+ indent, err := json.MarshalIndent(list, "", " ")
+ if err != nil {
+ panic(err)
+ }
+ fmt.Println(string(indent))
+}
diff --git a/pitr/cli/internal/pkg/agent-server_test.go b/pitr/cli/internal/pkg/model/as_restore.go
similarity index 57%
copy from pitr/cli/internal/pkg/agent-server_test.go
copy to pitr/cli/internal/pkg/model/as_restore.go
index 218bd31..015c871 100644
--- a/pitr/cli/internal/pkg/agent-server_test.go
+++ b/pitr/cli/internal/pkg/model/as_restore.go
@@ -15,31 +15,21 @@
* limitations under the License.
*/
-package pkg
+package model
-import (
- "fmt"
- "github.com/apache/shardingsphere-on-cloud/pitr/cli/internal/pkg/model"
- "testing"
-)
-
-func TestAgentServer_Backup(t *testing.T) {
- t.SkipNow()
- //Note:just for test api,you need map you own host.
- as := NewAgentServer("http://agent-server:18080")
+type (
+ RestoreIn struct {
+ DbPort uint16 `json:"db_port"`
+ DbName string `json:"db_name"`
+ Username string `json:"username"`
+ Password string `json:"password"`
+ Instance string `json:"instance"`
+ DnBackupPath string `json:"dn_backup_path"`
+ DnBackupId string `json:"dn_backup_id"`
+ }
- backupID, err := as.Backup(&model.BackupIn{
- DbPort: 5432,
- DbName: "omm",
- Username: "og",
- Password: "1234567890@SphereEx",
- DnBackupPath: "/home/omm/data",
- DnThreadsNum: 1,
- DnBackupMode: "FULL",
- Instance: "ins-default-0",
- })
- if err != nil {
- panic(err)
+ RestoreResp struct {
+ Code int `json:"code" validate:"required"`
+ Msg string `json:"msg" validate:"required"`
}
- fmt.Println(backupID)
-}
+)
diff --git a/pitr/cli/internal/pkg/model/as_show.go b/pitr/cli/internal/pkg/model/as_show.go
new file mode 100644
index 0000000..231db16
--- /dev/null
+++ b/pitr/cli/internal/pkg/model/as_show.go
@@ -0,0 +1,61 @@
+/*
+* 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 model
+
+type (
+ ShowDetailIn struct {
+ DbPort uint16 `json:"db_port"`
+ DbName string `json:"db_name"`
+ Username string `json:"username"`
+ Password string `json:"password"`
+ DnBackupId string `json:"dn_backup_id"`
+ DnBackupPath string `json:"dn_backup_path"`
+ Instance string `json:"instance"`
+ }
+
+ ShowListIn struct {
+ DbPort uint16 `json:"db_port"`
+ DbName string `json:"db_name"`
+ Username string `json:"username"`
+ Password string `json:"password"`
+ DnBackupPath string `json:"dn_backup_path"`
+ Instance string `json:"instance"`
+ }
+
+ BackupInfo struct {
+ Id string `json:"dn_backup_id"`
+ Path string `json:"dn_backup_path"`
+ Mode string `json:"db_backup_mode"`
+ Instance string `json:"instance"`
+ StartTime string `json:"start_time"`
+ EndTime string `json:"end_time"`
+ Status string `json:"status"`
+ }
+
+ BackupDetailResp struct {
+ Code int `json:"code" validate:"required"`
+ Msg string `json:"msg" validate:"required"`
+ Data BackupInfo `json:"data"`
+ }
+
+ BackupListResp struct {
+ Code int `json:"code" validate:"required"`
+ Msg string `json:"msg" validate:"required"`
+ Data []BackupInfo `json:"data"`
+ }
+)