-
Notifications
You must be signed in to change notification settings - Fork 49
/
status.go
140 lines (123 loc) · 3.86 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
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
// Copyright (c) Microsoft Corporation
// Licensed under the Apache v2.0 license.
package status
import (
"fmt"
"strconv"
"time"
proto "github.com/golang/protobuf/proto"
common "github.com/microsoft/moc/rpc/common"
)
// InitStatus
func InitStatus() *common.Status {
return &common.Status{
Health: &common.Health{},
ProvisioningStatus: &common.ProvisionStatus{},
LastError: &common.Error{},
Version: GenerateVersion(),
DownloadStatus: &common.DownloadStatus{},
ValidationStatus: &common.ValidationStatus{},
}
}
// SetError
func SetError(s *common.Status, err error) {
if err != nil {
s.LastError.Message = fmt.Sprintf("%+v", err)
} else {
s.LastError.Message = "" // Clear the error
}
}
// SetHealth
func SetHealth(s *common.Status, hState common.HealthState, err ...error) {
s.Health.PreviousState = s.Health.CurrentState
s.Health.CurrentState = hState
if len(err) > 0 {
SetError(s, err[0])
}
}
func IsHealthStateMissing(s *common.Status) bool {
hstatus := s.GetHealth().GetCurrentState()
return (hstatus == common.HealthState_MISSING)
}
func IsDeleted(s *common.Status) bool {
return (IsProvisionStatus(s, common.ProvisionState_DELETED) ||
IsProvisionStatus(s, common.ProvisionState_DEPROVISIONED))
}
func IsProvisionStatus(s *common.Status, pState common.ProvisionState) bool {
return s.ProvisioningStatus.CurrentState == pState
}
// SetProvisionStatus
func SetProvisionStatus(s *common.Status, pState common.ProvisionState, err ...error) {
s.ProvisioningStatus.PreviousState = s.ProvisioningStatus.CurrentState
s.ProvisioningStatus.CurrentState = pState
if len(err) > 0 {
SetError(s, err[0])
}
}
// GenerateVersion
func GenerateVersion() *common.Version {
return &common.Version{
Number: strconv.FormatInt(time.Now().UnixNano(), 10),
}
}
// GetProvisioningState string
func GetProvisioningState(status *common.ProvisionStatus) *string {
stateString := status.GetCurrentState().String()
return &stateString
}
// SetDownloadStatus
func SetDownloadStatus(s *common.Status, dProgressPercentage, dDownloadSizeInBytes, dFileSizeInBytes int64, err ...error) {
s.DownloadStatus.ProgressPercentage = dProgressPercentage
s.DownloadStatus.DownloadSizeInBytes = dDownloadSizeInBytes
s.DownloadStatus.FileSizeInBytes = dFileSizeInBytes
if len(err) > 0 {
SetError(s, err[0])
}
}
func SetValidationStatus(s *common.Status, validationState []*common.ValidationState) {
s.ValidationStatus = new(common.ValidationStatus)
s.ValidationStatus.ValidationState = validationState
}
func GetValidationStatus(s *common.Status) []*common.ValidationState {
return s.GetValidationStatus().GetValidationState()
}
// GetStatuses - converts status to map
func GetStatuses(status *common.Status) map[string]*string {
statuses := map[string]*string{}
pstate := status.GetProvisioningStatus().String()
statuses["ProvisionState"] = &pstate
hstate := status.GetHealth().String()
statuses["HealthState"] = &hstate
estate := status.GetLastError().String()
statuses["Error"] = &estate
version := status.GetVersion().Number
statuses["Version"] = &version
dstate := status.GetDownloadStatus().String()
statuses["DownloadStatus"] = &dstate
return statuses
}
// GetFromStatuses - parses the map to status
func GetFromStatuses(statuses map[string]*string) (status *common.Status) {
status = &common.Status{}
if val, ok := statuses["ProvisionState"]; ok {
ps := new(common.ProvisionStatus)
proto.UnmarshalText(*val, ps)
status.ProvisioningStatus = ps
}
if val, ok := statuses["HealthState"]; ok {
ps := new(common.Health)
proto.UnmarshalText(*val, ps)
status.Health = ps
}
if val, ok := statuses["Error"]; ok {
ps := new(common.Error)
proto.UnmarshalText(*val, ps)
status.LastError = ps
}
if val, ok := statuses["DownloadStatus"]; ok {
ps := new(common.DownloadStatus)
proto.UnmarshalText(*val, ps)
status.DownloadStatus = ps
}
return
}