70 lines
2.7 KiB
Python
70 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
import argparse
|
|
import sys
|
|
|
|
from ffmap import run_names
|
|
|
|
class MyAction(argparse.Action):
|
|
def __call__(self, parser, namespace, values, option_string=None):
|
|
if self.dest.startswith(("input_", "output_")):
|
|
collection_name = self.dest.split("_")[0] + "s"
|
|
name = self.dest.split("_", 1)[1]
|
|
if not hasattr(namespace, collection_name):
|
|
setattr(namespace, collection_name, [])
|
|
collection = getattr(namespace, collection_name)
|
|
collection.append({
|
|
"name": name,
|
|
"options": {self.metavar.lower(): values}
|
|
if values is not None else {}
|
|
})
|
|
else:
|
|
raise Exception("Unexpected dest=" + self.dest)
|
|
|
|
def parser_add_myarg(parser, name, metavar="OPT", help=None):
|
|
parser.add_argument("--" + name,
|
|
metavar=metavar,
|
|
type=str,
|
|
nargs='?',
|
|
const=None,
|
|
action=MyAction,
|
|
help=help)
|
|
|
|
parser = argparse.ArgumentParser(
|
|
description="""Merge node data from multiple sources and generate
|
|
various output formats from this data""",
|
|
)
|
|
input_group = parser.add_argument_group("Inputs", description="""
|
|
Inputs are used in the order given on the command line, where later
|
|
inputs can overwrite attributes of earlier inputs if named equally,
|
|
but the first input encountering a node sets its id, which is
|
|
immutable afterwards.
|
|
|
|
The same input can be given multiple times, probably with different
|
|
options.
|
|
""")
|
|
output_group = parser.add_argument_group("Outputs")
|
|
parser_add_myarg(input_group, 'input-alfred', metavar="REQUEST_DATA_TYPE",
|
|
help="read node details from A.L.F.R.E.D.")
|
|
parser_add_myarg(input_group, 'input-wiki', metavar="URL",
|
|
help="read node details from a Wiki page")
|
|
parser_add_myarg(input_group, 'input-batadv', metavar="MESH_INTERFACE",
|
|
help="add node's neighbors and clients from batadv-vis")
|
|
parser_add_myarg(output_group, 'output-d3json', metavar="FILEPATH",
|
|
help="generate JSON file compatible with ffmap-d3")
|
|
parser_add_myarg(output_group, 'output-rrd', metavar="DIRECTORY",
|
|
help="update RRDs with statistics, one global and one per node")
|
|
|
|
args = parser.parse_args()
|
|
|
|
if "inputs" not in args or not args.inputs:
|
|
parser.print_help(sys.stderr)
|
|
sys.stderr.write("\nERROR: No input has been defined!\n")
|
|
sys.exit(1)
|
|
|
|
if "outputs" not in args or not args.outputs:
|
|
parser.print_help(sys.stderr)
|
|
sys.stderr.write("\nERROR: No output has been defined!\n")
|
|
sys.exit(1)
|
|
|
|
run_names(inputs=args.inputs, outputs=args.outputs)
|