Kapacitor/InfluxDB: Как считать теги / узлы?
Я пытаюсь настроить kapacitor и influenxdb для обработки некоторых конкретных случаев использования приложения.
У меня есть только одно основное измерение:
Measurement Healthz:
fields: status(int), msg(string)
tags: player_id
Поле статуса представляет некоторый статус, о котором игрок может сообщить системе: 0 - здоров, 1 - нездоров. Каждый уникальный игрок будет пытаться сообщать о своем статусе хотя бы раз в минуту.
Политика сохранения по умолчанию длится 31 день, и я не могу построить два открытых списка из этой временной серии; желательно в сценарии TICK:
Список 1: показывает количество уникальных идентификаторов игроков, которые сообщали о каком-либо статусе до этого момента времени. Пример:
[
{ time: 2018-10-01T12:00:00.000Z, count: 2382 },
{ time: 2018-10-01T13:00:00.000Z, count: 2422 },
.
.
.
{ time: 2018-10-31T14:00:00.000Z, count: 7535 }
]
Список 2: Содержит все уникальные идентификаторы player_id и их самый высокий зарегистрированный статус за последний час. ИЛИ если такой статус не существует, используйте последний сообщенный статус для этого player_id.
Я уже два дня пытаюсь, но безрезультатно. Мне удалось решить первый список с помощью следующего кода (NodeJS):
await influx.createRetentionPolicy('1h', { duration: '1h', replication: 1, isDefault: true });
await influx.createRetentionPolicy('31d', { duration: '31d', replication: 1, isDefault: false });
await influx.createContinuousQuery('cq_1m_healthz', `
select max(status) as status, msg
into "31d"."healthz"
from healthz
group by player_id, time(1h)
`);
await influx.createContinuousQuery('cq_1m_registered', `
select count(status)
into "31d"."registered"
from (
select last(status) as status
from "31d"."registered"
group by player_id
)
group by time(1h)
`);
Тем не менее, я хотел бы сделать это в kapacitor, если это возможно, и второй я не знаю, с чего начать. Я хотел бы избежать этого с помощью обычного кода NodeJS; ex вызывает несколько запросов и объединяет результаты сам.
Есть идеи, как это сделать?
Спасибо!