diff --git a/app/src/handlers/demo-plc.ts b/app/src/handlers/demo-plc.ts index 91b9fed..4e7fd06 100644 --- a/app/src/handlers/demo-plc.ts +++ b/app/src/handlers/demo-plc.ts @@ -28,7 +28,7 @@ function toMetric(payload: DemoPlcPayload, timestamp: number): DemoPlcMetric { } async function postMetric(metric: DemoPlcMetric): Promise { - const response = await postCloudIngest([metric]) + const response = await postCloudIngest(metric) if (!response.ok) { const text = await response.text() diff --git a/app/src/handlers/edge5-modbus-v2.ts b/app/src/handlers/edge5-modbus-v2.ts index 7c09ab5..8c8335e 100644 --- a/app/src/handlers/edge5-modbus-v2.ts +++ b/app/src/handlers/edge5-modbus-v2.ts @@ -22,14 +22,32 @@ function assertRegisterCount(values: number[]): void { } async function postMetrics(metrics: MappedMetric[]): Promise { - const response = await postCloudIngest(metrics) + const errors: Error[] = [] - if (!response.ok) { - const text = await response.text() - throw new Error(text) + for (const metric of metrics) { + try { + const response = await postCloudIngest(metric) + + if (!response.ok) { + const text = await response.text() + throw new Error(text || `${response.status} ${response.statusText}`) + } + } catch (error) { + const message = error instanceof Error ? error.message : String(error) + errors.push(new Error(`${metric.tag}: ${message}`)) + console.error('edge5.modbus.v2.metric.failed', metric.tag, message) + } } - console.log('edge5.modbus.v2.posted', { count: metrics.length }) + console.log('edge5.modbus.v2.posted', { + total: metrics.length, + succeeded: metrics.length - errors.length, + failed: errors.length, + }) + + if (errors.length) { + throw new Error(`Failed to post ${errors.length}/${metrics.length} edge5 modbus v2 metrics`) + } } export const handleEdge5ModbusV2: TopicHandler = async (topic, payload) => { diff --git a/app/src/handlers/edge5-modbus.ts b/app/src/handlers/edge5-modbus.ts index 59cfefd..94abe24 100644 --- a/app/src/handlers/edge5-modbus.ts +++ b/app/src/handlers/edge5-modbus.ts @@ -35,11 +35,13 @@ function toMetrics(values: number[], timestamp: number): Edge5ModbusMetric[] { } async function postMetrics(metrics: Edge5ModbusMetric[]): Promise { - const response = await postCloudIngest(metrics) + for (const metric of metrics) { + const response = await postCloudIngest(metric) - if (!response.ok) { - const text = await response.text() - throw new Error(text) + if (!response.ok) { + const text = await response.text() + throw new Error(text) + } } console.log('edge5.modbus.posted', { count: metrics.length })