Explorar el Código

script/dnet: render slot msgs

lunar-mining hace 2 años
padre
commit
3be0e7a757
Se han modificado 3 ficheros con 60 adiciones y 16 borrados
  1. 3 5
      script/dnet/main.py
  2. 25 4
      script/dnet/model.py
  3. 32 7
      script/dnet/view.py

+ 3 - 5
script/dnet/main.py

@@ -92,13 +92,11 @@ class Dnetview:
 
                 # Update event info: TODO
                 if "params" in values:
-                    continue
-                    # TODO
-                    #self.model.handle_event(info)
+                    self.model.handle_event(info)
 
                 self.queue.task_done()
-            except self.queue.is_empty():
-                logging.debug("update_model(): QueueEmpty")
+            except OSError as e:
+                logging.debug("update_model(): error {}", e)
 
     def main(self):
         logging.basicConfig(filename='dnet.log', encoding='utf-8', level=logging.DEBUG)

+ 25 - 4
script/dnet/model.py

@@ -69,8 +69,26 @@ class Model:
 
     def handle_event(self, event):
         name = list(event.keys())[0]
-        params = list(event.values())[0]
-        
+        values = list(event.values())[0]
+
+        params = values.get("params")
+        event = params[0].get("event")
+        info = params[0].get("info")
+
+        if "chan" in info:
+            time = info.get("time")
+            cmd = info.get("cmd")
+            chan = info.get("chan")
+            addr = chan.get("addr")
+
+            self.info.update_msg(addr, (time, event, cmd))
+        else:
+            # TODO
+            #slot = info.get("slot")
+            logging.debug(info)
+            logging.debug(event)
+            #self.info.update_msgs(addr, (time, event, cmd))
+
     def __repr__(self):
         return f"{self.nodes}"
     
@@ -94,8 +112,11 @@ class Info:
     def update_seed(self, key, value):
         self.seed[key] = value
 
-    def update_msg(self, msg):
-        self.msgs = msg
+    def update_msg(self, key, value):
+        if key in self.msgs:
+            self.msgs[key] += [value]
+        else:
+            self.msgs[key] = [value]
 
     def __repr__(self):
         return (

+ 32 - 7
script/dnet/view.py

@@ -18,6 +18,7 @@
 import urwid
 import logging
 import asyncio
+import datetime
 
 from scroll import ScrollBar, Scrollable
 from model import Model
@@ -117,8 +118,8 @@ class View():
               ("line","dark cyan","black","standout"),
               ]
 
-    def __init__(self, data):
-        self.data = data
+    def __init__(self, model):
+        self.model = model
         info_text = urwid.Text("")
         self.pile = urwid.Pile([info_text])
         scroll = ScrollBar(Scrollable(self.pile))
@@ -139,7 +140,7 @@ class View():
                 name = item.get_name()
                 names.append(name)
 
-            for name, values in self.data.nodes.items():
+            for name, values in self.model.nodes.items():
                 if name in names:
                     continue
 
@@ -181,10 +182,34 @@ class View():
             match focus_w[0].get_widget():
                 case "NodeView":
                     self.pile.contents.append((
-                        urwid.Text(f"Node selected"), self.pile.options()))
+                        urwid.Text(f"Node selected"),
+                        self.pile.options()))
                 case "ConnectView":
                     self.pile.contents.append((
-                        urwid.Text("Connection selected"), self.pile.options()))
+                        urwid.Text("Connection selected"),
+                        self.pile.options()))
                 case "SlotView":
-                    self.pile.contents.append((
-                        urwid.Text("Slot selected"), self.pile.options()))
+                    name = focus_w[0].get_name()
+                    # Remove the prepend
+                    name = name[7:]
+                    if name in self.model.info.msgs.keys():
+                        values = (
+                                self.model.info.msgs.get(name)
+                                )
+                        for value in values:
+                            nanotime = (
+                            int(value[0])
+                            )
+                            time = (
+                                    datetime.datetime.fromtimestamp(
+                                    nanotime/1000000000).strftime(
+                                    '%Y-%m-%d %H:%M:%S.%f')
+                                    )
+                            event = value[1]
+                            msg = value[2]
+                        #logging.debug(values)
+                            self.pile.contents.append((
+                                urwid.Text(
+                                    f"{time}: {event}: {msg}"),
+                                self.pile.options()))
+