forked from bblfsh/bblfshd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
service.go
142 lines (117 loc) · 3.14 KB
/
service.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
132
133
134
135
136
137
138
139
140
141
142
package protocol
import (
"strings"
"time"
"gopkg.in/bblfsh/sdk.v1/protocol"
)
// DefaultService is the default service used to process requests.
var DefaultService Service
type Service interface {
InstallDriver(language string, image string, update bool) error
RemoveDriver(language string) error
DriverStates() ([]*DriverImageState, error)
DriverPoolStates() map[string]*DriverPoolState
DriverInstanceStates() ([]*DriverInstanceState, error)
}
//proteus:generate
type DriverPoolStatesResponse struct {
protocol.Response
// State represent the state of each pool in the daemon.
State map[string]*DriverPoolState
}
//proteus:generate
func DriverPoolStates() *DriverPoolStatesResponse {
resp := &DriverPoolStatesResponse{}
start := time.Now()
defer func() {
resp.Elapsed = time.Since(start)
}()
resp.State = DefaultService.DriverPoolStates()
return resp
}
//proteus:generate
type DriverInstanceStatesResponse struct {
protocol.Response
// State represent the state of each driver instance in the daemon.
State []*DriverInstanceState
}
//proteus:generate
func DriverInstanceStates() *DriverInstanceStatesResponse {
resp := &DriverInstanceStatesResponse{}
start := time.Now()
defer func() {
resp.Elapsed = time.Since(start)
}()
var err error
resp.State, err = DefaultService.DriverInstanceStates()
if err != nil {
resp.Errors = append(resp.Errors, err.Error())
}
return resp
}
//proteus:generate
type DriverStatesResponse struct {
protocol.Response
// State represent the state of each driver in the storage.
State []*DriverImageState
}
//proteus:generate
func DriverStates() *DriverStatesResponse {
resp := &DriverStatesResponse{}
start := time.Now()
defer func() {
resp.Elapsed = time.Since(start)
}()
var err error
resp.State, err = DefaultService.DriverStates()
if err != nil {
resp.Errors = append(resp.Errors, err.Error())
}
return resp
}
//proteus:generate
type InstallDriverRequest struct {
// Language supported by the driver being installed.
Language string
// ImageReference is the name of the image to be installed in the following
// format: `transport:[//]name[:tag]`. The default value for tag is `latest`
ImageReference string
// Update indicates whether an image should be updated. When set to false,
// the installation fails if the image already exists.
Update bool
}
type Response protocol.Response
//proteus:generate
func InstallDriver(req *InstallDriverRequest) *Response {
resp := &Response{}
start := time.Now()
defer func() {
resp.Elapsed = time.Since(start)
}()
err := DefaultService.InstallDriver(
strings.ToLower(req.Language),
req.ImageReference,
req.Update,
)
if err != nil {
resp.Errors = append(resp.Errors, err.Error())
}
return resp
}
//proteus:generate
type RemoveDriverRequest struct {
// Language supported by the driver to be deleted.
Language string
}
//proteus:generate
func RemoveDriver(req *RemoveDriverRequest) *Response {
resp := &Response{}
start := time.Now()
defer func() {
resp.Elapsed = time.Since(start)
}()
if err := DefaultService.RemoveDriver(strings.ToLower(req.Language)); err != nil {
resp.Errors = append(resp.Errors, err.Error())
}
return resp
}