add mapper. add v2 handler. add tag description short and full versions. delete topic[1-5]. #5
@@ -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"]
|
||||
|
||||
@@ -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
|
||||
tag: tags[index],
|
||||
tag: config.tags[index],
|
||||
|
NBizyaev marked this conversation as resolved
Outdated
NBizyaev
commented
Если ты используешь чтение внешнего файла, то этот файл должен существовать Если ты используешь чтение внешнего файла, то этот файл должен существовать
в контейнере, в котором этот код будет задеплоен,
это значит, что копирование этих файлов должно появиться в Dockerfile
или (если они туда уже копируются) хотя бы комментарий в Dockerfile о том, что там что-то такое есть, что программа будет искать, считывать и потом использовать.
|
||||
value,
|
||||
})),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user
Обработка ошибок хандлера должна быть не в самом хандлере, а выше - на уровне роутинга входящих пакетов из топиков на хандлеры (app\src\router.ts), а все проблемы/ошибки/несоответствия ожиданиям/ваыпадения из позитивного сценария -- должны бросать исключение
в том числе некорректные данные,
в том числе отсутствие каких-либо файлов,
в том числе вообще все ошибки, которые не будут покрыты отдельным специальным if.
В этом смысле чем меньше отдельных специальных if - тем лучше, потому что проблемы всё равно обработаются и выловятся уровнем выше, но кода при этом будет меньше.