From 4215322a9df84f3203dc7e98fd1533c18d9872ba Mon Sep 17 00:00:00 2001 From: davidh-ssec <david.hoese@ssec.wisc.edu> Date: Tue, 19 Dec 2017 09:07:22 -0600 Subject: [PATCH] Add legacy db insert script --- aosstower/level_00/influxdb.py | 2 +- aosstower/level_00/legacy_db_insert.py | 85 ++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 aosstower/level_00/legacy_db_insert.py diff --git a/aosstower/level_00/influxdb.py b/aosstower/level_00/influxdb.py index 8ebfe21..865b047 100644 --- a/aosstower/level_00/influxdb.py +++ b/aosstower/level_00/influxdb.py @@ -51,7 +51,7 @@ SYMBOLS = list(SYMBOL_CONVERSIONS.values()) 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('--logfn', help='Log to rotating file (Not Implemented)') parser.add_argument('--debug', action='store_true', help='Don\'t submit records to the database, print them to stdout') parser.add_argument('-t', '--tail', action='store_true', diff --git a/aosstower/level_00/legacy_db_insert.py b/aosstower/level_00/legacy_db_insert.py new file mode 100644 index 0000000..1b0882d --- /dev/null +++ b/aosstower/level_00/legacy_db_insert.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python +"""Insert RIG Tower data from a level 0 (raw) data file into a MetObs database. + +All error messages will go to stderr, all other logging will go to stdout. So +to make sure errors are logged: + + "%(prog)s 2> error.log" + +""" +import logging +import logging.handlers +import sys +from metobscommon import legacy_db +from aosstower.level_00.parser import read_frames + +logging.addLevelName(9, 'TRACE') +LOG = logging.getLogger(__name__) +ERR = logging.getLogger(__name__ + '.error') + + +def configure_logging(level, logfn=None): + handler = logging.StreamHandler(sys.stdout) + handler.setFormatter(logging.Formatter("%(asctime)s: %(message)s")) + LOG.addHandler(handler) + LOG.setLevel(level) + + handler = logging.StreamHandler(sys.stderr) + handler.setFormatter(logging.Formatter("FAIL: %(message)s")) + ERR.addHandler(handler) + ERR.setLevel(logging.INFO) + + if logfn: + maxsize = (20 * 1024 ** 3) # 20 MB + rotating_file = logging.handlers.RotatingFileHandler( + logfn, mode='a', maxBytes=maxsize, + backupCount=5) + rotating_file.setFormatter(logging.Formatter('%(asctime)s: %(message)s')) + LOG.addHandler(rotating_file) + + +def main(*args): + import argparse + parser = argparse.ArgumentParser(description=__doc__, + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument('--loglvl', dest='loglvl', default='warn', + help='logging level', + choices=(['trace', 'debug', 'info', 'warn', 'error'])) + parser.add_argument('--logfn', help='Log to rotating file') + parser.add_argument('-s', '--station', dest='station', default='RIG Tower', + help='Name of station to use to determine symbols') + parser.add_argument('--ldmp', action='store_true', + help='Treat `src` file as a station name and read records from LoggerNet LDMP server (port: 1024)') + parser.add_argument('--tables', nargs='*', default=['1'], + help="LoggerNet LDMP tables to read in") + parser.add_argument('dburl', help='Database to insert into') + parser.add_argument('src', help='Level 0 raw data file') + + args = parser.parse_args() + lvl = logging._levelNames.get(args.loglvl.upper(), logging.INFO) + + configure_logging(lvl, args.logfn) + + LOG.info("Initializing DB with %s", args.dburl) + legacy_db.init_model(args.dburl) + + LOG.info("source: %s", args.src) + LOG.info("tail: %s", args.tail) + + station = legacy_db.Station.query.filter_by(name=args.station).first() + legacy_db.Session.commit() + if not station: + parser.exit(1, "Station not found: %s" % args.station) + + if args.ldmp: + from aosstower.level_00.parser import ldmp_generator + record_gen = ldmp_generator(args.src, args.tables) + else: + src = open(args.src, "r") + record_gen = read_frames(src, tail=args.tail) + + for record in record_gen: + data = (record['stamp'], record) + failures = legacy_db.insert_records([data], station=station) + if failures: + ERR.info("(%s) %s", failures[0][0], record) -- GitLab