Я пытаюсь использовать ядро Esper CEP и пытаюсь добиться следующего.
- Генерация тревоги при превышении определенного значения
- Вызов внешнего API для публикации данных тревоги
- Изменение статуса тревоги на ACKNOWLEDGED
- Создание события для того же журнала
Я использую следующий код:
insert into CreateAlarm
select
e.measurement.time as time,
e.measurement.source.value as source,
"com_cumulocity_LuxometerAlert" as type,
"Lux value below optimum level" as text,
"ACTIVE" as status,
"MAJOR" as severity
from MeasurementCreated e
where getNumber(e, "c8y_Luxometer.lux.value") >= 0 and
getNumber(e, "c8y_Luxometer.lux.value") <= 4.0 and
e.measurement.source.value='<device id>';
insert into SendRequest
select
'post' as method,
'<rest endpoint>' as url,
aMap({"alarmID",e.alarm.id.value,"source",toJSON(findManagedObjectById(e.alarm.source.value))}) as headers,'application/json' as contentType,
toJSON(e) as body
from pattern [every e = AlarmUpdated(
alarm.status = CumulocityAlarmStatuses.ACTIVE,
alarm.severity=CumulocitySeverities.MAJOR,
alarm.type='com_cumulocity_LuxometerAlert')];
insert into UpdateAlarm
select
f.alarm.id as id,
"ACKNOWLEDGED" as status
from pattern [every f = AlarmUpdated(
alarm.status = CumulocityAlarmStatuses.ACTIVE,
alarm.severity=CumulocitySeverities.MAJOR,
alarm.type='com_cumulocity_LuxometerAlert')];
insert into CreateEvent
select
"c8y_DemoOrderCreate" as type,
"Order Create Request To Vlocity" as text,
g.alarm.time as time,
g.alarm.source as source
from pattern [every g = AlarmUpdated(
alarm.status=CumulocityAlarmStatuses.ACKNOWLEDGED,
alarm.severity=CumulocitySeverities.MAJOR,
alarm.type='com_cumulocity_LuxometerAlert')];
Теперь проблема в том, что когда мое измерение попадает в пределы требуемого значения, оно создает сигналы тревоги и события. Но я вижу меньше вызовов API. В идеале количество сигналов тревоги и http-вызова должно быть одинаковым. Но это не то же самое.
Мой запрос заключается в том, обрабатывает ли механизм CEP запросы http для потока «SendRequest» и затем вызывает API.