diff --git a/app/Dockerfile b/app/Dockerfile index 8ce42eb..c020a4e 100644 --- a/app/Dockerfile +++ b/app/Dockerfile @@ -10,9 +10,7 @@ COPY src ./src RUN npm run build && npm prune --omit=dev -# app/public/index.html has content for video preview -# TODO move all static files (html, mappers) to a separate folder "assets" -COPY public ./public +COPY assets ./assets ENV NODE_ENV=production CMD ["node", "dist/index.js"] diff --git a/app/src/mappings/edge5-modbus.json b/app/assets/edge5-modbus.json similarity index 100% rename from app/src/mappings/edge5-modbus.json rename to app/assets/edge5-modbus.json diff --git a/app/src/mappings/edge5-modbus_rus.json b/app/assets/edge5-modbus_rus.json similarity index 100% rename from app/src/mappings/edge5-modbus_rus.json rename to app/assets/edge5-modbus_rus.json diff --git a/app/src/mappings/edge5-modbus_unit.json b/app/assets/edge5-modbus_unit.json similarity index 100% rename from app/src/mappings/edge5-modbus_unit.json rename to app/assets/edge5-modbus_unit.json diff --git a/app/public/index.html b/app/assets/index.html similarity index 100% rename from app/public/index.html rename to app/assets/index.html diff --git a/app/src/handlers/edge5-modbus-v2.ts b/app/src/handlers/edge5-modbus-v2.ts index 33172d1..6d95f69 100644 --- a/app/src/handlers/edge5-modbus-v2.ts +++ b/app/src/handlers/edge5-modbus-v2.ts @@ -1,3 +1,6 @@ +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' + import { postCloudIngest } from '../cloud-ingest.js' import { log } from '../helpers/log.js' import { createMetricMapper, type MappedMetric } from '../mapping.js' @@ -5,8 +8,13 @@ import type { TopicHandler } from '../types.js' const REGISTER_COUNT = 125 +const defaultMappingFile = join( + dirname(fileURLToPath(import.meta.url)), + '../../assets/edge5-modbus.json', +) + const mapper = createMetricMapper({ - filePath: process.env.EDGE5_MODBUS_V2_MAPPING_FILE as string, + filePath: process.env.EDGE5_MODBUS_V2_MAPPING_FILE ?? defaultMappingFile, }) function parseValues(payload: Buffer): number[] { diff --git a/app/src/http/server.ts b/app/src/http/server.ts index 2c556ac..295ff67 100644 --- a/app/src/http/server.ts +++ b/app/src/http/server.ts @@ -6,8 +6,8 @@ import { fileURLToPath } from 'node:url' import { log } from '../helpers/log.js' const httpPort = Number(process.env.HTTP_PORT) -const publicDir = join(dirname(fileURLToPath(import.meta.url)), '../../public') -const indexPath = join(publicDir, 'index.html') +const assetsDir = join(dirname(fileURLToPath(import.meta.url)), '../../assets') +const indexPath = join(assetsDir, 'index.html') createServer(async (req, res) => { const path = req.url?.split('?')[0] diff --git a/app/src/mapping.ts b/app/src/mapping.ts index ad41c87..92fec43 100644 --- a/app/src/mapping.ts +++ b/app/src/mapping.ts @@ -19,7 +19,7 @@ export type MetricMapper = { type MetricMapperOptions = { // filePath contract: - // - built-in mappings are passed as URL via new URL('../mappings/*.json', import.meta.url); + // - built-in mappings live in app/assets/*.json (resolved relative to dist/ at runtime); // - env overrides are expected as absolute paths inside the runtime container. filePath: string | URL } diff --git a/docker-compose.yml b/docker-compose.yml index f2a8b3c..29929b0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,7 +24,7 @@ services: CLOUD_INGEST_URL: ${CLOUD_INGEST_URL} CLOUD_INGEST_API_KEY: ${CLOUD_INGEST_API_KEY} DEMO_CLOUD_INGEST_URL: ${DEMO_CLOUD_INGEST_URL} - EDGE5_MODBUS_V2_MAPPING_FILE: ${EDGE5_MODBUS_V2_MAPPING_FILE:-/app/src/mappings/edge5-modbus.json} + EDGE5_MODBUS_V2_MAPPING_FILE: ${EDGE5_MODBUS_V2_MAPPING_FILE:-/app/assets/edge5-modbus.json} networks: - default - proxy