bugfixing in parsers
[logparse.git] / logparse / parsers / temperature.py
index 2680a442bb6dd90ffb1de1e60c7d59ee3955e5f8..dfebb9ca76c3efdec7f6a8bd44b3e5d4857346bb 100644 (file)
@@ -63,51 +63,56 @@ class HddtempClient:
     def get_drives(self) -> List[Drive]:    # Obtain data from telnet server
         try:
             with Telnet(self.host, self.port, timeout=self.timeout) as tn:
-                data = tn.read_all()
-            return self._parse(data.decode('ascii'))    # Return parsed data
+                raw_data = tn.read_all()
+            return self._parse(raw_data.decode('ascii'))    # Return parsed data
         except Exception as e:
             logger.warning("Couldn't read data from {0}:{1} - {2}".format(self.host, self.port, str(e)))
             return 1
 
 
 def parse_log():
+
     logger.debug("Starting temp section")
     section = Section("temperatures")
 
-    # cpu temp
-
     sensors.init()
+
     coretemps = []
     pkgtemp = 0
     systemp = 0
+
+    systemp_data = Data("Sys")
+    coretemp_data = Data("Cores")
+    pkgtemp_data = Data("Processor")
+
     try:
+
         for chip in sensors.iter_detected_chips():
             for feature in chip:
                 if "Core" in feature.label:
-                    coretemps.append([feature.label, feature.get_value()])
-                    logger.debug("found core " + feature.label + " at temp " + str(feature.get_value()))
+                    coretemp_data.items.append([feature.label, feature.get_value()])
+                    logger.debug("Found core " + feature.label + " at temp " + str(feature.get_value()))
                 if "CPUTIN" in feature.label:
-                    pkgtemp = str(feature.get_value())
-                    logger.debug("found cpu package at temperature " + pkgtemp)
+                    pkgtem_data.items.append([feature.label, str(feature.get_value())])
+                    logger.debug("Found CPU package at temp" + str(feature.get_value()))
                 if "SYS" in feature.label:
-                    systemp = feature.get_value()
-                    logger.debug("found sys input " + feature.label + " at temp " + str(feature.get_value()))
-        logger.debug("Core temp data is: " + str(coretemps))
-#        core_avg = reduce(lambda x, y: x[1] + y[1], coretemps) / len(coretemps)
-        core_avg = sum(core[1] for core in coretemps) / len(coretemps)
-        logger.debug("average cpu temp is " + str(core_avg))
-        coretemps.append(["avg", str(core_avg)])
-        coretemps.append(["pkg", pkgtemp])
-        coretemps = [x[0] + ": " + str(x[1]) + DEG + CEL for x in coretemps]
+                    systemp_data.items.append([feature.label, str(feature.get_value())])
+                    logger.debug("Found sys input " + feature.label + " at temp " + str(feature.get_value()))
+
+        for temp_data in [systemp_data, coretemp_data, pkgtemp_data]:
+            if len(temp_data.items) > 1:
+                avg = sum(feature[1] for feature  in temp_data.items) / len(temp_data.items)
+                logger.debug("Avg temp for {0} is {1} {2}{3}".format(temp_data.subtitle, str(avg), DEG, CEL))
+                temp_data.subtitle += " (avg {0}{1}{2}):".format(str(avg), DEG, CEL)
+                temp_data.items = ["{0}: {1}{2}{3}".format(feature[0], feature[1], DEG, CEL) for feature in temp_data]
+            else:
+                temp_data.items = temp_data[0][1] + DEG + CEL
+            section.append_data(temp_data)
+
     finally:
+        logger.info("Finished reading onboard temperatures")
         sensors.cleanup()
 
-    if (systemp != 0):
-        output += writedata("sys: " + str(systemp) + DEG)
-    if (coretemps != ''):
-        output += writedata("cores", coretemps)
-    
-    logger.info("Finished reading onboard temperatures")
 
     # drive temp
 
@@ -117,29 +122,26 @@ def parse_log():
     received = ''
     sumtemp = 0.0 
     data = ""
-    fields = []
+    hddtemp_data = Data("Disks")
     
     client = HddtempClient(host=config.prefs['hddtemp']['host'], port=int(config.prefs['hddtemp']['port']), sep=config.prefs['hddtemp']['separator'], timeout=int(config.prefs['hddtemp']['timeout']))
     drives = client.get_drives()
     logger.debug("Received drive info: " + str(drives))
+
     for drive in sorted(drives, key=lambda x: x.path):
         if drive.path in config.prefs['hddtemp']['drives']:
             sumtemp += drive.temperature
-            fields.append(("{0} ({1})".format(drive.path, drive.model) if config.prefs['hddtemp']['show-model'] else drive.path) + ": {0}{1}{2}".format(drive.temperature, DEG, drive.units))
+            hddtemp_data.items.append(("{0} ({1})".format(drive.path, drive.model) if config.prefs['hddtemp']['show-model'] else drive.path) + ": {0}{1}{2}".format(drive.temperature, DEG, drive.units))
         else:
             drives.remove(drive)
-            logger.debug("Ignoring drive {0} ({1})due to config".format(drive.path, drive.model))
+            logger.debug("Ignoring drive {0} ({1}) due to config".format(drive.path, drive.model))
     logger.debug("Sorted drive info: " + str(drives))
 
     hddavg = '{0:.1f}{1}{2}'.format(sumtemp/len(drives), DEG, drives[0].units) # use units of first drive
     logger.debug("Sum of temperatures: {}; Number of drives: {}; => Avg disk temp is {}".format(str(sumtemp), str(len(drives)), hddavg)) 
-    fields.append("avg: " + str(hddavg))
+    hddtemp_data.subtitle += " (avg {0}{1}{2})".format(str(hddavg), DEG, CEL)
 
-    if (config.prefs['hddtemp']['drives'] != ''):
-        output += writedata("disks", fields)
     logger.info("Finished processing drive temperatures")
 
-
-    output += closetag('div', 1)
     logger.info("Finished temp section")
-    return output
+    return section