Skip to main content

Telemetry Models Examples

These examples demonstrate how to compose telemetry connectors and use the shared telemetry contracts when building integrations.

MultiTelemetryConnector

import {
MetricType,
MultiTelemetryConnector,
SilentTelemetryConnector,
TelemetryConnectorFactory
} from '@twin.org/telemetry-models';

TelemetryConnectorFactory.register('silent-a', () => new SilentTelemetryConnector());
TelemetryConnectorFactory.register('silent-b', () => new SilentTelemetryConnector());

const multi = new MultiTelemetryConnector({
telemetryConnectorTypes: ['silent-a', 'silent-b']
});

console.log(multi.className()); // multiTelemetryConnector

await multi.createMetric({
id: 'heartbeat-total',
label: 'Heartbeat Total',
description: 'Number of heartbeats sent',
unit: 'events',
type: MetricType.Counter
});

await multi.updateMetric({
id: 'heartbeat-total',
label: 'Heartbeat Events',
description: 'Total heartbeats sent by all nodes',
unit: 'events'
});

const metricValueId = await multi.addMetricValue('heartbeat-total', 'inc', {
nodeId: 'node-7'
});

console.log(metricValueId.length === 0); // true
import {
MetricType,
MultiTelemetryConnector,
SilentTelemetryConnector,
TelemetryConnectorFactory
} from '@twin.org/telemetry-models';

TelemetryConnectorFactory.register('silent-a', () => new SilentTelemetryConnector());
TelemetryConnectorFactory.register('silent-b', () => new SilentTelemetryConnector());

const multi = new MultiTelemetryConnector({
telemetryConnectorTypes: ['silent-a', 'silent-b']
});

await multi.removeMetric('heartbeat-total');

const counters = await multi.query(MetricType.Counter, undefined, 50);
console.log(counters.entities.length); // 0

const values = await multi.queryValues(
'heartbeat-total',
Date.now() - 86_400_000,
Date.now(),
undefined,
100
);
console.log(values.entities.length); // 0

const metric = await multi.getMetric('heartbeat-total');
console.log(metric.metric.id); // heartbeat-total

SilentTelemetryConnector

import { MetricType, SilentTelemetryConnector } from '@twin.org/telemetry-models';

const silent = new SilentTelemetryConnector();

console.log(silent.className()); // silentTelemetryConnector

await silent.createMetric({
id: 'dropped-messages',
label: 'Dropped Messages',
type: MetricType.Counter
});

await silent.updateMetric({
id: 'dropped-messages',
label: 'Dropped Messages Total'
});

await silent.addMetricValue('dropped-messages', 1);
await silent.removeMetric('dropped-messages');
import { SilentTelemetryConnector } from '@twin.org/telemetry-models';

const silent = new SilentTelemetryConnector();

try {
await silent.getMetric('dropped-messages');
} catch (error) {
if (error instanceof Error) {
console.log(error.name); // NotSupportedError
}
}

try {
await silent.query();
} catch (error) {
if (error instanceof Error) {
console.log(error.name); // NotSupportedError
}
}

try {
await silent.queryValues('dropped-messages');
} catch (error) {
if (error instanceof Error) {
console.log(error.name); // NotSupportedError
}
}

TelemetryConnectorFactory

import { SilentTelemetryConnector, TelemetryConnectorFactory } from '@twin.org/telemetry-models';

TelemetryConnectorFactory.register('silent-default', () => new SilentTelemetryConnector());

const connector = TelemetryConnectorFactory.get('silent-default');
console.log(connector.className()); // silentTelemetryConnector