/
backup_directory.go
131 lines (112 loc) · 3.11 KB
/
backup_directory.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package backupapi
import (
"encoding/json"
"fmt"
"net/http"
"go.uber.org/zap"
)
// BackupDirectory ...
type BackupDirectory struct {
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Path string `json:"path"`
Quota int `json:"quota"`
Size int `json:"size"`
MachineID string `json:"machine_id"`
TenantID string `json:"tenant_id"`
}
// ListBackupDirectory ...
type ListBackupDirectory struct {
Directories []BackupDirectory `json:"directories"`
}
// CreateManualBackupRequest represents a request manual backup.
type CreateManualBackupRequest struct {
Action string `json:"action"`
StorageType string `json:"storage_type"`
Name string `json:"name"`
}
// UpdateState ...
type UpdateState struct {
EventType string `json:"event_type"`
Directories []Directories `json:"directories"`
}
// Directories ...
type Directories struct {
ID string `json:"id"`
Size int `json:"size"`
}
func (c *Client) backupDirectoryPath(id string) string {
return "/agent/backup-directories/" + id
}
func (c *Client) backupDirectoryActionPath(id string) string {
return fmt.Sprintf("/agent/backup-directories/%s/action", id)
}
func (c *Client) listBackupDirectoryPath() string {
return "/agent/backup-directories"
}
// GetBackupDirectory retrieves a backup directory by given id.
func (c *Client) GetBackupDirectory(id string) (*BackupDirectory, error) {
req, err := c.NewRequest(http.MethodGet, c.backupDirectoryPath(id), nil)
if err != nil {
c.logger.Error("err ", zap.Error(err))
return nil, err
}
resp, err := c.Do(req)
if err != nil {
c.logger.Error("err ", zap.Error(err))
return nil, err
}
if err := checkResponse(resp); err != nil {
c.logger.Error("err ", zap.Error(err))
return nil, err
}
defer resp.Body.Close()
var bd BackupDirectory
if err := json.NewDecoder(resp.Body).Decode(&bd); err != nil {
return nil, err
}
return &bd, err
}
// RequestBackupDirectory requests a manual backup.
func (c *Client) RequestBackupDirectory(id string, cmbr *CreateManualBackupRequest) error {
req, err := c.NewRequest(http.MethodPost, c.backupDirectoryActionPath(id), cmbr)
if err != nil {
c.logger.Error("err ", zap.Error(err))
return err
}
resp, err := c.Do(req)
if err != nil {
c.logger.Error("err ", zap.Error(err))
return err
}
if err := checkResponse(resp); err != nil {
c.logger.Error("err ", zap.Error(err))
return err
}
defer resp.Body.Close()
return nil
}
// ListBackupDirectory retrieves list backup directory.
func (c *Client) ListBackupDirectory() (*ListBackupDirectory, error) {
req, err := c.NewRequest(http.MethodGet, c.listBackupDirectoryPath(), nil)
if err != nil {
c.logger.Error("err ", zap.Error(err))
return nil, err
}
resp, err := c.Do(req)
if err != nil {
c.logger.Error("err ", zap.Error(err))
return nil, err
}
if err := checkResponse(resp); err != nil {
c.logger.Error("err ", zap.Error(err))
return nil, err
}
defer resp.Body.Close()
var lbd ListBackupDirectory
if err := json.NewDecoder(resp.Body).Decode(&lbd); err != nil {
return nil, err
}
return &lbd, err
}