Mercurial > code > home > repos > light9
changeset 1372:f427801da9f6
collector properly merges repeated attr settings in the same message
Ignore-this: a03dcc65eb0d9300cecf3153cd2a58d3
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Tue, 07 Jun 2016 10:51:23 +0000 |
parents | 6c2d78dabb8b |
children | ba6fd5eaa0cf |
files | bin/collector light9/collector/collector.py light9/collector/collector_test.py |
diffstat | 3 files changed, 34 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/bin/collector Tue Jun 07 10:50:35 2016 +0000 +++ b/bin/collector Tue Jun 07 10:51:23 2016 +0000 @@ -7,6 +7,7 @@ import json import logging import klein +import optparse from greplin import scales from greplin.scales.twistedweb import StatsResource @@ -75,8 +76,11 @@ def main(): - log.setLevel(logging.DEBUG) - + parser = optparse.OptionParser() + parser.add_option("-v", "--verbose", action="store_true", + help="logging.DEBUG") + (options, args) = parser.parse_args() + log.setLevel(logging.DEBUG if options.verbose else logging.INFO) graph = SyncedGraph(networking.rdfdb.url, "collector")
--- a/light9/collector/collector.py Tue Jun 07 10:50:35 2016 +0000 +++ b/light9/collector/collector.py Tue Jun 07 10:51:23 2016 +0000 @@ -61,6 +61,15 @@ for c in staleClients: del self.lastRequest[c] + def resolvedSettingsDict(self, settingsList): + out = {} + for d, a, v in settingsList: + if (d, a) in out: + out[(d, a)] = resolve(d, a, [out[(d, a)], v]) + else: + out[(d, a)] = v + return out + def setAttrs(self, client, clientSession, settings): """ settings is a list of (device, attr, value). These attrs are @@ -80,14 +89,13 @@ prevClientSettings = {} else: prevClientSettings = {} - for d, a, v in settings: - prevClientSettings[(d, a)] = v + prevClientSettings.update(self.resolvedSettingsDict(settings)) self.lastRequest[client] = (clientSession, now, prevClientSettings) deviceAttrs = {} # device: {attr: value} - for _, _, settings in self.lastRequest.itervalues(): - for (device, attr), value in settings.iteritems(): + for _, _, lastSettings in self.lastRequest.itervalues(): + for (device, attr), value in lastSettings.iteritems(): attrs = deviceAttrs.setdefault(device, {}) if attr in attrs: value = resolve(device, attr, [attrs[attr], value])
--- a/light9/collector/collector_test.py Tue Jun 07 10:50:35 2016 +0000 +++ b/light9/collector/collector_test.py Tue Jun 07 10:51:23 2016 +0000 @@ -195,3 +195,19 @@ self.assertEqual([[0, 255, 0, 215], 'flush'], self.udmx.updates) self.assertEqual([[127], 'flush', [255], 'flush', [255], 'flush'], self.dmx0.updates) + + def testRepeatedAttributesInOneRequestGetResolved(self): + c = Collector(self.config, outputs=[self.dmx0, self.udmx]) + + c.setAttrs('client1', 'sess1', [ + (DEV['inst1'], L9['brightness'], .5), + (DEV['inst1'], L9['brightness'], .3), + ]) + self.assertEqual([[127], 'flush'], self.dmx0.updates) + + c.setAttrs('client1', 'sess1', [ + (DEV['inst1'], L9['brightness'], .3), + (DEV['inst1'], L9['brightness'], .5), + ]) + self.assertEqual([[127], 'flush', [127], 'flush'], self.dmx0.updates) +