-
Notifications
You must be signed in to change notification settings - Fork 0
/
backupapi.go
103 lines (88 loc) · 2.7 KB
/
backupapi.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
package main
import (
"fmt"
"time"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"golang.org/x/net/context"
"google.golang.org/protobuf/proto"
pb "github.com/brotherlogic/backup/proto"
epb "github.com/brotherlogic/executor/proto"
qpb "github.com/brotherlogic/queue/proto"
google_protobuf "github.com/golang/protobuf/ptypes/any"
)
var (
serverCount = promauto.NewGauge(prometheus.GaugeOpts{
Name: "backup_servercount",
Help: "Push Size",
})
rsyncs = promauto.NewGaugeVec(prometheus.GaugeOpts{
Name: "backup_rsyncs",
Help: "Push Size",
}, []string{"server"})
)
func (s *Server) RunBackup(ctx context.Context, _ *pb.RunBackupRequest) (*pb.RunBackupResponse, error) {
servers, err := s.getAllServers(ctx)
if err != nil {
return nil, err
}
serverCount.Set(float64(len(servers)))
for _, server := range servers {
conn, err := s.FDialSpecificServer(ctx, "executor", s.Registry.Identifier)
if err != nil {
return nil, err
}
defer conn.Close()
client := epb.NewExecutorServiceClient(conn)
_, err = client.QueueExecute(ctx, &epb.ExecuteRequest{
Key: fmt.Sprintf("backup-%v", server),
Command: &epb.Command{
Binary: "rsync",
DeleteOnComplete: true,
Parameters: []string{
"-avz",
"--progress",
fmt.Sprintf("%v:/media/scratch/dlogs/", server),
"/media/raid/dlog-backup/"}}})
if err != nil {
return nil, err
}
rsyncs.With(prometheus.Labels{"server": server}).Inc()
}
conn2, err2 := s.FDialServer(ctx, "queue")
if err2 != nil {
return nil, err2
}
defer conn2.Close()
qclient := qpb.NewQueueServiceClient(conn2)
upup := &pb.RunBackupRequest{}
data, _ := proto.Marshal(upup)
_, err3 := qclient.AddQueueItem(ctx, &qpb.AddQueueItemRequest{
QueueName: "run_backup",
RunTime: time.Now().Add(time.Hour * 24).Unix(),
Payload: &google_protobuf.Any{Value: data},
Key: fmt.Sprintf("backup-%v", time.Now().Add(time.Hour).Format("2006-01-02")),
})
return &pb.RunBackupResponse{}, err3
}
// SaveToken saves out the token
func (s *Server) SaveToken(ctx context.Context, req *pb.TokenRequest) (*pb.TokenResponse, error) {
return &pb.TokenResponse{}, s.KSclient.Save(ctx, TOKEN, req.GetToken())
}
// GetStats gets the relevant stats for the system
func (s *Server) GetStats(ctx context.Context, req *pb.StatsRequest) (*pb.StatsResponse, error) {
stats := &pb.StatsResponse{}
for _, f := range s.config.Files {
found := false
for _, stat := range stats.GetStats() {
if stat.GetState() == f.GetState() {
found = true
stat.Count++
}
}
if !found {
stats.Stats = append(stats.Stats, &pb.Stat{State: f.GetState(), Count: 1, Example: f})
}
}
return stats, nil
}