Implemented alert field AND/OR logic.
This commit is contained in:
parent
00a52c5f83
commit
0f05abcd27
|
@ -16,6 +16,16 @@ exports.up = async (knex) => {
|
||||||
.notNullable()
|
.notNullable()
|
||||||
.defaultTo(true);
|
.defaultTo(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await knex.raw(`
|
||||||
|
UPDATE alerts
|
||||||
|
SET
|
||||||
|
all_actors = false,
|
||||||
|
all_entities = false,
|
||||||
|
all_tags = false,
|
||||||
|
all_matches= false
|
||||||
|
WHERE alerts.all = false;
|
||||||
|
`);
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.down = async (knex) => {
|
exports.down = async (knex) => {
|
||||||
|
|
|
@ -129,6 +129,10 @@ async function notify(scenes) {
|
||||||
notify: alert.notify,
|
notify: alert.notify,
|
||||||
email: alert.email,
|
email: alert.email,
|
||||||
all: alert.all,
|
all: alert.all,
|
||||||
|
allActors: alert.all_actors,
|
||||||
|
allEntities: alert.all_entities,
|
||||||
|
allTags: alert.all_tags,
|
||||||
|
allMatches: alert.all_matches,
|
||||||
actors: alertsActorsByAlertId[alert.id] || [],
|
actors: alertsActorsByAlertId[alert.id] || [],
|
||||||
tags: alertsTagsByAlertId[alert.id] || [],
|
tags: alertsTagsByAlertId[alert.id] || [],
|
||||||
entities: alertsEntitiesByAlertId[alert.id] || [],
|
entities: alertsEntitiesByAlertId[alert.id] || [],
|
||||||
|
@ -149,11 +153,11 @@ async function notify(scenes) {
|
||||||
const triggers = alerts.flatMap((alert) => {
|
const triggers = alerts.flatMap((alert) => {
|
||||||
const alertScenes = curatedScenes.filter((scene) => {
|
const alertScenes = curatedScenes.filter((scene) => {
|
||||||
if (alert.all) {
|
if (alert.all) {
|
||||||
if (alert.actors.length > 0 && !alert.actors.every((actorId) => scene.actorIds.includes(actorId))) {
|
if (alert.actors.length > 0 && !alert.actors[alert.allActors ? 'every' : 'some']((actorId) => scene.actorIds.includes(actorId))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alert.tags.length > 0 && !alert.tags.every((tagId) => scene.tagIds.includes(tagId))) {
|
if (alert.tags.length > 0 && !alert.tags[alert.allTags ? 'every' : 'some']((tagId) => scene.tagIds.includes(tagId))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,27 +166,27 @@ async function notify(scenes) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alert.matches.length > 0 && !alert.matches.every((match) => match.expression.test(scene[match.property]))) {
|
if (alert.matches.length > 0 && !alert.matches[alert.allMatches ? 'every' : 'some']((match) => match.expression.test(scene[match.property]))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alert.actors.some((actorId) => scene.actorIds.includes(actorId))) {
|
if (alert.matches.length > 0 && alert.actors[alert.allActors ? 'every' : 'some']((actorId) => scene.actorIds.includes(actorId))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alert.tags.some((tagId) => scene.tagIds.includes(tagId))) {
|
if (alert.tags.length > 0 && alert.tags[alert.allTags ? 'every' : 'some']((tagId) => scene.tagIds.includes(tagId))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// multiple entities can only be matched in OR mode
|
// multiple entities can only be matched in OR mode
|
||||||
if (alert.entities.some((alertEntityId) => alertEntityId === scene.entityId || alertEntityId === scene.parentEntityId)) {
|
if (alert.entities.length > 0 && alert.entities.some((alertEntityId) => alertEntityId === scene.entityId || alertEntityId === scene.parentEntityId)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alert.matches.some((match) => match.expression.test(scene[match.property]))) {
|
if (alert.matches.length > 0 && alert.matches[alert.allMatches ? 'every' : 'some']((match) => match.expression.test(scene[match.property]))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue