~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/cmd/juju/status/formatted.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2015 Canonical Ltd.
 
2
// Licensed under the AGPLv3, see LICENCE file for details.
 
3
 
 
4
package status
 
5
 
 
6
import (
 
7
        "encoding/json"
 
8
 
 
9
        "github.com/juju/juju/instance"
 
10
        "github.com/juju/juju/status"
 
11
)
 
12
 
 
13
type formattedStatus struct {
 
14
        Model        modelStatus                  `json:"model"`
 
15
        Machines     map[string]machineStatus     `json:"machines"`
 
16
        Applications map[string]applicationStatus `json:"applications"`
 
17
}
 
18
 
 
19
type formattedMachineStatus struct {
 
20
        Model    string                   `json:"model"`
 
21
        Machines map[string]machineStatus `json:"machines"`
 
22
}
 
23
 
 
24
type errorStatus struct {
 
25
        StatusError string `json:"status-error" yaml:"status-error"`
 
26
}
 
27
 
 
28
type modelStatus struct {
 
29
        Name             string `json:"name" yaml:"name"`
 
30
        Controller       string `json:"controller" yaml:"controller"`
 
31
        Cloud            string `json:"cloud" yaml:"cloud"`
 
32
        CloudRegion      string `json:"region,omitempty" yaml:"region,omitempty"`
 
33
        Version          string `json:"version" yaml:"version"`
 
34
        AvailableVersion string `json:"upgrade-available,omitempty" yaml:"upgrade-available,omitempty"`
 
35
        Migration        string `json:"migration,omitempty" yaml:"migration,omitempty"`
 
36
}
 
37
 
 
38
type machineStatus struct {
 
39
        Err           error                    `json:"-" yaml:",omitempty"`
 
40
        JujuStatus    statusInfoContents       `json:"juju-status,omitempty" yaml:"juju-status,omitempty"`
 
41
        DNSName       string                   `json:"dns-name,omitempty" yaml:"dns-name,omitempty"`
 
42
        InstanceId    instance.Id              `json:"instance-id,omitempty" yaml:"instance-id,omitempty"`
 
43
        MachineStatus statusInfoContents       `json:"machine-status,omitempty" yaml:"machine-status,omitempty"`
 
44
        Series        string                   `json:"series,omitempty" yaml:"series,omitempty"`
 
45
        Id            string                   `json:"-" yaml:"-"`
 
46
        Containers    map[string]machineStatus `json:"containers,omitempty" yaml:"containers,omitempty"`
 
47
        Hardware      string                   `json:"hardware,omitempty" yaml:"hardware,omitempty"`
 
48
        HAStatus      string                   `json:"controller-member-status,omitempty" yaml:"controller-member-status,omitempty"`
 
49
}
 
50
 
 
51
// A goyaml bug means we can't declare these types
 
52
// locally to the GetYAML methods.
 
53
type machineStatusNoMarshal machineStatus
 
54
 
 
55
func (s machineStatus) MarshalJSON() ([]byte, error) {
 
56
        if s.Err != nil {
 
57
                return json.Marshal(errorStatus{s.Err.Error()})
 
58
        }
 
59
        return json.Marshal(machineStatusNoMarshal(s))
 
60
}
 
61
 
 
62
func (s machineStatus) MarshalYAML() (interface{}, error) {
 
63
        if s.Err != nil {
 
64
                return errorStatus{s.Err.Error()}, nil
 
65
        }
 
66
        return machineStatusNoMarshal(s), nil
 
67
}
 
68
 
 
69
type applicationStatus struct {
 
70
        Err           error                 `json:"-" yaml:",omitempty"`
 
71
        Charm         string                `json:"charm" yaml:"charm"`
 
72
        Series        string                `json:"series"`
 
73
        OS            string                `json:"os"`
 
74
        CharmOrigin   string                `json:"charm-origin" yaml:"charm-origin"`
 
75
        CharmName     string                `json:"charm-name" yaml:"charm-name"`
 
76
        CharmRev      int                   `json:"charm-rev" yaml:"charm-rev"`
 
77
        CanUpgradeTo  string                `json:"can-upgrade-to,omitempty" yaml:"can-upgrade-to,omitempty"`
 
78
        Exposed       bool                  `json:"exposed" yaml:"exposed"`
 
79
        Life          string                `json:"life,omitempty" yaml:"life,omitempty"`
 
80
        StatusInfo    statusInfoContents    `json:"application-status,omitempty" yaml:"application-status"`
 
81
        Relations     map[string][]string   `json:"relations,omitempty" yaml:"relations,omitempty"`
 
82
        SubordinateTo []string              `json:"subordinate-to,omitempty" yaml:"subordinate-to,omitempty"`
 
83
        Units         map[string]unitStatus `json:"units,omitempty" yaml:"units,omitempty"`
 
84
        Version       string                `json:"version,omitempty" yaml:"version,omitempty"`
 
85
}
 
86
 
 
87
type applicationStatusNoMarshal applicationStatus
 
88
 
 
89
func (s applicationStatus) MarshalJSON() ([]byte, error) {
 
90
        if s.Err != nil {
 
91
                return json.Marshal(errorStatus{s.Err.Error()})
 
92
        }
 
93
        return json.Marshal(applicationStatusNoMarshal(s))
 
94
}
 
95
 
 
96
func (s applicationStatus) MarshalYAML() (interface{}, error) {
 
97
        if s.Err != nil {
 
98
                return errorStatus{s.Err.Error()}, nil
 
99
        }
 
100
        return applicationStatusNoMarshal(s), nil
 
101
}
 
102
 
 
103
type meterStatus struct {
 
104
        Color   string `json:"color,omitempty" yaml:"color,omitempty"`
 
105
        Message string `json:"message,omitempty" yaml:"message,omitempty"`
 
106
}
 
107
 
 
108
type unitStatus struct {
 
109
        // New Juju Health Status fields.
 
110
        WorkloadStatusInfo statusInfoContents `json:"workload-status,omitempty" yaml:"workload-status"`
 
111
        JujuStatusInfo     statusInfoContents `json:"juju-status,omitempty" yaml:"juju-status"`
 
112
        MeterStatus        *meterStatus       `json:"meter-status,omitempty" yaml:"meter-status,omitempty"`
 
113
 
 
114
        Charm         string                `json:"upgrading-from,omitempty" yaml:"upgrading-from,omitempty"`
 
115
        Machine       string                `json:"machine,omitempty" yaml:"machine,omitempty"`
 
116
        OpenedPorts   []string              `json:"open-ports,omitempty" yaml:"open-ports,omitempty"`
 
117
        PublicAddress string                `json:"public-address,omitempty" yaml:"public-address,omitempty"`
 
118
        Subordinates  map[string]unitStatus `json:"subordinates,omitempty" yaml:"subordinates,omitempty"`
 
119
}
 
120
 
 
121
type statusInfoContents struct {
 
122
        Err     error         `json:"-" yaml:",omitempty"`
 
123
        Current status.Status `json:"current,omitempty" yaml:"current,omitempty"`
 
124
        Message string        `json:"message,omitempty" yaml:"message,omitempty"`
 
125
        Since   string        `json:"since,omitempty" yaml:"since,omitempty"`
 
126
        Version string        `json:"version,omitempty" yaml:"version,omitempty"`
 
127
        Life    string        `json:"life,omitempty" yaml:"life,omitempty"`
 
128
}
 
129
 
 
130
type statusInfoContentsNoMarshal statusInfoContents
 
131
 
 
132
func (s statusInfoContents) MarshalJSON() ([]byte, error) {
 
133
        if s.Err != nil {
 
134
                return json.Marshal(errorStatus{s.Err.Error()})
 
135
        }
 
136
        return json.Marshal(statusInfoContentsNoMarshal(s))
 
137
}
 
138
 
 
139
func (s statusInfoContents) MarshalYAML() (interface{}, error) {
 
140
        if s.Err != nil {
 
141
                return errorStatus{s.Err.Error()}, nil
 
142
        }
 
143
        return statusInfoContentsNoMarshal(s), nil
 
144
}
 
145
 
 
146
type unitStatusNoMarshal unitStatus
 
147
 
 
148
func (s unitStatus) MarshalJSON() ([]byte, error) {
 
149
        if s.WorkloadStatusInfo.Err != nil {
 
150
                return json.Marshal(errorStatus{s.WorkloadStatusInfo.Err.Error()})
 
151
        }
 
152
        return json.Marshal(unitStatusNoMarshal(s))
 
153
}
 
154
 
 
155
func (s unitStatus) MarshalYAML() (interface{}, error) {
 
156
        if s.WorkloadStatusInfo.Err != nil {
 
157
                return errorStatus{s.WorkloadStatusInfo.Err.Error()}, nil
 
158
        }
 
159
        return unitStatusNoMarshal(s), nil
 
160
}