🎉 Cmdop v1.0 is here! Download now →
Skip to Content
DocsSDKReal-time Events

Real-time Events

Subscribe to real-time events from your machines.

Overview

Cmdop uses WebSockets (via Centrifugo) for real-time communication:

  • Machine status changes
  • Command output streaming
  • File system events
  • Metrics updates

Subscribe to Machine

const subscription = client.subscribe('machine-id'); subscription.on('connect', () => { console.log('Connected'); }); subscription.on('disconnect', () => { console.log('Disconnected'); }); // Cleanup subscription.unsubscribe();

Event Types

Status Events

subscription.on('status', (event) => { console.log(event.status); // 'online' | 'offline' console.log(event.timestamp); });

Output Events

Command output in real-time:

subscription.on('output', (event) => { console.log(event.type); // 'stdout' | 'stderr' console.log(event.data); console.log(event.commandId); });

Metrics Events

System metrics:

subscription.on('metrics', (event) => { console.log(event.cpu.usage); console.log(event.memory.used); console.log(event.disk.used); });

File Events

File system changes:

subscription.on('file', (event) => { console.log(event.type); // 'created' | 'modified' | 'deleted' console.log(event.path); });

Subscribe to Multiple Machines

const subscription = client.subscribeMany([ 'machine-1', 'machine-2', ]); subscription.on('status', (event) => { console.log(event.machineId, event.status); });

React Hook

import { useRealtime } from '@cmdop/react'; function StatusMonitor({ machineId }) { const { status, metrics, connected } = useRealtime(machineId); return ( <div> <p>Connected: {connected ? 'Yes' : 'No'}</p> <p>Status: {status}</p> <p>CPU: {metrics?.cpu.usage}%</p> </div> ); }

Connection Options

const subscription = client.subscribe('machine-id', { reconnect: true, reconnectDelay: 1000, maxReconnectAttempts: 10, });

Error Handling

subscription.on('error', (error) => { console.error('Subscription error:', error); }); subscription.on('reconnecting', (attempt) => { console.log(`Reconnecting (attempt ${attempt})...`); });

Channel Filtering

Subscribe to specific event types:

const subscription = client.subscribe('machine-id', { channels: ['status', 'metrics'], // Only these events });

Presence

See who’s connected:

subscription.on('presence', (event) => { console.log('Users viewing:', event.users); }); const presence = await subscription.presence(); console.log(presence.users);

Real-time Events | Cmdop