-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathserver.go
92 lines (73 loc) · 1.87 KB
/
server.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
package polyanalyst6api
import (
"encoding/json"
"fmt"
"github.com/Megaputer/polyanalyst6api-go/parameters"
"github.com/Megaputer/polyanalyst6api-go/responses"
)
const (
apiRoot = "/polyanalyst/api"
)
// Server is the struct for server data representation
type Server struct {
Host string
Port int
}
// Address return base server address
func (s Server) Address() string {
return fmt.Sprintf("https://%s:%d", s.Host, s.Port)
}
// BaseURL returns base API url for the server
func (s Server) BaseURL() string {
return fmt.Sprintf("https://%s:%d%s", s.Host, s.Port, apiRoot)
}
// APIVersions returns available API versions
func (s Server) APIVersions() ([]string, error) {
var (
vs []string
err error
)
url := s.BaseURL() + "/versions"
req, err := createRequest(url, "GET", parameters.Full{})
if err != nil {
return vs, err
}
data, err := req.Perform()
if err != nil {
return vs, err
}
err = json.Unmarshal(data.Body, &vs)
return vs, err
}
// SupportsAPIVersion checks if tha passed API version is supported by the server
func (s Server) SupportsAPIVersion(v string) (bool, error) {
var (
res bool
err error
)
supportedVersions, err := s.APIVersions()
if err != nil {
return res, fmt.Errorf("failed to get supported API versions: %s", err)
}
for _, srvVersion := range supportedVersions {
if srvVersion == v {
return true, nil
}
}
return false, nil
}
// Health returns server health data
func (s Server) Health() (responses.ServerHealth, error) {
var health responses.ServerHealth
url := s.Address() + "/polyanalyst/health"
req, err := createRequest(url, "GET", parameters.Full{})
if err != nil {
return health, err
}
data, err := req.Perform()
if err != nil {
return health, err
}
err = json.Unmarshal(data.Body, &health)
return health, err
}