Hmm, I can't help wondering what has changed. There were only insignificant 
changes to accum.py between 3.8.2 and 3.9.1. Likewise no significant 
changes to cmon from 0.15 to 0.16. 64bit systems have been around for a 
while so I am wondering why this only seems to be rearing it's head now. 
I've seen the long v int issue once before but don't believe it was in the 
context of cmon network traffic.

Makes no difference to the solution but just wondering.

Gary

On Friday, 15 February 2019 02:41:19 UTC+10, Luc Heijst wrote:
>
> cmon v0.16 crashes in weewx version 3.9.1
>
> See crashlog:
> Feb 14 11:10:15 pi21 vpro[28175]: manager: Added record 2019-02-14 
> 11:10:15 -03 (1550153415) to database 'cmon21'
> Feb 14 11:10:15 pi21 vpro[28175]: engine: Main loop exiting. Shutting 
> engine down.
> Feb 14 11:10:15 pi21 vpro[28175]: engine: Shutting down StdReport thread
> Feb 14 11:10:15 pi21 vpro[28175]: engine: StdReport thread has been 
> terminated
> Feb 14 11:10:15 pi21 vpro[28175]: engine: Caught unrecoverable exception 
> in engine:
> Feb 14 11:10:15 pi21 vpro[28175]:     ****  accum: ScalarStats.addHiLo 
> expected float or int, got 3809297
> Feb 14 11:10:15 pi21 vpro[28175]:     ****  Traceback (most recent call 
> last):
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/weewx/engine.py", line 890, in main
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      engine.run()
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/weewx/engine.py", line 202, in run
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      
> self.dispatchEvent(weewx.Event(weewx.POST_LOOP))
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/weewx/engine.py", line 224, in dispatchEvent
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      callback(event)
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/weewx/engine.py", line 580, in post_loop
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      
> self._catchup(self.engine.console.genArchiveRecords)
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/weewx/engine.py", line 635, in _catchup
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      origin='hardware'))
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/weewx/engine.py", line 224, in dispatchEvent
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      callback(event)
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/user/cmon.py", line 714, in new_archive_record
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      
> self.save_data(self.get_data(now, self.last_ts))
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/user/cmon.py", line 721, in save_data
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      self.dbm.addRecord(record)
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/weewx/manager.py", line 246, in addRecord
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      
> self._addSingleRecord(record, cursor, log_level)
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/weewx/manager.py", line 1216, in _addSingleRecord
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      
> _day_summary.addRecord(record, weight=_weight)
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/weewx/accum.py", line 256, in addRecord
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      func(self, record, 
> obs_type, add_hilo, weight)
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/weewx/accum.py", line 314, in add_value
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      
> self[obs_type].addHiLo(val, record['dateTime'])
> Feb 14 11:10:15 pi21 vpro[28175]:     ****    File 
> "/home/weewx/bin/weewx/accum.py", line 77, in addHiLo
> Feb 14 11:10:15 pi21 vpro[28175]:     ****      raise ValueError("accum: 
> ScalarStats.addHiLo expected float or int, got %s" % val)
> Feb 14 11:10:15 pi21 vpro[28175]:     ****  ValueError: accum: 
> ScalarStats.addHiLo expected float or int, got 3809297
> Feb 14 11:10:15 pi21 vpro[28175]:     ****  Exiting.
>
> The problem is caused by the net_eth0_tbytes calculation in cmon.py, see 
> below. 
>        # get network usage
>         fn = '/proc/net/dev'
>         try:
>             netinfo = self._readproc_dict(fn)
>             if netinfo:
>                 for iface in netinfo:
>                     values = netinfo[iface].split()
>                     for i, k in enumerate(self._NET_KEYS):
>                         if iface not in self.last_net:
>                             self.last_net[iface] = {}
>                         if k in self.last_net[iface]:
>                             x = int(values[i]) - self.last_net[iface][k]
>                             if x < 0:
>                                 maxcnt = 0x100000000 # 32-bit counter
>                                 if x + maxcnt < 0:
>                                     maxcnt = 0x10000000000000000 # 64-bit 
> counter
>                                 x += maxcnt
>                             record['net_' + iface + '_' + k] = *x*
>                         self.last_net[iface][k] = int(values[i])
>         except Exception, e:
>             logdbg("read failed for %s: %s" % (fn, e))
>
> The value of net_eth0_tbytes is a long integer ('net_eth0_tbytes': 
> *108233L*,) and accum.py (of version 3.9.1) expects a float or an 
> integer, but NOT a long.
>
> To solve this, the cmon value must be converted to an integer in line 463 
> of cmon.py
>                             record['net_' + iface + '_' + k] = *int(x)*
>
> Luc
>

-- 
You received this message because you are subscribed to the Google Groups 
"weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to weewx-user+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to