Title here
Summary here
@observertc/sample-decoder-js
provides efficient decoding for binary-encoded ObserveRTC monitoring samples. It converts compressed binary data back to JavaScript objects with schema validation.
npm install @observertc/sample-decoder-js
import { SampleDecoder } from '@observertc/sample-decoder-js';
// Create decoder
const decoder = new SampleDecoder();
// Decode binary data received from network
const encodedData = receivedFromNetwork(); // Binary data from samples-encoder
// Decode single sample
const decodedSample = decoder.decode(encodedData);
console.log('Decoded sample:', {
clientId: decodedSample.clientId,
timestamp: decodedSample.timestamp,
peerConnections: decodedSample.peerConnectionSamples?.length || 0,
events: decodedSample.clientEvents?.length || 0
});
import express from 'express';
import { SampleDecoder } from '@observertc/sample-decoder-js';
const app = express();
const decoder = new SampleDecoder();
// Process encoded samples from clients
app.post('/api/samples', express.raw({ type: 'application/octet-stream' }), async (req, res) => {
try {
const sample = decoder.decode(req.body);
// Process the sample
await analytics.store(sample);
await alerts.checkThresholds(sample);
res.status(200).json({ processed: 1 });
} catch (error) {
console.error('Decoding failed:', error);
res.status(400).json({ error: 'Invalid sample data' });
}
});
import WebSocket from 'ws';
import { SampleDecoder } from '@observertc/sample-decoder-js';
const wss = new WebSocket.Server({ port: 8080 });
const decoder = new SampleDecoder();
wss.on('connection', (ws) => {
ws.on('message', async (data) => {
try {
const sample = decoder.decode(data);
await realTimeProcessor.handle(sample);
} catch (error) {
console.warn('Invalid data received:', error.message);
}
});
});
import { SampleDecoder } from '@observertc/sample-decoder-js';
class AnalyticsPipeline {
constructor() {
this.decoder = new SampleDecoder();
}
async processSample(encodedData) {
try {
const sample = this.decoder.decode(encodedData);
// Extract metrics
const metrics = this.extractMetrics(sample);
await this.metricsDb.insert(metrics);
// Check alerts
await this.alerting.evaluate(sample);
// Update dashboards
await this.dashboards.update(sample);
} catch (error) {
console.error('Processing failed:', error);
}
}
}
import { SampleDecoder } from '@observertc/sample-decoder-js';
class RealTimeMonitor {
constructor() {
this.decoder = new SampleDecoder();
}
async handleEncodedSample(encodedData) {
const sample = this.decoder.decode(encodedData);
// Update real-time dashboard
this.dashboard.updateClientMetrics(sample.clientId, {
timestamp: sample.timestamp,
score: sample.score,
issueCount: sample.clientEvents?.filter(e => e.name === 'ISSUE')?.length || 0
});
// Trigger alerts for critical issues
if (sample.score < 2.0) {
this.alerts.triggerQualityAlert(sample);
}
}
}
SampleDecoder
- Main decoder for sample decodingdecode(binaryData)
- Decode single sample from binary formatFor comprehensive documentation including detailed configuration options, advanced validation strategies, and complete API reference: