diff options
author | Michael Elkins <melkins@tislabs.com> | 2016-05-25 21:54:56 +0000 |
---|---|---|
committer | Michael Elkins <melkins@tislabs.com> | 2016-05-25 21:54:56 +0000 |
commit | bfdc3d37a9020fabafdd089341ce39aa6bfe20f0 (patch) | |
tree | dd211a9eaf4d57efe551ee37b1a827ba54b8f751 /ca/rpkigui-import-routes | |
parent | 8725496e91cee1728787acd40ed7f920c7f9f29b (diff) |
Make rpkigui-import-routes use logging settings from /etc/rpki.conf instead of rpki.django_settings.gui
Create new rpki.django_settings.gui_script Django settings file with a minimal subset required to use the ORM, to be used in auxillary scripts
Add [rpkigui-import-routes] section to rpki.conf
Change log level of warning about AS value errors in routeviews dumps to DEBUG
svn path=/branches/tk705/; revision=6439
Diffstat (limited to 'ca/rpkigui-import-routes')
-rwxr-xr-x | ca/rpkigui-import-routes | 92 |
1 files changed, 40 insertions, 52 deletions
diff --git a/ca/rpkigui-import-routes b/ca/rpkigui-import-routes index fb8e381e..aeecea6e 100755 --- a/ca/rpkigui-import-routes +++ b/ca/rpkigui-import-routes @@ -14,6 +14,11 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. +"""This tool is used to import the IPv4/6 BGP table dumps +from routeviews.org into the RPKI Web Portal database. If the +input file is a bzip2 compressed file, it will be decompressed +automatically.""" + __version__ = '$Id$' import optparse @@ -27,12 +32,15 @@ import fcntl import sys import os +import rpki.config + # configure django ORM from rpki.gui.script_util import setup setup() from rpki.gui.routeview.util import import_routeviews_dump +default_url = 'http://archive.routeviews.org/oix-route-views/oix-full-snapshot-latest.dat.bz2' class BadArgument(Exception): pass @@ -44,67 +52,47 @@ def timed_out(*ignored): if __name__ == '__main__': - parser = optparse.OptionParser( - usage='%prog [options] [PATH]', - description="""This tool is used to import the IPv4/6 BGP table dumps -from routeviews.org into the RPKI Web Portal database. If the -input file is a bzip2 compressed file, it will be decompressed -automatically.""") - parser.add_option('-t', '--type', dest='filetype', metavar='TYPE', - help='Specify the input file type (text, mrt) [Default: %default]') - parser.add_option('-l', '--level', dest='log_level', default='ERROR', - help='Set logging level [Default: %default]') - parser.add_option('-b', '--bgpdump', dest='bgpdump', metavar='PROG', - help='Specify path to bgdump binary') - parser.add_option('-j', '--jitter', dest='jitter', type='int', - help='Specify upper bound of startup delay, in seconds [Default: %default]') - parser.add_option('--lockfile', dest='lockfile', - help='Set name of lock file; empty string disables locking [Default: %default]') - parser.add_option('--timeout', dest='timeout', type='int', - help='Specify timeout for download and import, in seconds [Default: %default]') - parser.set_defaults(debug=False, verbose=False, filetype='text', jitter=0, - lockfile='/tmp/rpkigui-import-routes.lock', timeout=90*60) - options, args = parser.parse_args() - - v = getattr(logging, options.log_level.upper()) - logging.basicConfig(level=v) - atexit.register(logging.shutdown) - logging.info('logging level set to ' + logging.getLevelName(v)) - - if options.bgpdump: - BGPDUMP = os.path.expanduser(options.bgpdump) - - if options.jitter > 0: + myname = 'rpkigui-import-routes' + + cfg = rpki.config.argparser(section=myname, doc=__doc__) + cfg.add_logging_arguments() + args = cfg.argparser.parse_args() + cfg.configure_logging(ident=myname, args=args) + + jitter = cfg.getint('jitter', section=myname, default=600) + if jitter > 0: try: - delay = random.SystemRandom().randint(0, options.jitter) + delay = random.SystemRandom().randint(0, jitter) except NotImplementedError: - delay = random.randint(0, options.jitter) + delay = random.randint(0, jitter) logging.info('jitter active, delaying startup for %d seconds', delay) time.sleep(delay) - if options.lockfile: - try: - lock = os.open(options.lockfile, os.O_RDONLY | os.O_CREAT | os.O_NONBLOCK, 0666) - fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB) - except (IOError, OSError), e: - if e.errno == errno.EAGAIN: - logging.info('lock held by another process') - sys.exit(0) - else: - logging.exception(e) - sys.exit(1) - + lockfile = cfg.get('lockfile', section=myname, default='/tmp/rpkigui-import-routes.lock') try: - if len(args) > 1: - raise BadArgument('more than one filename specified') - - if options.timeout > 0: + lock = os.open(lockfile, os.O_RDONLY | os.O_CREAT | os.O_NONBLOCK, 0666) + fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + except (IOError, OSError), e: + if e.errno == errno.EAGAIN: + logging.info('lock held by another process') + sys.exit(0) + else: + logging.exception(e) + sys.exit(1) + + filename = cfg.get('filename', section=myname, default=default_url) + filetype = cfg.get('filetype', section=myname, default='text') + download_dir = cfg.get('download-directory', section=myname, default='/var/tmp') + + timeout = cfg.getint('timeout', section=myname, default=5400) + try: + if timeout > 0: signal.signal(signal.SIGALRM, timed_out) - signal.setitimer(signal.ITIMER_REAL, options.timeout) + signal.setitimer(signal.ITIMER_REAL, timeout) - import_routeviews_dump(*args, filetype=options.filetype) + import_routeviews_dump(filename=filename, filetype=filetype, download_dir=download_dir) - if options.timeout > 0: + if timeout > 0: signal.setitimer(signal.ITIMER_REAL, 0) except Exception as e: |