#!/usr/bin/env python """Insert Tower data in to an InfluxDB for real time use. """ import logging import logging.handlers import time import sys import requests from metobscommon import influxdb from aosstower.l00.parser import read_frames LOG = logging.getLogger(__name__) # map station name to InfluxDB tags STATIONS = { "AOSS Tower": {"inst": "tower", "site": "aoss"}, } def main(): import argparse parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--logfn', help='Log to rotating file') parser.add_argument('-t', '--tail', action='store_true', help=('Tail file forever, not returning. This will start at the end ' 'of the file and insert any new data added after starting')) parser.add_argument("--host", default=influxdb.DB_HOST, help="Hostname of database connection") parser.add_argument("--port", default=influxdb.DB_PORT, help="Port of database connection") parser.add_argument("--dbname", default=influxdb.DB_NAME, help="Name of database to modify") parser.add_argument('-s', '--station', dest='station', default='AOSS Tower', choices=STATIONS.keys(), help='Name of station to use to determine symbols') parser.add_argument('-v', '--verbose', dest='verbosity', action="count", default=0, help='each occurrence increases verbosity 1 level through ERROR-WARNING-INFO-DEBUG') parser.add_argument('src', help='Level 0 raw data file') args = parser.parse_args() levels = [logging.ERROR, logging.WARN, logging.INFO, logging.DEBUG] logging.basicConfig(level=levels[min(3, args.verbosity)]) LOG.info("source: %s", args.src) LOG.info("tail: %s", args.tail) station_tags = STATIONS[args.station] src = open(args.src, "r") for idx, record in enumerate(read_frames(src, tail=args.tail)): LOG.info("Inserting records for frame %d", idx) lines = influxdb.frame_records(record, **station_tags) resp = requests.post( 'http://{host}:{port:d}/write?db={dbname}'.format(host=args.host, port=args.port, dbname=args.dbname), data='\n'.join(lines)) resp.raise_for_status() if __name__ == "__main__": sys.exit(main())