OLD | NEW |
1 // Copyright 2016 The LUCI Authors. All rights reserved. | 1 // Copyright 2016 The LUCI Authors. All rights reserved. |
2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
4 | 4 |
5 package metric | 5 package metric |
6 | 6 |
7 import ( | 7 import ( |
8 "strings" | 8 "strings" |
9 "time" | 9 "time" |
10 | 10 |
11 "golang.org/x/net/context" | 11 "golang.org/x/net/context" |
12 | 12 |
13 "github.com/luci/luci-go/common/tsmon/distribution" | 13 "github.com/luci/luci-go/common/tsmon/distribution" |
14 "github.com/luci/luci-go/common/tsmon/field" | 14 "github.com/luci/luci-go/common/tsmon/field" |
| 15 "github.com/luci/luci-go/common/tsmon/types" |
15 ) | 16 ) |
16 | 17 |
17 // Metrics common to all tasks and devices. | 18 // Metrics common to all tasks and devices. |
18 var ( | 19 var ( |
19 presenceMetric = NewBool( | 20 presenceMetric = NewBool( |
20 "presence/up", | 21 "presence/up", |
21 » » "Set to True when the program is running, missing otherwise.") | 22 » » "Set to True when the program is running, missing otherwise.", |
| 23 » » types.MetricMetadata{}) |
22 ) | 24 ) |
23 | 25 |
24 // Standard metrics for all requests to remote endpoints. These | 26 // Standard metrics for all requests to remote endpoints. These |
25 // metrics should be consistent across all tsmon implementations, | 27 // metrics should be consistent across all tsmon implementations, |
26 // Python or Go. | 28 // Python or Go. |
27 var ( | 29 var ( |
28 requestBytesMetric = NewCumulativeDistribution( | 30 requestBytesMetric = NewCumulativeDistribution( |
29 "http/request_bytes", | 31 "http/request_bytes", |
30 "Bytes sent per http request (body only).", | 32 "Bytes sent per http request (body only).", |
| 33 types.MetricMetadata{Units: types.Bytes}, |
31 distribution.DefaultBucketer, | 34 distribution.DefaultBucketer, |
32 field.String("name"), // Usually the requested service name | 35 field.String("name"), // Usually the requested service name |
33 field.String("client")) // http client used, e.g. urlfetch | 36 field.String("client")) // http client used, e.g. urlfetch |
34 | 37 |
35 responseBytesMetric = NewCumulativeDistribution( | 38 responseBytesMetric = NewCumulativeDistribution( |
36 "http/response_bytes", | 39 "http/response_bytes", |
37 "Bytes received per http request (content only).", | 40 "Bytes received per http request (content only).", |
| 41 types.MetricMetadata{Units: types.Bytes}, |
38 distribution.DefaultBucketer, | 42 distribution.DefaultBucketer, |
39 field.String("name"), // Usually the requested service name | 43 field.String("name"), // Usually the requested service name |
40 field.String("client")) // http client used, e.g. urlfetch | 44 field.String("client")) // http client used, e.g. urlfetch |
41 | 45 |
42 requestDurationsMetric = NewCumulativeDistribution( | 46 requestDurationsMetric = NewCumulativeDistribution( |
43 "http/durations", | 47 "http/durations", |
44 "Time elapsed between sending a request and getting a response (
including parsing) in milliseconds.", | 48 "Time elapsed between sending a request and getting a response (
including parsing) in milliseconds.", |
| 49 types.MetricMetadata{Units: types.Milliseconds}, |
45 distribution.DefaultBucketer, | 50 distribution.DefaultBucketer, |
46 field.String("name"), // Usually the requested service name | 51 field.String("name"), // Usually the requested service name |
47 field.String("client")) // http client used, e.g. urlfetch | 52 field.String("client")) // http client used, e.g. urlfetch |
48 | 53 |
49 responseStatusMetric = NewCounter( | 54 responseStatusMetric = NewCounter( |
50 "http/response_status", | 55 "http/response_status", |
51 "Number of responses received by HTTP status code.", | 56 "Number of responses received by HTTP status code.", |
| 57 types.MetricMetadata{}, |
52 field.Int("status"), // HTTP status code | 58 field.Int("status"), // HTTP status code |
53 field.String("name"), // Usually the requested service name | 59 field.String("name"), // Usually the requested service name |
54 field.String("client")) // http client used, e.g. urlfetch | 60 field.String("client")) // http client used, e.g. urlfetch |
55 ) | 61 ) |
56 | 62 |
57 // Standard metrics for server-side request handlers. These metrics | 63 // Standard metrics for server-side request handlers. These metrics |
58 // should be consistent across all tsmon implementations, Python or | 64 // should be consistent across all tsmon implementations, Python or |
59 // Go. | 65 // Go. |
60 var ( | 66 var ( |
61 serverRequestBytesMetric = NewCumulativeDistribution( | 67 serverRequestBytesMetric = NewCumulativeDistribution( |
62 "http/server_request_bytes", | 68 "http/server_request_bytes", |
63 "Bytes received per http request (body only).", | 69 "Bytes received per http request (body only).", |
| 70 types.MetricMetadata{Units: types.Bytes}, |
64 distribution.DefaultBucketer, | 71 distribution.DefaultBucketer, |
65 field.Int("status"), // HTTP status code | 72 field.Int("status"), // HTTP status code |
66 field.String("name"), // URL template | 73 field.String("name"), // URL template |
67 field.Bool("is_robot")) // If request is made by a bot | 74 field.Bool("is_robot")) // If request is made by a bot |
68 | 75 |
69 serverResponseBytesMetric = NewCumulativeDistribution( | 76 serverResponseBytesMetric = NewCumulativeDistribution( |
70 "http/server_response_bytes", | 77 "http/server_response_bytes", |
71 "Bytes sent per http request (body only).", | 78 "Bytes sent per http request (body only).", |
| 79 types.MetricMetadata{Units: types.Bytes}, |
72 distribution.DefaultBucketer, | 80 distribution.DefaultBucketer, |
73 field.Int("status"), // HTTP status code | 81 field.Int("status"), // HTTP status code |
74 field.String("name"), // URL template | 82 field.String("name"), // URL template |
75 field.Bool("is_robot")) // If request is made by a bot | 83 field.Bool("is_robot")) // If request is made by a bot |
76 | 84 |
77 serverDurationsMetric = NewCumulativeDistribution( | 85 serverDurationsMetric = NewCumulativeDistribution( |
78 "http/server_durations", | 86 "http/server_durations", |
79 "Time elapsed between receiving a request and sending a response
(including parsing) in milliseconds.", | 87 "Time elapsed between receiving a request and sending a response
(including parsing) in milliseconds.", |
| 88 types.MetricMetadata{Units: types.Milliseconds}, |
80 distribution.DefaultBucketer, | 89 distribution.DefaultBucketer, |
81 field.Int("status"), // HTTP status code | 90 field.Int("status"), // HTTP status code |
82 field.String("name"), // URL template | 91 field.String("name"), // URL template |
83 field.Bool("is_robot")) // If request is made by a bot | 92 field.Bool("is_robot")) // If request is made by a bot |
84 | 93 |
85 serverResponseStatusMetric = NewCounter( | 94 serverResponseStatusMetric = NewCounter( |
86 "http/server_response_status", | 95 "http/server_response_status", |
87 "Number of responses sent by HTTP status code.", | 96 "Number of responses sent by HTTP status code.", |
| 97 types.MetricMetadata{}, |
88 field.Int("status"), // HTTP status code | 98 field.Int("status"), // HTTP status code |
89 field.String("name"), // URL template | 99 field.String("name"), // URL template |
90 field.Bool("is_robot")) // If request is made by a bot | 100 field.Bool("is_robot")) // If request is made by a bot |
91 | 101 |
92 ) | 102 ) |
93 | 103 |
94 // UpdatePresenceMetrics sets the presence/up metric. | 104 // UpdatePresenceMetrics sets the presence/up metric. |
95 func UpdatePresenceMetrics(ctx context.Context) { | 105 func UpdatePresenceMetrics(ctx context.Context) { |
96 presenceMetric.Set(ctx, true) | 106 presenceMetric.Set(ctx, true) |
97 } | 107 } |
(...skipping 17 matching lines...) Expand all Loading... |
115 userAgent string) { | 125 userAgent string) { |
116 isRobot := (strings.Contains(userAgent, "GoogleBot") || | 126 isRobot := (strings.Contains(userAgent, "GoogleBot") || |
117 strings.Contains(userAgent, "GoogleSecurityScanner") || | 127 strings.Contains(userAgent, "GoogleSecurityScanner") || |
118 userAgent == "B3M/prober") | 128 userAgent == "B3M/prober") |
119 serverDurationsMetric.Add(ctx, duration.Seconds()*millisecondsInASecond, | 129 serverDurationsMetric.Add(ctx, duration.Seconds()*millisecondsInASecond, |
120 code, name, isRobot) | 130 code, name, isRobot) |
121 serverResponseStatusMetric.Add(ctx, 1, code, name, isRobot) | 131 serverResponseStatusMetric.Add(ctx, 1, code, name, isRobot) |
122 serverRequestBytesMetric.Add(ctx, float64(requestBytes), code, name, isR
obot) | 132 serverRequestBytesMetric.Add(ctx, float64(requestBytes), code, name, isR
obot) |
123 serverResponseBytesMetric.Add(ctx, float64(responseBytes), code, name, i
sRobot) | 133 serverResponseBytesMetric.Add(ctx, float64(responseBytes), code, name, i
sRobot) |
124 } | 134 } |
OLD | NEW |