This repository has been archived by the owner on Apr 4, 2023. It is now read-only.
/
backups_api.go
87 lines (73 loc) · 2.35 KB
/
backups_api.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
package main
import (
"encoding/json"
)
type Backup struct {
Id string `json:"id"`
CreatedAt string `json:"created_at"`
DatabaseNames []string `json:"database_names"`
Status string `json:"status"`
DeploymentSlug string `json:"deployment"`
Type string `json:"type"`
Filename string `json:"filename"`
Size float64 `json:"size"`
Links []Hateos `json:"links"`
Api Api
}
func (b *Backup) DownloadLink() string {
for _, link := range b.Links {
if link.Rel == "download" {
return link.Href
}
}
return "<Unknown download link>"
}
func (b *Backup) PrettySize() string {
return prettySize(b.Size)
}
func (api *Api) GetBackups() ([]Backup, error) {
body, err := api.restGet(api.apiUrl("/accounts/" + api.Config.AccountSlug + "/backups"))
if err != nil {
return []Backup{}, err
}
var databaseBackupSlice []Backup
err = json.Unmarshal(body, &databaseBackupSlice)
return databaseBackupSlice, err
}
func (api *Api) GetBackupsForDeployment(deploymentSlug string) ([]Backup, error) {
body, err := api.restGet(api.apiUrl("/deployments/" + api.Config.AccountSlug + "/" + deploymentSlug + "/backups"))
if err != nil {
return []Backup{}, err
}
var databaseBackupSlice []Backup
err = json.Unmarshal(body, &databaseBackupSlice)
return databaseBackupSlice, err
}
func (api *Api) GetBackup(backupSlug string) (Backup, error) {
body, err := api.restGet(api.apiUrl("/accounts/" + api.Config.AccountSlug + "/backups/" + backupSlug))
if err != nil {
return Backup{}, err
}
var backup Backup
err = json.Unmarshal(body, &backup)
return backup, err
}
func (api *Api) RestoreBackup(backup Backup, deploymentName, source, destination string) (Deployment, error) {
type RestoreBackupParams struct {
Name string `json:"name"`
DatabaseName string `json:"database_name"`
SourceDatabase string `json:"source_database"`
}
restoreParams := RestoreBackupParams{Name: deploymentName, DatabaseName: destination, SourceDatabase: source}
data, err := json.Marshal(restoreParams)
if err != nil {
return Deployment{}, err
}
body, err := api.restPost(api.apiUrl("/accounts/"+api.Config.AccountSlug+"/backups/"+backup.Id+"/restore"), data)
if err != nil {
return Deployment{}, err
}
var deployment Deployment
err = json.Unmarshal(body, &deployment)
return deployment, err
}