-
Notifications
You must be signed in to change notification settings - Fork 0
/
store.go
109 lines (79 loc) · 1.88 KB
/
store.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
package main
import (
r "gopkg.in/dancannon/gorethink.v1"
)
var listLimit = 25
func migrate() {
r.DBCreate("deployer").Run(rc)
r.TableCreate("deployment").Run(rc)
r.Table("deployment").IndexCreate("Started").Run(rc)
}
func updateDeployment(d *Deployment) {
res, err := r.Table("deployment").Get(d.ID).Run(rc)
if err != nil {
return
}
if res.IsNil() {
w, _ := r.Table("deployment").Insert(d).RunWrite(rc)
d.ID = w.GeneratedKeys[0]
} else {
r.Table("deployment").Get(d.ID).Update(d).RunWrite(rc)
}
}
func getDeployment(id string) (*Deployment, error) {
res, err := r.Table("deployment").Get(id).Run(rc)
if err != nil {
return nil, err
}
defer res.Close()
if res.IsNil() {
return nil, nil
}
var deployment Deployment
err = res.One(&deployment)
if err != nil {
return nil, err
}
return &deployment, nil
}
func countDeployments() (int, error) {
res, err := r.Table("deployment").Count().Run(rc)
if err != nil {
return 0, err
}
var total int
res.One(&total)
return total, nil
}
func listDeployment(page int) ([]*Deployment, error) {
startOffset := (page - 1) * listLimit
endOffset := startOffset + listLimit + 1
res, err := r.Table("deployment").OrderBy(r.OrderByOpts{Index: r.Desc("Started")}).Slice(startOffset, endOffset).Run(rc)
if err != nil {
return nil, err
}
defer res.Close()
var deployments []*Deployment
err = res.All(&deployments)
if err != nil {
return nil, err
}
return deployments, nil
}
func lastDeployment(owner string, name string) (*Deployment, error) {
res, err := r.Table("deployment").OrderBy(r.OrderByOpts{Index: r.Desc("Started")}).Filter(map[string]interface{}{
"Owner": owner,
"Name": name,
"Status": "success",
}).Limit(1).Run(rc)
if err != nil {
return nil, err
}
defer res.Close()
var deployment Deployment
err = res.One(&deployment)
if err != nil {
return nil, err
}
return &deployment, nil
}