Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201105173854-bc9fc8d8c4bc / internal / event / export / ocagent / wire / metrics.go
1 // Copyright 2019 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package wire
6
7 import (
8         "encoding/json"
9         "fmt"
10 )
11
12 type ExportMetricsServiceRequest struct {
13         Node     *Node     `json:"node,omitempty"`
14         Metrics  []*Metric `json:"metrics,omitempty"`
15         Resource *Resource `json:"resource,omitempty"`
16 }
17
18 type Metric struct {
19         MetricDescriptor *MetricDescriptor `json:"metric_descriptor,omitempty"`
20         Timeseries       []*TimeSeries     `json:"timeseries,omitempty"`
21         Resource         *Resource         `json:"resource,omitempty"`
22 }
23
24 type MetricDescriptor struct {
25         Name        string                `json:"name,omitempty"`
26         Description string                `json:"description,omitempty"`
27         Unit        string                `json:"unit,omitempty"`
28         Type        MetricDescriptor_Type `json:"type,omitempty"`
29         LabelKeys   []*LabelKey           `json:"label_keys,omitempty"`
30 }
31
32 type MetricDescriptor_Type int32
33
34 const (
35         MetricDescriptor_UNSPECIFIED             MetricDescriptor_Type = 0
36         MetricDescriptor_GAUGE_INT64             MetricDescriptor_Type = 1
37         MetricDescriptor_GAUGE_DOUBLE            MetricDescriptor_Type = 2
38         MetricDescriptor_GAUGE_DISTRIBUTION      MetricDescriptor_Type = 3
39         MetricDescriptor_CUMULATIVE_INT64        MetricDescriptor_Type = 4
40         MetricDescriptor_CUMULATIVE_DOUBLE       MetricDescriptor_Type = 5
41         MetricDescriptor_CUMULATIVE_DISTRIBUTION MetricDescriptor_Type = 6
42         MetricDescriptor_SUMMARY                 MetricDescriptor_Type = 7
43 )
44
45 type LabelKey struct {
46         Key         string `json:"key,omitempty"`
47         Description string `json:"description,omitempty"`
48 }
49
50 type TimeSeries struct {
51         StartTimestamp *Timestamp    `json:"start_timestamp,omitempty"`
52         LabelValues    []*LabelValue `json:"label_values,omitempty"`
53         Points         []*Point      `json:"points,omitempty"`
54 }
55
56 type LabelValue struct {
57         Value    string `json:"value,omitempty"`
58         HasValue bool   `json:"has_value,omitempty"`
59 }
60
61 type Point struct {
62         Timestamp *Timestamp `json:"timestamp,omitempty"`
63         Value     PointValue `json:"value,omitempty"`
64 }
65
66 type PointInt64Value struct {
67         Int64Value int64 `json:"int64Value,omitempty"`
68 }
69
70 // MarshalJSON creates JSON formatted the same way as jsonpb so that the
71 // OpenCensus service can correctly determine the underlying value type.
72 // This custom MarshalJSON exists because,
73 // by default *Point is JSON marshalled as:
74 //     {"value": {"int64Value": 1}}
75 // but it should be marshalled as:
76 //     {"int64Value": 1}
77 func (p *Point) MarshalJSON() ([]byte, error) {
78         if p == nil {
79                 return []byte("null"), nil
80         }
81
82         switch d := p.Value.(type) {
83         case PointInt64Value:
84                 return json.Marshal(&struct {
85                         Timestamp *Timestamp `json:"timestamp,omitempty"`
86                         Value     int64      `json:"int64Value,omitempty"`
87                 }{
88                         Timestamp: p.Timestamp,
89                         Value:     d.Int64Value,
90                 })
91         case PointDoubleValue:
92                 return json.Marshal(&struct {
93                         Timestamp *Timestamp `json:"timestamp,omitempty"`
94                         Value     float64    `json:"doubleValue,omitempty"`
95                 }{
96                         Timestamp: p.Timestamp,
97                         Value:     d.DoubleValue,
98                 })
99         case PointDistributionValue:
100                 return json.Marshal(&struct {
101                         Timestamp *Timestamp         `json:"timestamp,omitempty"`
102                         Value     *DistributionValue `json:"distributionValue,omitempty"`
103                 }{
104                         Timestamp: p.Timestamp,
105                         Value:     d.DistributionValue,
106                 })
107         default:
108                 return nil, fmt.Errorf("unknown point type %T", p.Value)
109         }
110 }
111
112 type PointDoubleValue struct {
113         DoubleValue float64 `json:"doubleValue,omitempty"`
114 }
115
116 type PointDistributionValue struct {
117         DistributionValue *DistributionValue `json:"distributionValue,omitempty"`
118 }
119
120 type PointSummaryValue struct {
121         SummaryValue *SummaryValue `json:"summaryValue,omitempty"`
122 }
123
124 type PointValue interface {
125         labelPointValue()
126 }
127
128 func (PointInt64Value) labelPointValue()        {}
129 func (PointDoubleValue) labelPointValue()       {}
130 func (PointDistributionValue) labelPointValue() {}
131 func (PointSummaryValue) labelPointValue()      {}
132
133 type DistributionValue struct {
134         Count                 int64         `json:"count,omitempty"`
135         Sum                   float64       `json:"sum,omitempty"`
136         SumOfSquaredDeviation float64       `json:"sum_of_squared_deviation,omitempty"`
137         BucketOptions         BucketOptions `json:"bucket_options,omitempty"`
138         Buckets               []*Bucket     `json:"buckets,omitempty"`
139 }
140
141 type BucketOptionsExplicit struct {
142         Bounds []float64 `json:"bounds,omitempty"`
143 }
144
145 type BucketOptions interface {
146         labelBucketOptions()
147 }
148
149 func (*BucketOptionsExplicit) labelBucketOptions() {}
150
151 var _ BucketOptions = (*BucketOptionsExplicit)(nil)
152 var _ json.Marshaler = (*BucketOptionsExplicit)(nil)
153
154 // Declared for the purpose of custom JSON marshaling without cycles.
155 type bucketOptionsExplicitAlias BucketOptionsExplicit
156
157 // MarshalJSON creates JSON formatted the same way as jsonpb so that the
158 // OpenCensus service can correctly determine the underlying value type.
159 // This custom MarshalJSON exists because,
160 // by default BucketOptionsExplicit is JSON marshalled as:
161 //     {"bounds":[1,2,3]}
162 // but it should be marshalled as:
163 //     {"explicit":{"bounds":[1,2,3]}}
164 func (be *BucketOptionsExplicit) MarshalJSON() ([]byte, error) {
165         return json.Marshal(&struct {
166                 Explicit *bucketOptionsExplicitAlias `json:"explicit,omitempty"`
167         }{
168                 Explicit: (*bucketOptionsExplicitAlias)(be),
169         })
170 }
171
172 type Bucket struct {
173         Count    int64     `json:"count,omitempty"`
174         Exemplar *Exemplar `json:"exemplar,omitempty"`
175 }
176
177 type Exemplar struct {
178         Value       float64           `json:"value,omitempty"`
179         Timestamp   *Timestamp        `json:"timestamp,omitempty"`
180         Attachments map[string]string `json:"attachments,omitempty"`
181 }
182
183 type SummaryValue struct {
184         Count    *Int64Value  `json:"count,omitempty"`
185         Sum      *DoubleValue `json:"sum,omitempty"`
186         Snapshot *Snapshot    `json:"snapshot,omitempty"`
187 }
188
189 type Snapshot struct {
190         Count            *Int64Value                  `json:"count,omitempty"`
191         Sum              *DoubleValue                 `json:"sum,omitempty"`
192         PercentileValues []*SnapshotValueAtPercentile `json:"percentile_values,omitempty"`
193 }
194
195 type SnapshotValueAtPercentile struct {
196         Percentile float64 `json:"percentile,omitempty"`
197         Value      float64 `json:"value,omitempty"`
198 }