add mapper. add v2 handler. add tag description short and full versions. delete topic[1-5]. #5

Merged
APervov merged 5 commits from edge5modbus into main 2026-06-19 06:15:29 +00:00
2 changed files with 7 additions and 10 deletions
Showing only changes of commit f8a9866339 - Show all commits

View File

@@ -7,6 +7,7 @@ RUN npm ci
COPY tsconfig.json ./
COPY public ./public
# Runtime mappers read JSON files from src/mappings, so they must be copied into the image.
COPY src ./src
CMD ["npm", "run", "dev"]

View File

@@ -7,11 +7,9 @@ export type MappedMetric = {
value: number
}
type MappingTagEntry = string | { tag: string } | { key: string }
type MappingConfig = {
edge: string
tags: MappingTagEntry[]
tags: string[]
}
export type MetricMapper = {
@@ -21,8 +19,9 @@ export type MetricMapper = {
}
type MetricMapperOptions = {
// filePath is set as a URL from import.meta.url for bundled mappings,
// or as a path string resolved by Node from the process working directory.
// filePath contract:
// - built-in mappings are passed as URL via new URL('../mappings/*.json', import.meta.url);
// - env overrides are expected as absolute paths inside the runtime container.
filePath: string | URL
}
@@ -32,18 +31,15 @@ function readMappingConfig(filePath: string | URL): MappingConfig {
export function createMetricMapper(options: MetricMapperOptions): MetricMapper {
const config = readMappingConfig(options.filePath)
const tags = config.tags.map((entry) =>
typeof entry === 'string' ? entry : 'tag' in entry ? entry.tag : entry.key,
)
return {
edge: config.edge,
tagCount: tags.length,
tagCount: config.tags.length,
mapValues: (values, timestamp) =>
values.map((value, index) => ({
edge: config.edge,
timestamp,
NBizyaev marked this conversation as resolved
Review

Обработка ошибок хандлера должна быть не в самом хандлере, а выше - на уровне роутинга входящих пакетов из топиков на хандлеры (app\src\router.ts), а все проблемы/ошибки/несоответствия ожиданиям/ваыпадения из позитивного сценария -- должны бросать исключение
в том числе некорректные данные,
в том числе отсутствие каких-либо файлов,
в том числе вообще все ошибки, которые не будут покрыты отдельным специальным if.
В этом смысле чем меньше отдельных специальных if - тем лучше, потому что проблемы всё равно обработаются и выловятся уровнем выше, но кода при этом будет меньше.

Обработка ошибок хандлера должна быть не в самом хандлере, а выше - на уровне роутинга входящих пакетов из топиков на хандлеры (app\src\router.ts), а все проблемы/ошибки/несоответствия ожиданиям/ваыпадения из позитивного сценария -- должны бросать исключение в том числе некорректные данные, в том числе отсутствие каких-либо файлов, в том числе вообще все ошибки, которые не будут покрыты отдельным специальным if. В этом смысле чем меньше отдельных специальных if - тем лучше, потому что проблемы всё равно обработаются и выловятся уровнем выше, но кода при этом будет меньше.
tag: tags[index],
tag: config.tags[index],
value,
})),
}