aboutsummaryrefslogtreecommitdiff
path: root/ca
diff options
context:
space:
mode:
Diffstat (limited to 'ca')
-rwxr-xr-xca/rpkigui-import-routes92
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: