Exemplo n.º 1
0
    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))
Exemplo n.º 2
0
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()