@ogcio/o11y-sdk-node 0.1.0-beta.2 → 0.1.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +96 -10
  3. package/coverage/cobertura-coverage.xml +191 -80
  4. package/coverage/lcov-report/index.html +17 -17
  5. package/coverage/lcov-report/sdk-node/index.html +1 -1
  6. package/coverage/lcov-report/sdk-node/index.ts.html +8 -2
  7. package/coverage/lcov-report/sdk-node/lib/console.ts.html +130 -0
  8. package/coverage/lcov-report/sdk-node/lib/grpc.ts.html +27 -27
  9. package/coverage/lcov-report/sdk-node/lib/http.ts.html +6 -6
  10. package/coverage/lcov-report/sdk-node/lib/index.html +46 -16
  11. package/coverage/lcov-report/sdk-node/lib/index.ts.html +5 -14
  12. package/coverage/lcov-report/sdk-node/lib/instrumentation.node.ts.html +82 -58
  13. package/coverage/lcov-report/sdk-node/lib/metrics.ts.html +295 -0
  14. package/coverage/lcov-report/sdk-node/lib/options.ts.html +4 -7
  15. package/coverage/lcov-report/sdk-node/lib/utils.ts.html +1 -1
  16. package/coverage/lcov.info +196 -90
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.js +1 -0
  19. package/dist/lib/console.d.ts +3 -0
  20. package/dist/lib/console.js +12 -0
  21. package/dist/lib/grpc.js +4 -4
  22. package/dist/lib/http.js +4 -4
  23. package/dist/lib/index.d.ts +2 -2
  24. package/dist/lib/instrumentation.node.js +10 -1
  25. package/dist/lib/metrics.d.ts +18 -0
  26. package/dist/lib/metrics.js +28 -0
  27. package/dist/lib/options.d.ts +2 -3
  28. package/dist/package.json +50 -0
  29. package/index.ts +2 -0
  30. package/lib/console.ts +15 -0
  31. package/lib/grpc.ts +4 -4
  32. package/lib/http.ts +4 -4
  33. package/lib/index.ts +2 -2
  34. package/lib/instrumentation.node.ts +9 -1
  35. package/lib/metrics.ts +70 -0
  36. package/lib/options.ts +2 -3
  37. package/package.json +22 -22
  38. package/test/metrics.test.ts +142 -0
  39. package/test/node-config.test.ts +35 -9
  40. package/test/validation.test.ts +31 -0
  41. package/test-report.xml +45 -13
  42. package/tsconfig.json +2 -1
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">89.83% </span>
26
+ <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>53/59</span>
28
+ <span class='fraction'>65/65</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">83.33% </span>
33
+ <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>10/12</span>
35
+ <span class='fraction'>16/16</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">89.83% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>53/59</span>
49
+ <span class='fraction'>65/65</span>
50
50
  </div>
51
51
 
52
52
 
@@ -138,7 +138,16 @@
138
138
  <a name='L73'></a><a href='#L73'>73</a>
139
139
  <a name='L74'></a><a href='#L74'>74</a>
140
140
  <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
150
+ <span class="cline-any cline-neutral">&nbsp;</span>
142
151
  <span class="cline-any cline-neutral">&nbsp;</span>
143
152
  <span class="cline-any cline-neutral">&nbsp;</span>
144
153
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -148,80 +157,89 @@
148
157
  <span class="cline-any cline-neutral">&nbsp;</span>
149
158
  <span class="cline-any cline-neutral">&nbsp;</span>
150
159
  <span class="cline-any cline-neutral">&nbsp;</span>
151
- <span class="cline-any cline-yes">6x</span>
152
- <span class="cline-any cline-yes">6x</span>
153
- <span class="cline-any cline-yes">6x</span>
154
- <span class="cline-any cline-yes">6x</span>
160
+ <span class="cline-any cline-neutral">&nbsp;</span>
161
+ <span class="cline-any cline-yes">8x</span>
162
+ <span class="cline-any cline-yes">8x</span>
163
+ <span class="cline-any cline-yes">8x</span>
164
+ <span class="cline-any cline-yes">8x</span>
155
165
  <span class="cline-any cline-yes">1x</span>
156
166
  <span class="cline-any cline-yes">1x</span>
157
167
  <span class="cline-any cline-yes">1x</span>
158
168
  <span class="cline-any cline-yes">1x</span>
159
169
  <span class="cline-any cline-yes">1x</span>
160
170
  <span class="cline-any cline-neutral">&nbsp;</span>
161
- <span class="cline-any cline-yes">6x</span>
171
+ <span class="cline-any cline-yes">8x</span>
162
172
  <span class="cline-any cline-yes">1x</span>
163
173
  <span class="cline-any cline-yes">1x</span>
164
174
  <span class="cline-any cline-yes">1x</span>
165
175
  <span class="cline-any cline-yes">1x</span>
166
176
  <span class="cline-any cline-yes">1x</span>
167
177
  <span class="cline-any cline-neutral">&nbsp;</span>
168
- <span class="cline-any cline-yes">4x</span>
178
+ <span class="cline-any cline-yes">8x</span>
169
179
  <span class="cline-any cline-yes">1x</span>
170
180
  <span class="cline-any cline-yes">1x</span>
171
181
  <span class="cline-any cline-yes">1x</span>
172
182
  <span class="cline-any cline-yes">1x</span>
173
183
  <span class="cline-any cline-yes">1x</span>
174
184
  <span class="cline-any cline-neutral">&nbsp;</span>
175
- <span class="cline-any cline-yes">3x</span>
185
+ <span class="cline-any cline-yes">5x</span>
176
186
  <span class="cline-any cline-neutral">&nbsp;</span>
177
- <span class="cline-any cline-yes">3x</span>
187
+ <span class="cline-any cline-yes">8x</span>
178
188
  <span class="cline-any cline-yes">1x</span>
179
- <span class="cline-any cline-yes">3x</span>
180
- <span class="cline-any cline-yes">2x</span>
181
- <span class="cline-any cline-yes">2x</span>
182
- <span class="cline-any cline-neutral">&nbsp;</span>
183
- <span class="cline-any cline-yes">3x</span>
184
- <span class="cline-any cline-yes">3x</span>
185
- <span class="cline-any cline-yes">3x</span>
189
+ <span class="cline-any cline-yes">8x</span>
190
+ <span class="cline-any cline-yes">1x</span>
191
+ <span class="cline-any cline-yes">4x</span>
186
192
  <span class="cline-any cline-yes">3x</span>
187
193
  <span class="cline-any cline-yes">3x</span>
188
- <span class="cline-any cline-no">&nbsp;</span>
189
- <span class="cline-any cline-yes">6x</span>
190
194
  <span class="cline-any cline-neutral">&nbsp;</span>
191
- <span class="cline-any cline-yes">6x</span>
192
- <span class="cline-any cline-yes">6x</span>
193
- <span class="cline-any cline-yes">6x</span>
194
- <span class="cline-any cline-yes">6x</span>
195
- <span class="cline-any cline-yes">6x</span>
196
- <span class="cline-any cline-yes">6x</span>
197
- <span class="cline-any cline-yes">6x</span>
198
- <span class="cline-any cline-yes">6x</span>
199
- <span class="cline-any cline-yes">6x</span>
200
- <span class="cline-any cline-yes">6x</span>
201
- <span class="cline-any cline-yes">6x</span>
202
- <span class="cline-any cline-yes">6x</span>
203
- <span class="cline-any cline-yes">6x</span>
204
- <span class="cline-any cline-yes">6x</span>
195
+ <span class="cline-any cline-yes">5x</span>
196
+ <span class="cline-any cline-yes">5x</span>
197
+ <span class="cline-any cline-yes">5x</span>
198
+ <span class="cline-any cline-yes">5x</span>
199
+ <span class="cline-any cline-yes">4x</span>
200
+ <span class="cline-any cline-yes">1x</span>
201
+ <span class="cline-any cline-yes">8x</span>
205
202
  <span class="cline-any cline-neutral">&nbsp;</span>
206
- <span class="cline-any cline-yes">6x</span>
207
- <span class="cline-any cline-yes">6x</span>
208
- <span class="cline-any cline-yes">6x</span>
209
- <span class="cline-any cline-yes">6x</span>
210
- <span class="cline-any cline-no">&nbsp;</span>
211
- <span class="cline-any cline-no">&nbsp;</span>
212
- <span class="cline-any cline-no">&nbsp;</span>
213
- <span class="cline-any cline-no">&nbsp;</span>
214
- <span class="cline-any cline-no">&nbsp;</span>
215
- <span class="cline-any cline-yes">6x</span>
216
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { NodeSDK } from "@opentelemetry/sdk-node";
203
+ <span class="cline-any cline-yes">8x</span>
204
+ <span class="cline-any cline-yes">8x</span>
205
+ <span class="cline-any cline-yes">8x</span>
206
+ <span class="cline-any cline-yes">8x</span>
207
+ <span class="cline-any cline-yes">8x</span>
208
+ <span class="cline-any cline-yes">8x</span>
209
+ <span class="cline-any cline-yes">8x</span>
210
+ <span class="cline-any cline-yes">8x</span>
211
+ <span class="cline-any cline-yes">8x</span>
212
+ <span class="cline-any cline-yes">8x</span>
213
+ <span class="cline-any cline-yes">8x</span>
214
+ <span class="cline-any cline-yes">8x</span>
215
+ <span class="cline-any cline-yes">8x</span>
216
+ <span class="cline-any cline-yes">8x</span>
217
+ <span class="cline-any cline-yes">8x</span>
218
+ <span class="cline-any cline-yes">8x</span>
219
+ <span class="cline-any cline-yes">8x</span>
220
+ <span class="cline-any cline-yes">8x</span>
221
+ <span class="cline-any cline-neutral">&nbsp;</span>
222
+ <span class="cline-any cline-yes">8x</span>
223
+ <span class="cline-any cline-yes">8x</span>
224
+ <span class="cline-any cline-yes">8x</span>
225
+ <span class="cline-any cline-yes">8x</span>
226
+ <span class="cline-any cline-yes">1x</span>
227
+ <span class="cline-any cline-yes">1x</span>
228
+ <span class="cline-any cline-yes">1x</span>
229
+ <span class="cline-any cline-yes">1x</span>
230
+ <span class="cline-any cline-yes">1x</span>
231
+ <span class="cline-any cline-yes">8x</span>
232
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { NodeSDK, resources } from "@opentelemetry/sdk-node";
217
233
  import type { NodeSDKConfig } from "./index.js";
218
234
  import type { Exporters } from "./options.js";
219
235
  import isUrl from "is-url";
220
236
  import buildHttpExporters from "./http.js";
221
237
  import buildGrpcExporters from "./grpc.js";
238
+ import buildConsoleExporters from "./console.js";
222
239
  import { diag, DiagConsoleLogger, DiagLogLevel } from "@opentelemetry/api";
223
240
  import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";
224
241
  import { W3CTraceContextPropagator } from "@opentelemetry/core";
242
+ import packageJson from "../package.json" with { type: "json" };
225
243
  &nbsp;
226
244
  export default function buildNodeInstrumentation(
227
245
  config?: NodeSDKConfig,
@@ -251,6 +269,8 @@ export default function buildNodeInstrumentation(
251
269
  &nbsp;
252
270
  if (config.protocol === "http") {
253
271
  exporter = buildHttpExporters(config);
272
+ } else if (config.protocol === "console") {
273
+ exporter = buildConsoleExporters(config);
254
274
  } else {
255
275
  exporter = buildGrpcExporters(config);
256
276
  }
@@ -259,11 +279,15 @@ export default function buildNodeInstrumentation(
259
279
  diag.setLogger(
260
280
  new DiagConsoleLogger(),
261
281
  config.diagLogLevel
262
- ? DiagLogLevel[config.diagLogLevel<span class="branch-0 cbranch-no" title="branch not covered" >]</span>
263
- <span class="cstat-no" title="statement not covered" > : DiagLogLevel.INFO,</span>
282
+ ? DiagLogLevel[config.diagLogLevel]
283
+ : DiagLogLevel.INFO,
264
284
  );
265
285
  &nbsp;
266
286
  const sdk = new NodeSDK({
287
+ resource: new resources.Resource({
288
+ "o11y.sdk.name": packageJson.name,
289
+ "o11y.sdk.version": packageJson.version,
290
+ }),
267
291
  serviceName: config.serviceName,
268
292
  traceExporter: exporter.traces,
269
293
  metricReader: exporter.metrics,
@@ -281,12 +305,12 @@ export default function buildNodeInstrumentation(
281
305
  sdk.start();
282
306
  console.log("NodeJS OpenTelemetry instrumentation started successfully.");
283
307
  return sdk;
284
- <span class="branch-0 cbranch-no" title="branch not covered" > } catch (error) {</span>
285
- <span class="cstat-no" title="statement not covered" > console.error(</span>
286
- <span class="cstat-no" title="statement not covered" > "Error starting NodeJS OpenTelemetry instrumentation:",</span>
287
- <span class="cstat-no" title="statement not covered" > error,</span>
288
- <span class="cstat-no" title="statement not covered" > );</span>
289
- <span class="cstat-no" title="statement not covered" > }</span>
308
+ } catch (error) {
309
+ console.error(
310
+ "Error starting NodeJS OpenTelemetry instrumentation:",
311
+ error,
312
+ );
313
+ }
290
314
  }
291
315
  &nbsp;</pre></td></tr></table></pre>
292
316
 
@@ -295,7 +319,7 @@ export default function buildNodeInstrumentation(
295
319
  <div class='footer quiet pad2 space-top1 center small'>
296
320
  Code coverage generated by
297
321
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
298
- at 2024-11-26T09:25:25.592Z
322
+ at 2025-01-28T15:28:22.401Z
299
323
  </div>
300
324
  <script src="../../prettify.js"></script>
301
325
  <script>
@@ -0,0 +1,295 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for sdk-node/lib/metrics.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">sdk-node/lib</a> metrics.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">100% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>31/31</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">100% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>14/14</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>9/9</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">100% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>31/31</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
137
+ <span class="cline-any cline-neutral">&nbsp;</span>
138
+ <span class="cline-any cline-neutral">&nbsp;</span>
139
+ <span class="cline-any cline-neutral">&nbsp;</span>
140
+ <span class="cline-any cline-neutral">&nbsp;</span>
141
+ <span class="cline-any cline-neutral">&nbsp;</span>
142
+ <span class="cline-any cline-neutral">&nbsp;</span>
143
+ <span class="cline-any cline-neutral">&nbsp;</span>
144
+ <span class="cline-any cline-neutral">&nbsp;</span>
145
+ <span class="cline-any cline-neutral">&nbsp;</span>
146
+ <span class="cline-any cline-neutral">&nbsp;</span>
147
+ <span class="cline-any cline-neutral">&nbsp;</span>
148
+ <span class="cline-any cline-neutral">&nbsp;</span>
149
+ <span class="cline-any cline-neutral">&nbsp;</span>
150
+ <span class="cline-any cline-neutral">&nbsp;</span>
151
+ <span class="cline-any cline-neutral">&nbsp;</span>
152
+ <span class="cline-any cline-neutral">&nbsp;</span>
153
+ <span class="cline-any cline-neutral">&nbsp;</span>
154
+ <span class="cline-any cline-neutral">&nbsp;</span>
155
+ <span class="cline-any cline-neutral">&nbsp;</span>
156
+ <span class="cline-any cline-neutral">&nbsp;</span>
157
+ <span class="cline-any cline-neutral">&nbsp;</span>
158
+ <span class="cline-any cline-neutral">&nbsp;</span>
159
+ <span class="cline-any cline-neutral">&nbsp;</span>
160
+ <span class="cline-any cline-neutral">&nbsp;</span>
161
+ <span class="cline-any cline-neutral">&nbsp;</span>
162
+ <span class="cline-any cline-neutral">&nbsp;</span>
163
+ <span class="cline-any cline-yes">1x</span>
164
+ <span class="cline-any cline-neutral">&nbsp;</span>
165
+ <span class="cline-any cline-neutral">&nbsp;</span>
166
+ <span class="cline-any cline-neutral">&nbsp;</span>
167
+ <span class="cline-any cline-yes">1x</span>
168
+ <span class="cline-any cline-yes">1x</span>
169
+ <span class="cline-any cline-yes">1x</span>
170
+ <span class="cline-any cline-yes">1x</span>
171
+ <span class="cline-any cline-yes">1x</span>
172
+ <span class="cline-any cline-yes">1x</span>
173
+ <span class="cline-any cline-yes">1x</span>
174
+ <span class="cline-any cline-yes">1x</span>
175
+ <span class="cline-any cline-yes">1x</span>
176
+ <span class="cline-any cline-neutral">&nbsp;</span>
177
+ <span class="cline-any cline-neutral">&nbsp;</span>
178
+ <span class="cline-any cline-neutral">&nbsp;</span>
179
+ <span class="cline-any cline-neutral">&nbsp;</span>
180
+ <span class="cline-any cline-neutral">&nbsp;</span>
181
+ <span class="cline-any cline-neutral">&nbsp;</span>
182
+ <span class="cline-any cline-neutral">&nbsp;</span>
183
+ <span class="cline-any cline-yes">9x</span>
184
+ <span class="cline-any cline-yes">9x</span>
185
+ <span class="cline-any cline-yes">9x</span>
186
+ <span class="cline-any cline-yes">1x</span>
187
+ <span class="cline-any cline-yes">1x</span>
188
+ <span class="cline-any cline-yes">9x</span>
189
+ <span class="cline-any cline-yes">8x</span>
190
+ <span class="cline-any cline-yes">8x</span>
191
+ <span class="cline-any cline-yes">9x</span>
192
+ <span class="cline-any cline-yes">9x</span>
193
+ <span class="cline-any cline-neutral">&nbsp;</span>
194
+ <span class="cline-any cline-yes">1x</span>
195
+ <span class="cline-any cline-yes">9x</span>
196
+ <span class="cline-any cline-yes">9x</span>
197
+ <span class="cline-any cline-yes">9x</span>
198
+ <span class="cline-any cline-yes">9x</span>
199
+ <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-yes">9x</span>
201
+ <span class="cline-any cline-yes">1x</span>
202
+ <span class="cline-any cline-yes">1x</span>
203
+ <span class="cline-any cline-neutral">&nbsp;</span>
204
+ <span class="cline-any cline-yes">8x</span>
205
+ <span class="cline-any cline-yes">8x</span>
206
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
207
+ Counter,
208
+ createNoopMeter,
209
+ Gauge,
210
+ Histogram,
211
+ Meter,
212
+ MetricOptions,
213
+ metrics,
214
+ ObservableCounter,
215
+ ObservableGauge,
216
+ ObservableUpDownCounter,
217
+ UpDownCounter,
218
+ } from "@opentelemetry/api";
219
+ &nbsp;
220
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
221
+ declare const MetricsMap: {
222
+ gauge: Gauge;
223
+ histogram: Histogram;
224
+ counter: Counter;
225
+ updowncounter: UpDownCounter;
226
+ "async-counter": ObservableCounter;
227
+ "async-updowncounter": ObservableUpDownCounter;
228
+ "async-gauge": ObservableGauge;
229
+ };
230
+ &nbsp;
231
+ type MetricType = keyof typeof MetricsMap;
232
+ &nbsp;
233
+ const MetricsFactoryMap: {
234
+ [K in MetricType]: (
235
+ meter: Meter,
236
+ ) =&gt; (name: string, options?: MetricOptions) =&gt; (typeof MetricsMap)[K];
237
+ } = {
238
+ gauge: (meter: Meter) =&gt; meter.createGauge,
239
+ histogram: (meter: Meter) =&gt; meter.createHistogram,
240
+ counter: (meter: Meter) =&gt; meter.createCounter,
241
+ updowncounter: (meter: Meter) =&gt; meter.createUpDownCounter,
242
+ "async-counter": (meter: Meter) =&gt; meter.createObservableCounter,
243
+ "async-updowncounter": (meter: Meter) =&gt; meter.createObservableUpDownCounter,
244
+ "async-gauge": (meter: Meter) =&gt; meter.createObservableGauge,
245
+ };
246
+ &nbsp;
247
+ export interface MetricsParams {
248
+ metricName: string;
249
+ attributeName: string;
250
+ options?: MetricOptions;
251
+ }
252
+ &nbsp;
253
+ function getMeter({ metricName, attributeName }: MetricsParams) {
254
+ let meter: Meter;
255
+ if (!metricName || !attributeName) {
256
+ console.error("Invaid metric configuration!");
257
+ meter = createNoopMeter();
258
+ } else {
259
+ meter = metrics.getMeter(`custom_metric.${metricName}`);
260
+ }
261
+ return meter;
262
+ }
263
+ &nbsp;
264
+ export function getMetric&lt;T extends MetricType&gt;(
265
+ type: T,
266
+ p: MetricsParams,
267
+ ): (typeof MetricsMap)[T] {
268
+ const meter = getMeter(p);
269
+ &nbsp;
270
+ if (!MetricsFactoryMap[type]) {
271
+ throw new Error(`Unsupported metric type: ${type}`);
272
+ }
273
+ &nbsp;
274
+ return MetricsFactoryMap[type](meter).bind(meter)(p.attributeName, p.options);
275
+ }
276
+ &nbsp;</pre></td></tr></table></pre>
277
+
278
+ <div class='push'></div><!-- for sticky footer -->
279
+ </div><!-- /wrapper -->
280
+ <div class='footer quiet pad2 space-top1 center small'>
281
+ Code coverage generated by
282
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
283
+ at 2025-01-28T15:28:22.401Z
284
+ </div>
285
+ <script src="../../prettify.js"></script>
286
+ <script>
287
+ window.onload = function () {
288
+ prettyPrint();
289
+ };
290
+ </script>
291
+ <script src="../../sorter.js"></script>
292
+ <script src="../../block-navigation.js"></script>
293
+ </body>
294
+ </html>
295
+
@@ -70,21 +70,18 @@
70
70
  <a name='L5'></a><a href='#L5'>5</a>
71
71
  <a name='L6'></a><a href='#L6'>6</a>
72
72
  <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
73
+ <a name='L8'></a><a href='#L8'>8</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
75
74
  <span class="cline-any cline-neutral">&nbsp;</span>
76
75
  <span class="cline-any cline-neutral">&nbsp;</span>
77
76
  <span class="cline-any cline-neutral">&nbsp;</span>
78
77
  <span class="cline-any cline-neutral">&nbsp;</span>
79
78
  <span class="cline-any cline-neutral">&nbsp;</span>
80
79
  <span class="cline-any cline-neutral">&nbsp;</span>
81
- <span class="cline-any cline-neutral">&nbsp;</span>
82
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { MetricReader } from "@opentelemetry/sdk-metrics";
83
- import type { logs, tracing } from "@opentelemetry/sdk-node";
80
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { logs, tracing, metrics } from "@opentelemetry/sdk-node";
84
81
  &nbsp;
85
82
  export type Exporters = {
86
83
  traces: tracing.SpanExporter;
87
- metrics: MetricReader;
84
+ metrics: metrics.MetricReader;
88
85
  logs: logs.LogRecordProcessor[];
89
86
  };
90
87
  &nbsp;</pre></td></tr></table></pre>
@@ -94,7 +91,7 @@ export type Exporters = {
94
91
  <div class='footer quiet pad2 space-top1 center small'>
95
92
  Code coverage generated by
96
93
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
97
- at 2024-11-26T09:25:25.592Z
94
+ at 2025-01-28T15:28:22.401Z
98
95
  </div>
99
96
  <script src="../../prettify.js"></script>
100
97
  <script>
@@ -100,7 +100,7 @@ export const LogRecordProcessorMap: Record&lt;
100
100
  <div class='footer quiet pad2 space-top1 center small'>
101
101
  Code coverage generated by
102
102
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
103
- at 2024-11-26T09:25:25.592Z
103
+ at 2025-01-28T15:28:22.401Z
104
104
  </div>
105
105
  <script src="../../prettify.js"></script>
106
106
  <script>