Adds devices/<serial>/log as a job-anchored MQTT ingest path: a locator identifies itself by serial in the topic (auto-registered on first sight, org resolved from the job in the payload) rather than by a pre-provisioned broker credential. Device.serialNumber is now globally unique so the bare topic segment is enough to resolve identity. Locator lookup/auto-register logic is shared (LocatorRegistryService) between this and the existing devices/<mqttUsername>/points path. New /sim page (own header, outside the main app nav) simulates a transmitter: pick an open job or create one, set a serial number and telemetry defaults, and send points one at a time or on an interval along a simulated walking path. It calls a new authenticated backend endpoint (POST /orgs/:orgId/sim/publish) that publishes onto the real broker rather than writing the DB directly, so the simulator exercises the actual ingest pipeline end-to-end. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
23 lines
743 B
TypeScript
23 lines
743 B
TypeScript
import { Module } from '@nestjs/common';
|
|
import { RealtimeModule } from '../realtime/realtime.module';
|
|
import { IngestRouterService } from './ingest-router.service';
|
|
import { JobsIngestService } from './jobs-ingest.service';
|
|
import { LocatorRegistryService } from './locator-registry.service';
|
|
import { LogIngestService } from './log-ingest.service';
|
|
import { MqttClientService } from './mqtt-client.service';
|
|
import { PointsIngestService } from './points-ingest.service';
|
|
|
|
@Module({
|
|
imports: [RealtimeModule],
|
|
providers: [
|
|
MqttClientService,
|
|
IngestRouterService,
|
|
PointsIngestService,
|
|
JobsIngestService,
|
|
LogIngestService,
|
|
LocatorRegistryService,
|
|
],
|
|
exports: [MqttClientService],
|
|
})
|
|
export class IngestModule {}
|