@@ -22,7 +22,7 @@ import {
2222 RequestData ,
2323} from "../../src/generated" ;
2424import assert from "assert" ;
25- import { Tags } from "../../src/types" ;
25+ import { BreezePerformanceCounterNames , OTelPerformanceCounterNames , Tags } from "../../src/types" ;
2626import { Context , getInstance } from "../../src/platform" ;
2727
2828const context = getInstance ( ) ;
@@ -127,4 +127,247 @@ describe("metricUtil.ts", () => {
127127 ) ;
128128 } ) ;
129129 } ) ;
130+
131+ describe ( "#performanceMetricsToEnvelope" , ( ) => {
132+ it ( "should create private bytes envelopes with the correct name" , async ( ) => {
133+ const expectedTags : Tags = {
134+ "ai.device.osVersion" : os && `${ os . type ( ) } ${ os . release ( ) } ` ,
135+ "ai.internal.sdkVersion" : `${ prefix } node${ Context . nodeVersion } :otel${ Context . opentelemetryVersion } :${ version } ` ,
136+ } ;
137+ const expectedBaseData = {
138+ name : BreezePerformanceCounterNames . PRIVATE_BYTES ,
139+ value : 1 ,
140+ dataPointType : "Aggregation" ,
141+ count : 1 ,
142+ } ;
143+ const provider = new MeterProvider ( {
144+ resource : new Resource ( {
145+ [ SemanticResourceAttributes . SERVICE_NAME ] : "basic-service" ,
146+ } ) ,
147+ } ) ;
148+ const exporter = new TestExporter ( {
149+ connectionString : "InstrumentationKey=00000000-0000-0000-0000-000000000000" ,
150+ } ) ;
151+ const metricReaderOptions : PeriodicExportingMetricReaderOptions = {
152+ exporter : exporter ,
153+ } ;
154+ const metricReader = new PeriodicExportingMetricReader ( metricReaderOptions ) ;
155+ provider . addMetricReader ( metricReader ) ;
156+ const meter = provider . getMeter ( "example-meter-node" ) ;
157+ // Create Counter instrument with the meter
158+ const counter = meter . createCounter ( OTelPerformanceCounterNames . PRIVATE_BYTES ) ;
159+ counter . add ( 1 ) ;
160+ provider . forceFlush ( ) ;
161+ await new Promise ( ( resolve ) => setTimeout ( resolve , 800 ) ) ;
162+ const envelope = resourceMetricsToEnvelope ( testMetrics , "ikey" ) ;
163+ assertEnvelope (
164+ envelope [ 0 ] ,
165+ "Microsoft.ApplicationInsights.Metric" ,
166+ 100 ,
167+ "MetricData" ,
168+ expectedTags ,
169+ expectedBaseData ,
170+ ) ;
171+ } ) ;
172+ it ( "should create available bytes envelopes with the correct name" , async ( ) => {
173+ const expectedTags : Tags = {
174+ "ai.device.osVersion" : os && `${ os . type ( ) } ${ os . release ( ) } ` ,
175+ "ai.internal.sdkVersion" : `${ prefix } node${ Context . nodeVersion } :otel${ Context . opentelemetryVersion } :${ version } ` ,
176+ } ;
177+ const expectedBaseData = {
178+ name : BreezePerformanceCounterNames . AVAILABLE_BYTES ,
179+ value : 1 ,
180+ dataPointType : "Aggregation" ,
181+ count : 1 ,
182+ } ;
183+ const provider = new MeterProvider ( {
184+ resource : new Resource ( {
185+ [ SemanticResourceAttributes . SERVICE_NAME ] : "basic-service" ,
186+ } ) ,
187+ } ) ;
188+ const exporter = new TestExporter ( {
189+ connectionString : "InstrumentationKey=00000000-0000-0000-0000-000000000000" ,
190+ } ) ;
191+ const metricReaderOptions : PeriodicExportingMetricReaderOptions = {
192+ exporter : exporter ,
193+ } ;
194+ const metricReader = new PeriodicExportingMetricReader ( metricReaderOptions ) ;
195+ provider . addMetricReader ( metricReader ) ;
196+ const meter = provider . getMeter ( "example-meter-node" ) ;
197+ // Create Counter instrument with the meter
198+ const counter = meter . createCounter ( OTelPerformanceCounterNames . AVAILABLE_BYTES ) ;
199+ counter . add ( 1 ) ;
200+ provider . forceFlush ( ) ;
201+ await new Promise ( ( resolve ) => setTimeout ( resolve , 800 ) ) ;
202+ const envelope = resourceMetricsToEnvelope ( testMetrics , "ikey" ) ;
203+ assertEnvelope (
204+ envelope [ 0 ] ,
205+ "Microsoft.ApplicationInsights.Metric" ,
206+ 100 ,
207+ "MetricData" ,
208+ expectedTags ,
209+ expectedBaseData ,
210+ ) ;
211+ } ) ;
212+ it ( "should create processor time envelopes with the correct name" , async ( ) => {
213+ const expectedTags : Tags = {
214+ "ai.device.osVersion" : os && `${ os . type ( ) } ${ os . release ( ) } ` ,
215+ "ai.internal.sdkVersion" : `${ prefix } node${ Context . nodeVersion } :otel${ Context . opentelemetryVersion } :${ version } ` ,
216+ } ;
217+ const expectedBaseData = {
218+ name : BreezePerformanceCounterNames . PROCESSOR_TIME ,
219+ value : 1 ,
220+ dataPointType : "Aggregation" ,
221+ count : 1 ,
222+ } ;
223+ const provider = new MeterProvider ( {
224+ resource : new Resource ( {
225+ [ SemanticResourceAttributes . SERVICE_NAME ] : "basic-service" ,
226+ } ) ,
227+ } ) ;
228+ const exporter = new TestExporter ( {
229+ connectionString : "InstrumentationKey=00000000-0000-0000-0000-000000000000" ,
230+ } ) ;
231+ const metricReaderOptions : PeriodicExportingMetricReaderOptions = {
232+ exporter : exporter ,
233+ } ;
234+ const metricReader = new PeriodicExportingMetricReader ( metricReaderOptions ) ;
235+ provider . addMetricReader ( metricReader ) ;
236+ const meter = provider . getMeter ( "example-meter-node" ) ;
237+ // Create Counter instrument with the meter
238+ const counter = meter . createCounter ( OTelPerformanceCounterNames . PROCESSOR_TIME ) ;
239+ counter . add ( 1 ) ;
240+ provider . forceFlush ( ) ;
241+ await new Promise ( ( resolve ) => setTimeout ( resolve , 800 ) ) ;
242+ const envelope = resourceMetricsToEnvelope ( testMetrics , "ikey" ) ;
243+ assertEnvelope (
244+ envelope [ 0 ] ,
245+ "Microsoft.ApplicationInsights.Metric" ,
246+ 100 ,
247+ "MetricData" ,
248+ expectedTags ,
249+ expectedBaseData ,
250+ ) ;
251+ } ) ;
252+ it ( "should create process time envelopes with the correct name" , async ( ) => {
253+ const expectedTags : Tags = {
254+ "ai.device.osVersion" : os && `${ os . type ( ) } ${ os . release ( ) } ` ,
255+ "ai.internal.sdkVersion" : `${ prefix } node${ Context . nodeVersion } :otel${ Context . opentelemetryVersion } :${ version } ` ,
256+ } ;
257+ const expectedBaseData = {
258+ name : BreezePerformanceCounterNames . PROCESS_TIME ,
259+ value : 1 ,
260+ dataPointType : "Aggregation" ,
261+ count : 1 ,
262+ } ;
263+ const provider = new MeterProvider ( {
264+ resource : new Resource ( {
265+ [ SemanticResourceAttributes . SERVICE_NAME ] : "basic-service" ,
266+ } ) ,
267+ } ) ;
268+ const exporter = new TestExporter ( {
269+ connectionString : "InstrumentationKey=00000000-0000-0000-0000-000000000000" ,
270+ } ) ;
271+ const metricReaderOptions : PeriodicExportingMetricReaderOptions = {
272+ exporter : exporter ,
273+ } ;
274+ const metricReader = new PeriodicExportingMetricReader ( metricReaderOptions ) ;
275+ provider . addMetricReader ( metricReader ) ;
276+ const meter = provider . getMeter ( "example-meter-node" ) ;
277+ // Create Counter instrument with the meter
278+ const counter = meter . createCounter ( OTelPerformanceCounterNames . PROCESS_TIME ) ;
279+ counter . add ( 1 ) ;
280+ provider . forceFlush ( ) ;
281+ await new Promise ( ( resolve ) => setTimeout ( resolve , 800 ) ) ;
282+ const envelope = resourceMetricsToEnvelope ( testMetrics , "ikey" ) ;
283+ assertEnvelope (
284+ envelope [ 0 ] ,
285+ "Microsoft.ApplicationInsights.Metric" ,
286+ 100 ,
287+ "MetricData" ,
288+ expectedTags ,
289+ expectedBaseData ,
290+ ) ;
291+ } ) ;
292+ it ( "should create request rate envelopes with the correct name" , async ( ) => {
293+ const expectedTags : Tags = {
294+ "ai.device.osVersion" : os && `${ os . type ( ) } ${ os . release ( ) } ` ,
295+ "ai.internal.sdkVersion" : `${ prefix } node${ Context . nodeVersion } :otel${ Context . opentelemetryVersion } :${ version } ` ,
296+ } ;
297+ const expectedBaseData = {
298+ name : BreezePerformanceCounterNames . REQUEST_RATE ,
299+ value : 1 ,
300+ dataPointType : "Aggregation" ,
301+ count : 1 ,
302+ } ;
303+ const provider = new MeterProvider ( {
304+ resource : new Resource ( {
305+ [ SemanticResourceAttributes . SERVICE_NAME ] : "basic-service" ,
306+ } ) ,
307+ } ) ;
308+ const exporter = new TestExporter ( {
309+ connectionString : "InstrumentationKey=00000000-0000-0000-0000-000000000000" ,
310+ } ) ;
311+ const metricReaderOptions : PeriodicExportingMetricReaderOptions = {
312+ exporter : exporter ,
313+ } ;
314+ const metricReader = new PeriodicExportingMetricReader ( metricReaderOptions ) ;
315+ provider . addMetricReader ( metricReader ) ;
316+ const meter = provider . getMeter ( "example-meter-node" ) ;
317+ // Create Counter instrument with the meter
318+ const counter = meter . createCounter ( OTelPerformanceCounterNames . REQUEST_RATE ) ;
319+ counter . add ( 1 ) ;
320+ provider . forceFlush ( ) ;
321+ await new Promise ( ( resolve ) => setTimeout ( resolve , 800 ) ) ;
322+ const envelope = resourceMetricsToEnvelope ( testMetrics , "ikey" ) ;
323+ assertEnvelope (
324+ envelope [ 0 ] ,
325+ "Microsoft.ApplicationInsights.Metric" ,
326+ 100 ,
327+ "MetricData" ,
328+ expectedTags ,
329+ expectedBaseData ,
330+ ) ;
331+ } ) ;
332+ it ( "should create request duration envelopes with the correct name" , async ( ) => {
333+ const expectedTags : Tags = {
334+ "ai.device.osVersion" : os && `${ os . type ( ) } ${ os . release ( ) } ` ,
335+ "ai.internal.sdkVersion" : `${ prefix } node${ Context . nodeVersion } :otel${ Context . opentelemetryVersion } :${ version } ` ,
336+ } ;
337+ const expectedBaseData = {
338+ name : BreezePerformanceCounterNames . REQUEST_DURATION ,
339+ value : 1 ,
340+ dataPointType : "Aggregation" ,
341+ count : 1 ,
342+ } ;
343+ const provider = new MeterProvider ( {
344+ resource : new Resource ( {
345+ [ SemanticResourceAttributes . SERVICE_NAME ] : "basic-service" ,
346+ } ) ,
347+ } ) ;
348+ const exporter = new TestExporter ( {
349+ connectionString : "InstrumentationKey=00000000-0000-0000-0000-000000000000" ,
350+ } ) ;
351+ const metricReaderOptions : PeriodicExportingMetricReaderOptions = {
352+ exporter : exporter ,
353+ } ;
354+ const metricReader = new PeriodicExportingMetricReader ( metricReaderOptions ) ;
355+ provider . addMetricReader ( metricReader ) ;
356+ const meter = provider . getMeter ( "example-meter-node" ) ;
357+ // Create Counter instrument with the meter
358+ const counter = meter . createCounter ( OTelPerformanceCounterNames . REQUEST_DURATION ) ;
359+ counter . add ( 1 ) ;
360+ provider . forceFlush ( ) ;
361+ await new Promise ( ( resolve ) => setTimeout ( resolve , 800 ) ) ;
362+ const envelope = resourceMetricsToEnvelope ( testMetrics , "ikey" ) ;
363+ assertEnvelope (
364+ envelope [ 0 ] ,
365+ "Microsoft.ApplicationInsights.Metric" ,
366+ 100 ,
367+ "MetricData" ,
368+ expectedTags ,
369+ expectedBaseData ,
370+ ) ;
371+ } ) ;
372+ } ) ;
130373} ) ;
0 commit comments