From a1ce53bf030a18947c2c25f6d6b0fec39a0996df Mon Sep 17 00:00:00 2001 From: Zaid Abdulla Date: Wed, 20 Jul 2016 08:47:37 +0300 Subject: [PATCH] Implement preset triggers on device events --- lib/cache.coffee | 4 +++- lib/cwmp.coffee | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/cache.coffee b/lib/cache.coffee index e40634d..de0346c 100644 --- a/lib/cache.coffee +++ b/lib/cache.coffee @@ -119,6 +119,8 @@ refresh = (callback) -> # TODO show a warning schedule.schedule = false + events = preset.events ? {} + precondition = JSON.parse(preset.precondition) _provisions = preset.provisions or [] @@ -139,7 +141,7 @@ refresh = (callback) -> else throw new Error("Unknown configuration type #{c.type}") - presets.push({name: preset._id, schedule: schedule, precondition: precondition, provisions: _provisions}) + presets.push({name: preset._id, schedule: schedule, events: events, precondition: precondition, provisions: _provisions}) if -- counter == 0 computeHash() diff --git a/lib/cwmp.coffee b/lib/cwmp.coffee index ea94066..2091c00 100644 --- a/lib/cwmp.coffee +++ b/lib/cwmp.coffee @@ -133,11 +133,23 @@ applyPresets = (currentRequest) -> currentRequest.sessionData.presetsHash = presetsHash + deviceEvents = {} + iter = currentRequest.sessionData.deviceData.paths.subset(['Events', '*']) + while (p = iter.next().value) + if currentRequest.sessionData.timestamp == currentRequest.sessionData.deviceData.values.value.get(p)?[0] + deviceEvents[p[1]] = true + parameters = {} filteredPresets = [] for p in presets - continue if p.schedule and not - (p.schedule.schedule and testSchedule(p.schedule, currentRequest.sessionData.timestamp)[0]) + eventsMatch = true + for k, v of p.events + if !v != !deviceEvents[k.replace(' ', '_')] + eventsMatch = false + break + + continue if not eventsMatch or (p.schedule and not + (p.schedule.schedule and testSchedule(p.schedule, currentRequest.sessionData.timestamp)[0])) filteredPresets.push(p) for a in Object.keys(query.queryProjection(p.precondition))