Add dates to Counter.
authorBenjamin Braatz <benjamin.braatz@graph-it.com>
Wed, 27 Oct 2021 09:15:48 +0000 (11:15 +0200)
committerBenjamin Braatz <benjamin.braatz@graph-it.com>
Wed, 27 Oct 2021 09:15:48 +0000 (11:15 +0200)
controlpi_plugins/util.py

index d8b63a804cf7f4fdadf443fe4524104ae3a07d8d..c9ad0b996c876cb2bfa0f77433fed5fa4490217a 100644 (file)
@@ -38,7 +38,7 @@ Test Log: {'sender': 'Test Alias', 'id': 'translated',
            'content': 'Test Message'}
 """
 import asyncio
-import datetime
+from datetime import datetime
 
 from controlpi import BasePlugin, Message, MessageTemplate
 
@@ -439,31 +439,39 @@ class Counter(BasePlugin):
                            'command': {'const': 'reset'}}]}
     test(): {'sender': 'test()', 'target': 'Test Counter',
              'command': 'get count'}
-    test(): {'sender': 'Test Counter', 'count': 0}
+    test(): {'sender': 'Test Counter', 'count': 0,
+             'since': ..., 'until': ...}
     test(): {'sender': 'test()', 'id': 42}
     test(): {'sender': 'test()', 'id': 42}
     test(): {'sender': 'test()', 'id': 49}
     test(): {'sender': 'test()', 'target': 'Test Counter',
              'command': 'get count'}
-    test(): {'sender': 'Test Counter', 'count': 2}
+    test(): {'sender': 'Test Counter', 'count': 2,
+             'since': ..., 'until': ...}
     test(): {'sender': 'test()', 'id': 42}
     test(): {'sender': 'test()', 'id': 42}
     test(): {'sender': 'test()', 'id': 42}
     test(): {'sender': 'test()', 'target': 'Test Counter',
              'command': 'reset'}
-    test(): {'sender': 'Test Counter', 'count': 5}
+    test(): {'sender': 'Test Counter', 'count': 5,
+             'since': ..., 'until': ...}
     test(): {'sender': 'test()', 'target': 'Test Counter',
              'command': 'get count'}
-    test(): {'sender': 'Test Counter', 'count': 0}
+    test(): {'sender': 'Test Counter', 'count': 0,
+             'since': ..., 'until': ...}
     test(): {'sender': 'test()', 'id': 42}
     test(): {'sender': 'test()', 'id': 42}
     test(): {'sender': 'test()', 'id': 42}
     test(): {'sender': 'test()', 'target': 'Test Counter',
              'command': 'get count'}
-    test(): {'sender': 'Test Counter', 'count': 3}
+    test(): {'sender': 'Test Counter', 'count': 3,
+             'since': ..., 'until': ...}
     """
 
-    CONF_SCHEMA = {'properties': {'count': {'type': 'object'}},
+    CONF_SCHEMA = {'properties': {'count': {'type': 'object'},
+                                  'date format':
+                                  {'type': 'string',
+                                   'default': '%Y-%m-%d %H:%M:%S'}},
                    'required': ['count']}
     """Schema for Counter plugin configuration.
 
@@ -474,6 +482,7 @@ class Counter(BasePlugin):
 
     def process_conf(self) -> None:
         """Register plugin as bus client."""
+        self._since = datetime.now().strftime(self.conf['date format'])
         self._count = 0
         self._template = MessageTemplate(self.conf['count'])
         sends = [MessageTemplate({'count': {'type': 'integer'}})]
@@ -485,17 +494,24 @@ class Counter(BasePlugin):
         self.bus.register(self.name, 'Counter', sends, receives, self.receive)
 
     async def receive(self, message: Message) -> None:
-        """Send current date and time as message."""
+        """Count messages, send and optionally reset counts."""
         if self._template.check(message):
             self._count += 1
         if ('target' in message and message['target'] == self.name and
                 'command' in message):
             if message['command'] == 'get count':
-                await self.bus.send(Message(self.name, {'count': self._count}))
+                now = datetime.now().strftime(self.conf['date format'])
+                await self.bus.send(Message(self.name, {'count': self._count,
+                                                        'since': self._since,
+                                                        'until': now}))
             elif message['command'] == 'reset':
+                now = datetime.now().strftime(self.conf['date format'])
                 count = self._count
                 self._count = 0
-                await self.bus.send(Message(self.name, {'count': count}))
+                await self.bus.send(Message(self.name, {'count': count,
+                                                        'since': self._since,
+                                                        'until': now}))
+                self._since = now
 
     async def run(self) -> None:
         """Run no code proactively."""
@@ -558,7 +574,7 @@ class Date(BasePlugin):
 
     async def date(self, message: Message) -> None:
         """Send current date and time as message."""
-        date = datetime.datetime.now().strftime(self.conf['format'])
+        date = datetime.now().strftime(self.conf['format'])
         await self.bus.send(Message(self.name, {'date': date}))
 
     async def run(self) -> None: