14
14
# type: ignore
15
15
16
16
import io
17
- from typing import Generator , Iterable
17
+ from typing import Generator , Iterable , List
18
18
from unittest import TestCase
19
19
20
- from opentelemetry ._metrics .measurement import Measurement
20
+ from opentelemetry ._metrics .instrument import Instrument
21
+ from opentelemetry ._metrics .measurement import Measurement as APIMeasurement
21
22
from opentelemetry .sdk ._metrics import MeterProvider
23
+ from opentelemetry .sdk ._metrics .measurement import Measurement
22
24
23
25
# FIXME Test that the instrument methods can be called concurrently safely.
24
26
@@ -39,61 +41,137 @@ class TestCpuTimeIntegration(TestCase):
39
41
procs_blocked 0
40
42
softirq 1644603067 0 166540056 208 309152755 8936439 0 1354908 935642970 13 222975718\n """
41
43
42
- measurements_expected = [
43
- Measurement (6150 , {"cpu" : "cpu0" , "state" : "user" }),
44
- Measurement (3177 , {"cpu" : "cpu0" , "state" : "nice" }),
45
- Measurement (5946 , {"cpu" : "cpu0" , "state" : "system" }),
46
- Measurement (891264 , {"cpu" : "cpu0" , "state" : "idle" }),
47
- Measurement (1296 , {"cpu" : "cpu0" , "state" : "iowait" }),
48
- Measurement (0 , {"cpu" : "cpu0" , "state" : "irq" }),
49
- Measurement (8343 , {"cpu" : "cpu0" , "state" : "softirq" }),
50
- Measurement (421 , {"cpu" : "cpu0" , "state" : "guest" }),
51
- Measurement (0 , {"cpu" : "cpu0" , "state" : "guest_nice" }),
52
- Measurement (5882 , {"cpu" : "cpu1" , "state" : "user" }),
53
- Measurement (3491 , {"cpu" : "cpu1" , "state" : "nice" }),
54
- Measurement (6404 , {"cpu" : "cpu1" , "state" : "system" }),
55
- Measurement (891564 , {"cpu" : "cpu1" , "state" : "idle" }),
56
- Measurement (1244 , {"cpu" : "cpu1" , "state" : "iowait" }),
57
- Measurement (0 , {"cpu" : "cpu1" , "state" : "irq" }),
58
- Measurement (2410 , {"cpu" : "cpu1" , "state" : "softirq" }),
59
- Measurement (418 , {"cpu" : "cpu1" , "state" : "guest" }),
60
- Measurement (0 , {"cpu" : "cpu1" , "state" : "guest_nice" }),
61
- ]
44
+ @staticmethod
45
+ def create_measurements_expected (
46
+ instrument : Instrument ,
47
+ ) -> List [Measurement ]:
48
+ return [
49
+ Measurement (
50
+ 6150.29 ,
51
+ instrument = instrument ,
52
+ attributes = {"cpu" : "cpu0" , "state" : "user" },
53
+ ),
54
+ Measurement (
55
+ 3177.46 ,
56
+ instrument = instrument ,
57
+ attributes = {"cpu" : "cpu0" , "state" : "nice" },
58
+ ),
59
+ Measurement (
60
+ 5946.01 ,
61
+ instrument = instrument ,
62
+ attributes = {"cpu" : "cpu0" , "state" : "system" },
63
+ ),
64
+ Measurement (
65
+ 891264.59 ,
66
+ instrument = instrument ,
67
+ attributes = {"cpu" : "cpu0" , "state" : "idle" },
68
+ ),
69
+ Measurement (
70
+ 1296.29 ,
71
+ instrument = instrument ,
72
+ attributes = {"cpu" : "cpu0" , "state" : "iowait" },
73
+ ),
74
+ Measurement (
75
+ 0.0 ,
76
+ instrument = instrument ,
77
+ attributes = {"cpu" : "cpu0" , "state" : "irq" },
78
+ ),
79
+ Measurement (
80
+ 8343.46 ,
81
+ instrument = instrument ,
82
+ attributes = {"cpu" : "cpu0" , "state" : "softirq" },
83
+ ),
84
+ Measurement (
85
+ 421.37 ,
86
+ instrument = instrument ,
87
+ attributes = {"cpu" : "cpu0" , "state" : "guest" },
88
+ ),
89
+ Measurement (
90
+ 0 ,
91
+ instrument = instrument ,
92
+ attributes = {"cpu" : "cpu0" , "state" : "guest_nice" },
93
+ ),
94
+ Measurement (
95
+ 5882.32 ,
96
+ instrument = instrument ,
97
+ attributes = {"cpu" : "cpu1" , "state" : "user" },
98
+ ),
99
+ Measurement (
100
+ 3491.85 ,
101
+ instrument = instrument ,
102
+ attributes = {"cpu" : "cpu1" , "state" : "nice" },
103
+ ),
104
+ Measurement (
105
+ 6404.92 ,
106
+ instrument = instrument ,
107
+ attributes = {"cpu" : "cpu1" , "state" : "system" },
108
+ ),
109
+ Measurement (
110
+ 891564.11 ,
111
+ instrument = instrument ,
112
+ attributes = {"cpu" : "cpu1" , "state" : "idle" },
113
+ ),
114
+ Measurement (
115
+ 1244.85 ,
116
+ instrument = instrument ,
117
+ attributes = {"cpu" : "cpu1" , "state" : "iowait" },
118
+ ),
119
+ Measurement (
120
+ 0 ,
121
+ instrument = instrument ,
122
+ attributes = {"cpu" : "cpu1" , "state" : "irq" },
123
+ ),
124
+ Measurement (
125
+ 2410.04 ,
126
+ instrument = instrument ,
127
+ attributes = {"cpu" : "cpu1" , "state" : "softirq" },
128
+ ),
129
+ Measurement (
130
+ 418.62 ,
131
+ instrument = instrument ,
132
+ attributes = {"cpu" : "cpu1" , "state" : "guest" },
133
+ ),
134
+ Measurement (
135
+ 0 ,
136
+ instrument = instrument ,
137
+ attributes = {"cpu" : "cpu1" , "state" : "guest_nice" },
138
+ ),
139
+ ]
62
140
63
141
def test_cpu_time_callback (self ):
64
- def cpu_time_callback () -> Iterable [Measurement ]:
142
+ def cpu_time_callback () -> Iterable [APIMeasurement ]:
65
143
procstat = io .StringIO (self .procstat_str )
66
144
procstat .readline () # skip the first line
67
145
for line in procstat :
68
146
if not line .startswith ("cpu" ):
69
147
break
70
148
cpu , * states = line .split ()
71
- yield Measurement (
72
- int (states [0 ]) // 100 , {"cpu" : cpu , "state" : "user" }
149
+ yield APIMeasurement (
150
+ int (states [0 ]) / 100 , {"cpu" : cpu , "state" : "user" }
73
151
)
74
- yield Measurement (
75
- int (states [1 ]) // 100 , {"cpu" : cpu , "state" : "nice" }
152
+ yield APIMeasurement (
153
+ int (states [1 ]) / 100 , {"cpu" : cpu , "state" : "nice" }
76
154
)
77
- yield Measurement (
78
- int (states [2 ]) // 100 , {"cpu" : cpu , "state" : "system" }
155
+ yield APIMeasurement (
156
+ int (states [2 ]) / 100 , {"cpu" : cpu , "state" : "system" }
79
157
)
80
- yield Measurement (
81
- int (states [3 ]) // 100 , {"cpu" : cpu , "state" : "idle" }
158
+ yield APIMeasurement (
159
+ int (states [3 ]) / 100 , {"cpu" : cpu , "state" : "idle" }
82
160
)
83
- yield Measurement (
84
- int (states [4 ]) // 100 , {"cpu" : cpu , "state" : "iowait" }
161
+ yield APIMeasurement (
162
+ int (states [4 ]) / 100 , {"cpu" : cpu , "state" : "iowait" }
85
163
)
86
- yield Measurement (
87
- int (states [5 ]) // 100 , {"cpu" : cpu , "state" : "irq" }
164
+ yield APIMeasurement (
165
+ int (states [5 ]) / 100 , {"cpu" : cpu , "state" : "irq" }
88
166
)
89
- yield Measurement (
90
- int (states [6 ]) // 100 , {"cpu" : cpu , "state" : "softirq" }
167
+ yield APIMeasurement (
168
+ int (states [6 ]) / 100 , {"cpu" : cpu , "state" : "softirq" }
91
169
)
92
- yield Measurement (
93
- int (states [7 ]) // 100 , {"cpu" : cpu , "state" : "guest" }
170
+ yield APIMeasurement (
171
+ int (states [7 ]) / 100 , {"cpu" : cpu , "state" : "guest" }
94
172
)
95
- yield Measurement (
96
- int (states [8 ]) // 100 , {"cpu" : cpu , "state" : "guest_nice" }
173
+ yield APIMeasurement (
174
+ int (states [8 ]) / 100 , {"cpu" : cpu , "state" : "guest_nice" }
97
175
)
98
176
99
177
meter = MeterProvider ().get_meter ("name" )
@@ -103,12 +181,14 @@ def cpu_time_callback() -> Iterable[Measurement]:
103
181
unit = "s" ,
104
182
description = "CPU time" ,
105
183
)
106
- measurements = list (observable_counter ._callback ())
107
- self .assertEqual (measurements , self .measurements_expected )
184
+ measurements = list (observable_counter .callback ())
185
+ self .assertEqual (
186
+ measurements , self .create_measurements_expected (observable_counter )
187
+ )
108
188
109
189
def test_cpu_time_generator (self ):
110
190
def cpu_time_generator () -> Generator [
111
- Iterable [Measurement ], None , None
191
+ Iterable [APIMeasurement ], None , None
112
192
]:
113
193
while True :
114
194
measurements = []
@@ -119,55 +199,55 @@ def cpu_time_generator() -> Generator[
119
199
break
120
200
cpu , * states = line .split ()
121
201
measurements .append (
122
- Measurement (
123
- int (states [0 ]) // 100 ,
202
+ APIMeasurement (
203
+ int (states [0 ]) / 100 ,
124
204
{"cpu" : cpu , "state" : "user" },
125
205
)
126
206
)
127
207
measurements .append (
128
- Measurement (
129
- int (states [1 ]) // 100 ,
208
+ APIMeasurement (
209
+ int (states [1 ]) / 100 ,
130
210
{"cpu" : cpu , "state" : "nice" },
131
211
)
132
212
)
133
213
measurements .append (
134
- Measurement (
135
- int (states [2 ]) // 100 ,
214
+ APIMeasurement (
215
+ int (states [2 ]) / 100 ,
136
216
{"cpu" : cpu , "state" : "system" },
137
217
)
138
218
)
139
219
measurements .append (
140
- Measurement (
141
- int (states [3 ]) // 100 ,
220
+ APIMeasurement (
221
+ int (states [3 ]) / 100 ,
142
222
{"cpu" : cpu , "state" : "idle" },
143
223
)
144
224
)
145
225
measurements .append (
146
- Measurement (
147
- int (states [4 ]) // 100 ,
226
+ APIMeasurement (
227
+ int (states [4 ]) / 100 ,
148
228
{"cpu" : cpu , "state" : "iowait" },
149
229
)
150
230
)
151
231
measurements .append (
152
- Measurement (
153
- int (states [5 ]) // 100 , {"cpu" : cpu , "state" : "irq" }
232
+ APIMeasurement (
233
+ int (states [5 ]) / 100 , {"cpu" : cpu , "state" : "irq" }
154
234
)
155
235
)
156
236
measurements .append (
157
- Measurement (
158
- int (states [6 ]) // 100 ,
237
+ APIMeasurement (
238
+ int (states [6 ]) / 100 ,
159
239
{"cpu" : cpu , "state" : "softirq" },
160
240
)
161
241
)
162
242
measurements .append (
163
- Measurement (
164
- int (states [7 ]) // 100 ,
243
+ APIMeasurement (
244
+ int (states [7 ]) / 100 ,
165
245
{"cpu" : cpu , "state" : "guest" },
166
246
)
167
247
)
168
248
measurements .append (
169
- Measurement (
170
- int (states [8 ]) // 100 ,
249
+ APIMeasurement (
250
+ int (states [8 ]) / 100 ,
171
251
{"cpu" : cpu , "state" : "guest_nice" },
172
252
)
173
253
)
@@ -180,5 +260,9 @@ def cpu_time_generator() -> Generator[
180
260
unit = "s" ,
181
261
description = "CPU time" ,
182
262
)
183
- measurements = list (observable_counter ._callback ())
184
- self .assertEqual (measurements , self .measurements_expected )
263
+ measurements = list (observable_counter .callback ())
264
+ self .assertEqual (
265
+ measurements , self .create_measurements_expected (observable_counter )
266
+ )
267
+
268
+ maxDiff = None
0 commit comments