-
Notifications
You must be signed in to change notification settings - Fork 71
/
status.go
76 lines (65 loc) · 2.48 KB
/
status.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
//
// DISCLAIMER
//
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Copyright holder is ArangoDB GmbH, Cologne, Germany
//
package client
import (
"fmt"
"strings"
)
const (
// ServerProgressPhaseInWait describes success progress state of a server.
ServerProgressPhaseInWait = "in wait"
// ServerStatusEndpoint describes endpoint of a server status.
ServerStatusEndpoint = "/_admin/status"
// ServerApiVersionEndpoint describes endpoint of a server version.
ServerApiVersionEndpoint = "/_api/version"
// ServerAvailabilityEndpoint describes endpoint of a server availability.
ServerAvailabilityEndpoint = "/_admin/server/availability"
)
// ServerProgress describes server progress.
type ServerProgress struct {
// Phase is a name of the lifecycle phase the instance is currently in.
Phase string `json:"phase,omitempty"`
// Feature is internal name of the feature that is currently being prepared
Feature string `json:"feature,omitempty"`
// Current recovery sequence number value, if the instance is currently recovering.
// If the instance is already past the recovery, this attribute contains the last handled recovery sequence number.
RecoveryTick int `json:"recoveryTick,omitempty"`
}
// ServerInfo describes server information.
type ServerInfo struct {
ServerProgress ServerProgress `json:"progress,omitempty"`
}
// ServerStatus describes server status.
type ServerStatus struct {
ServerInfo ServerInfo `json:"serverInfo,omitempty"`
}
// GetProgress returns human-readable progress status of the server, and true if server is ready.
func (s ServerStatus) GetProgress() (string, bool) {
p := s.ServerInfo.ServerProgress
var result strings.Builder
if len(p.Feature) > 0 {
result.WriteString("feature: " + p.Feature + ", ")
}
result.WriteString("phase: " + p.Phase)
if p.RecoveryTick > 0 {
result.WriteString(", recoveryTick: " + fmt.Sprintf("%d", p.RecoveryTick))
}
return result.String(), p.Phase == ServerProgressPhaseInWait
}