#!/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())