def run(self): """Run the report.""" report_start = time.time() columns = self._definition.get('columns', []) items = self._definition.get('items', []) with self.csv_scope() as csv_scope: # Iterate over items in definition. for item in items: m = Meter(self._client, item['meter_name'], max_samples=self.max_samples) # Meter.read() returns a generator that yields readings. # One reading per resource/meter pair for reading in m.read(start=self._start, stop=self._stop): reading.convert(item.get('conversion')) line_item = { c.get('name'): self._encode( self._field_function(c.get('func'), item, reading)) for c in columns } csv_scope.writerow(line_item) elapsed = time.time() - report_start logger.info('Report is at {}'.format(self.output.location)) logger.debug('Finished report in {} seconds'.format(elapsed))
class MeterDaemon(Daemon): def __init__(self, pid): self.logger = logging.getLogger(__name__) self.logger.setLevel(logging.INFO) ##create a file handler handler = logging.FileHandler('/var/log/meterd.log') handler.setLevel(logging.INFO) ##create a logging format formatter = logging.Formatter('%(asctime)s - ' + '%(name)s - ' + '%(levelname)s - ' + '%(message)s') handler.setFormatter(formatter) ##add the handlers to the logger self.logger.addHandler(handler) self.logger.info('Logging started...') self.logger.info('Pid is:' + pid) super(MeterDaemon, self).__init__(pid) self.m = Meter('/dev/ttyUSB0', 57600, 8, 'mastermeter', 'watts', self.logger) def run(self): self.m.open() self.logger.debug('Meter open.') while 1: self.m.read() self.m.parse() self.m.submit() time.sleep(6) def stop(self): self.m.close() self.logger.debug('Meter close.') super(MeterDaemon, self).stop()