Пример #1
0
def get_argparser():
    parser = argparse.ArgumentParser(
        description="ARTIQ schedule InfluxDB logger bridge",
        epilog="Listens to schedule updates on the master experiment schedule "
        "and submits schedule additions and removals to the InfluxDB "
        "database. Other schedule changes, such as transitions between "
        "pipeline states (prepare, prepare_done, running, etc.) are "
        "ignored. Typical high cardinality metadata is logged as "
        "fields while low cardinality data is logged as tags. "
        "The initially obtained complete state is logged as a 'clear' "
        "entry followed by the addition of all entries.")
    group = parser.add_argument_group("master")
    group.add_argument("--server-master",
                       default="::1",
                       help="hostname or IP of the master to connect to")
    group.add_argument("--port-master",
                       default=3250,
                       type=int,
                       help="TCP port to use to connect to the master")
    group.add_argument("--retry-master",
                       default=5.0,
                       type=float,
                       help="retry timer for reconnecting to master")
    group = parser.add_argument_group("database")
    group.add_argument(
        "--baseurl-db",
        default="http://localhost:8086",
        help="base URL to access InfluxDB (default: %(default)s)")
    group.add_argument("--user-db", default="", help="InfluxDB username")
    group.add_argument("--password-db", default="", help="InfluxDB password")
    group.add_argument("--database", default="db", help="database name to use")
    group.add_argument("--table", default="schedule", help="table name to use")
    simple_network_args(parser, [("control", "control", 3275)])
    add_common_args(parser)
    return parser
Пример #2
0
def get_argparser():
    parser = argparse.ArgumentParser(description="ARTIQ Dashboard")
    parser.add_argument("-s",
                        "--server",
                        default="::1",
                        help="hostname or IP of the master to connect to")
    parser.add_argument("--port-notify",
                        default=3250,
                        type=int,
                        help="TCP port to connect to for notifications")
    parser.add_argument("--port-control",
                        default=3251,
                        type=int,
                        help="TCP port to connect to for control")
    parser.add_argument("--port-broadcast",
                        default=1067,
                        type=int,
                        help="TCP port to connect to for broadcasts")
    parser.add_argument(
        "--db-file",
        default=None,
        help="database file for local GUI settings, "
        "by default in {} and dependant on master hostname".format(
            get_user_config_dir()))
    add_common_args(parser)
    return parser
Пример #3
0
def get_argparser():
    parser = argparse.ArgumentParser(description="ARTIQ Browser")
    parser.add_argument("--version",
                        action="version",
                        version="ARTIQ v{}".format(artiq_version),
                        help="print the ARTIQ version number")
    parser.add_argument("--db-file",
                        default=None,
                        help="database file for local browser settings "
                        "(default: %(default)s)")
    parser.add_argument("--browse-root",
                        default="",
                        help="root path for directory tree "
                        "(default %(default)s)")
    parser.add_argument("-s",
                        "--server",
                        default="::1",
                        help="hostname or IP of the master to connect to "
                        "when uploading datasets")
    parser.add_argument("--port",
                        default=3251,
                        type=int,
                        help="TCP port to use to connect to the master")
    parser.add_argument("select",
                        metavar="SELECT",
                        nargs="?",
                        help="directory to browse or file to load")
    add_common_args(parser)
    return parser
Пример #4
0
def get_argparser():
    default_db_file = os.path.join(get_user_config_dir(), "artiq_browser.pyon")

    parser = argparse.ArgumentParser(description="ARTIQ Browser")
    parser.add_argument("--db-file",
                        default=default_db_file,
                        help="database file for local browser settings "
                        "(default: %(default)s)")
    parser.add_argument("--browse-root",
                        default="",
                        help="root path for directory tree "
                        "(default %(default)s)")
    parser.add_argument("-s",
                        "--server",
                        default="::1",
                        help="hostname or IP of the master to connect to "
                        "when uploading datasets")
    parser.add_argument("--port",
                        default=3251,
                        type=int,
                        help="TCP port to use to connect to the master")
    parser.add_argument("select",
                        metavar="SELECT",
                        nargs="?",
                        help="directory to browse or file to load")
    add_common_args(parser)
    return parser
Пример #5
0
def get_argparser():
    parser = argparse.ArgumentParser(
        description="ARTIQ data to InfluxDB bridge",
        epilog="Pattern matching works as follows. "
        "The default action on a key (dataset name) is to log it. "
        "Then the patterns are traversed in order and glob-matched "
        "with the key. "
        "Optional + and - pattern prefixes specify to either ignore or "
        "log keys matching the rest of the pattern. "
        "Default (in the absence of prefix) is to ignore. Last matched "
        "pattern takes precedence. \n \n"
        "For a dataset to be logged, it must be marked as persistent "
        "on initialization.  This is done by setting the persist argument "
        "in set_dataset() to True.")
    master_group = parser.add_argument_group("master")
    master_group.add_argument(
        "--server-master",
        default="::1",
        help="hostname or IP of the master to connect to")
    master_group.add_argument(
        "--port-master",
        default=3250,
        type=int,
        help="TCP port to use to connect to the master (default: %(default)s")
    master_group.add_argument("--retry-master",
                              default=5.0,
                              type=float,
                              help="retry timer for reconnecting to master")
    database_group = parser.add_argument_group("database")
    database_group.add_argument(
        "--baseurl-db",
        default="http://localhost:8086",
        help="base URL to access InfluxDB (default: %(default)s)")
    database_group.add_argument("--user-db",
                                default="",
                                help="InfluxDB username")
    database_group.add_argument("--password-db",
                                default="",
                                help="InfluxDB password")
    database_group.add_argument("--database",
                                default="db",
                                help="database name to use")
    database_group.add_argument("--table",
                                default="lab",
                                help="table name to use")
    filter_group = parser.add_argument_group("filter")
    filter_group.add_argument(
        "--pattern-file",
        default="influxdb_patterns.cfg",
        help="file to load the patterns from (default: %(default)s). "
        "If the file is not found, no patterns are loaded "
        "(everything is logged).")
    simple_network_args(parser, [("control", "control", 3248)])
    add_common_args(parser)
    return parser
Пример #6
0
def get_argparser():
    parser = argparse.ArgumentParser(
        description="ARTIQ controller for core device logs")
    tools.add_common_args(parser)
    tools.simple_network_args(parser, 1068)
    parser.add_argument("--simulation",
                        action="store_true",
                        help="Simulation - does not connect to device")
    parser.add_argument("core_addr",
                        metavar="CORE_ADDR",
                        help="hostname or IP address of the core device")
    return parser
Пример #7
0
def get_argparser():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.RawDescriptionHelpFormatter,
        description="ARTIQ flashing/deployment tool",
        epilog="""\
Valid actions:

    * gateware: write gateware bitstream to flash
    * bootloader: write bootloader to flash
    * storage: write storage image to flash
    * firmware: write firmware to flash
    * load: load gateware bitstream into device (volatile but fast)
    * erase: erase flash memory
    * start: trigger the target to (re)load its gateware bitstream from flash

Prerequisites:

    * Connect the board through its/a JTAG adapter.
    * Have OpenOCD installed and in your $PATH.
    * Have access to the JTAG adapter's devices. Udev rules from OpenOCD:
      'sudo cp openocd/contrib/99-openocd.rules /etc/udev/rules.d'
      and replug the device. Ensure you are member of the
      plugdev group: 'sudo adduser $USER plugdev' and re-login.
""")

    add_common_args(parser)

    parser.add_argument("-n", "--dry-run",
                        default=False, action="store_true",
                        help="only show the openocd script that would be run")
    parser.add_argument("-H", "--host", metavar="HOSTNAME",
                        type=str, default=None,
                        help="SSH host where the board is located")
    parser.add_argument("-J", "--jump",
                        type=str, default=None,
                        help="SSH host to jump through")
    parser.add_argument("-t", "--target", default="kasli",
                        help="target board, default: %(default)s, one of: "
                             "kasli sayma metlino kc705")
    parser.add_argument("-V", "--variant", default=None,
                        help="board variant. Autodetected if only one is installed.")
    parser.add_argument("-I", "--preinit-command", default=[], action="append",
                        help="add a pre-initialization OpenOCD command. "
                             "Useful for selecting a board when several are connected.")
    parser.add_argument("-f", "--storage", help="write file to storage area")
    parser.add_argument("-d", "--dir", help="look for board binaries in this directory")
    parser.add_argument("--srcbuild", help="board binaries directory is laid out as a source build tree",
                        default=False, action="store_true")
    parser.add_argument("action", metavar="ACTION", nargs="*",
                        default="gateware bootloader firmware start".split(),
                        help="actions to perform, default: %(default)s")
    return parser
Пример #8
0
def get_argparser():
    parser = argparse.ArgumentParser(
        description="ARTIQ core device development tool",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)

    add_common_args(parser)

    parser.add_argument("-t", "--target", metavar="TARGET",
                        type=str, default="kasli",
                        help="target to build, one of: "
                             "kc705 kasli sayma")
    parser.add_argument("-V", "--variant", metavar="VARIANT",
                        type=str, default=None,
                        help="variant to build, dependent on the target")
    parser.add_argument("-g", "--gateware",
                        default=False, action="store_true",
                        help="build/flash gateware, not just software")
    parser.add_argument("--args", metavar="ARGS",
                        type=shlex.split, default=[],
                        help="extra arguments for gateware/firmware build")

    parser.add_argument("-H", "--host",
                        type=str, default="lab.m-labs.hk",
                        help="SSH host where the development board is located")
    parser.add_argument("-J", "--jump",
                        type=str, default=None,
                        help="SSH host to jump through")
    parser.add_argument("-b", "--board",
                        type=str, default="{board_type}-1",
                        help="board to connect to on the development SSH host")
    parser.add_argument("-B", "--board-file",
                        type=str, default="/var/lib/artiq/boards/{board}",
                        help="the board file containing the openocd initialization commands; "
                             "it is also used as the lock file")
    parser.add_argument("-s", "--serial",
                        type=str, default="/dev/ttyUSB_{board}",
                        help="TTY device corresponding to the development board")
    parser.add_argument("-d", "--device",
                        type=str, default="{board}",
                        help="address or domain corresponding to the development board")
    parser.add_argument("-w", "--wait", action="store_true",
                        help="wait for the board to unlock instead of aborting the actions")

    parser.add_argument("actions", metavar="ACTION",
                        type=str, default=[], nargs="+",
                        help="actions to perform, sequence of: "
                             "build clean reset flash flash+log load connect hotswap")

    return parser
Пример #9
0
def get_argparser():
    parser = argparse.ArgumentParser(description="WAnD laser locker")
    add_common_args(parser)
    parser.add_argument("-s",
                        "--server",
                        action="append",
                        help="Add a WAnD server by IP address")
    parser.add_argument("-poll",
                        "--poll-time",
                        help="time between log updates (s) (default: "
                        "'%(default)s')",
                        type=int,
                        default=300)
    parser.add_argument("-db",
                        "--database",
                        help="influxdb database to log to '%(default)s')",
                        default="lasers")
    return parser
Пример #10
0
def get_argparser():
    parser = argparse.ArgumentParser()
    simple_network_args(parser, 4000)
    add_common_args(parser)
    parser.add_argument(
        "--list",
        action="store_true",
        help="list connected cameras (ignores all other arguments)")
    parser.add_argument("--broadcast-images", action="store_true")
    parser.add_argument("--zmq-bind", default="*")
    parser.add_argument("--zmq-port", default=5555, type=int)
    parser.add_argument(
        "--device",
        "-d",
        type=int,
        default=None,
        help="camera serial number, uses first available if not supplied")
    return parser
Пример #11
0
def get_argparser():
    parser = argparse.ArgumentParser(description="ARTIQ Browser")
    parser.add_argument("--db-file", default=None,
                        help="database file for local browser settings "
                        "(default: %(default)s)")
    parser.add_argument("--browse-root", default="",
                        help="root path for directory tree "
                        "(default %(default)s)")
    parser.add_argument(
        "-s", "--server", default="::1",
        help="hostname or IP of the master to connect to "
             "when uploading datasets")
    parser.add_argument(
        "--port", default=3251, type=int,
        help="TCP port to use to connect to the master")
    parser.add_argument("select", metavar="SELECT", nargs="?",
                        help="directory to browse or file to load")
    add_common_args(parser)
    return parser
Пример #12
0
def get_argparser():
    parser = argparse.ArgumentParser(description="ARTIQ Dashboard")
    parser.add_argument(
        "-s", "--server", default="::1",
        help="hostname or IP of the master to connect to")
    parser.add_argument(
        "--port-notify", default=3250, type=int,
        help="TCP port to connect to for notifications")
    parser.add_argument(
        "--port-control", default=3251, type=int,
        help="TCP port to connect to for control")
    parser.add_argument(
        "--port-broadcast", default=1067, type=int,
        help="TCP port to connect to for broadcasts")
    parser.add_argument(
        "--db-file", default=None,
        help="database file for local GUI settings")
    add_common_args(parser)
    return parser
Пример #13
0
def get_argparser():
    parser = argparse.ArgumentParser(description="WAnD GUI")
    parser.add_argument("-n",
                        "--name",
                        default="test",
                        help="server name, used to locate configuration file")
    parser.add_argument("-f",
                        "--log-to-file",
                        action="store_true",
                        help="Save log output to file")
    parser.add_argument("-b",
                        "--backup-dir",
                        default="",
                        type=str,
                        help="directory containing backup copies of "
                        "configuration files")
    add_common_args(parser)

    return parser
Пример #14
0
def get_argparser():
    parser = argparse.ArgumentParser(
        description="ARTIQ data to InfluxDB bridge",
        epilog="Pattern matching works as follows. "
               "The default action on a key (dataset name) is to log it. "
               "Then the patterns are traversed in order and glob-matched "
               "with the key. "
               "Optional + and - pattern prefixes specify to either ignore or "
               "log keys matching the rest of the pattern. "
               "Default (in the absence of prefix) is to ignore. Last matched "
               "pattern takes precedence.")
    master_group = parser.add_argument_group("master")
    master_group.add_argument(
        "--server-master", default="::1",
        help="hostname or IP of the master to connect to")
    master_group.add_argument(
        "--port-master", default=3250, type=int,
        help="TCP port to use to connect to the master (default: %(default)s")
    master_group.add_argument(
        "--retry-master", default=5.0, type=float,
        help="retry timer for reconnecting to master")
    database_group = parser.add_argument_group("database")
    database_group.add_argument(
        "--baseurl-db", default="http://localhost:8086",
        help="base URL to access InfluxDB (default: %(default)s)")
    database_group.add_argument(
        "--user-db", default="", help="InfluxDB username")
    database_group.add_argument(
        "--password-db", default="", help="InfluxDB password")
    database_group.add_argument(
        "--database", default="db", help="database name to use")
    database_group.add_argument(
        "--table", default="lab", help="table name to use")
    filter_group = parser.add_argument_group("filter")
    filter_group.add_argument(
        "--pattern-file", default="influxdb_patterns.cfg",
        help="file to load the patterns from (default: %(default)s). "
             "If the file is not found, no patterns are loaded "
             "(everything is logged).")
    simple_network_args(parser, [("control", "control", 3248)])
    add_common_args(parser)
    return parser
Пример #15
0
def get_argparser():
    parser = argparse.ArgumentParser(description="ARTIQ core device "
                                                 "RTIO analysis tool")

    add_common_args(parser)
    parser.add_argument("--device-db", default="device_db.py",
                        help="device database file (default: '%(default)s')")

    parser.add_argument("-r", "--read-dump", type=str, default=None,
                        help="read raw dump file instead of accessing device")
    parser.add_argument("-p", "--print-decoded", default=False,
                        action="store_true", help="print raw decoded messages")
    parser.add_argument("-w", "--write-vcd", type=str, default=None,
                        help="format and write contents to VCD file")
    parser.add_argument("-d", "--write-dump", type=str, default=None,
                        help="write raw dump file")

    parser.add_argument("-u", "--vcd-uniform-interval", action="store_true",
                        help="emit uniform time intervals between timed VCD "
                             "events and show RTIO event interval (in SI "
                             "seconds) and timestamp (in machine units) as "
                             "separate VCD channels")
    return parser
Пример #16
0
def get_argparser():
    parser = argparse.ArgumentParser(description="ARTIQ controller manager")

    add_common_args(parser)

    parser.add_argument("-s",
                        "--server",
                        default="::1",
                        help="hostname or IP of the master to connect to")
    parser.add_argument("--port-notify",
                        default=3250,
                        type=int,
                        help="TCP port to connect to for notifications")
    parser.add_argument("--port-logging",
                        default=1066,
                        type=int,
                        help="TCP port to connect to for logging")
    parser.add_argument("--retry-master",
                        default=5.0,
                        type=float,
                        help="retry timer for reconnecting to master")
    simple_network_args(parser, [("control", "control", 3249)])
    return parser
Пример #17
0
def get_argparser():
    parser = argparse.ArgumentParser(description="WAnD server")

    simple_network_args(parser, [
        ("notify", "notifications", 3250),
        ("control", "control", 3251),
    ])
    add_common_args(parser)
    parser.add_argument("-n", "--name",
                        default="test",
                        help="server name, used to locate configuration file")
    parser.add_argument("--simulation",
                        action='store_true',
                        help="run in simulation mode")
    parser.add_argument("--fast-mode-timeout",
                        default=1800,
                        type=int,
                        help="fast mode timeout (s) (default: '%(default)s')")
    parser.add_argument("-b", "--backup-dir",
                        default="",
                        type=str,
                        help="directory containing backup copies of "
                             "configuration files")
    return parser
Пример #18
0
def get_argparser():
    parser = argparse.ArgumentParser(description="ARTIQ core device "
                                                 "management tool")

    add_common_args(parser)
    parser.add_argument("--device-db", default="device_db.py",
                       help="device database file (default: '%(default)s')")
    parser.add_argument("-D", "--device", default=None,
                        help="use specified core device address instead of "
                             "reading device database")

    tools = parser.add_subparsers(dest="tool")
    tools.required = True

    # logging
    t_log = tools.add_parser("log",
                             help="read logs and change log levels")

    subparsers = t_log.add_subparsers(dest="action")

    p_clear = subparsers.add_parser("clear",
                                    help="clear log buffer")

    p_set_level = subparsers.add_parser("set_level",
                                        help="set minimum level for messages to be logged")
    p_set_level.add_argument("level", metavar="LEVEL", type=str,
                             help="log level (one of: OFF ERROR WARN INFO DEBUG TRACE)")

    p_set_uart_level = subparsers.add_parser("set_uart_level",
                                             help="set minimum level for messages to be logged "
                                                  "to UART")
    p_set_uart_level.add_argument("level", metavar="LEVEL", type=str,
                                  help="log level (one of: OFF ERROR WARN INFO DEBUG TRACE)")

    # configuration
    t_config = tools.add_parser("config",
                                help="read and change core device configuration")

    subparsers = t_config.add_subparsers(dest="action")
    subparsers.required = True

    p_read = subparsers.add_parser("read",
                                   help="read key from core device config")
    p_read.add_argument("key", metavar="KEY", type=str,
                        help="key to be read from core device config")

    p_write = subparsers.add_parser("write",
                                    help="write key-value records to core "
                                         "device config")
    p_write.add_argument("-s", "--string", nargs=2, action="append",
                         default=[], metavar=("KEY", "STRING"), type=str,
                         help="key-value records to be written to core device "
                              "config")
    p_write.add_argument("-f", "--file", nargs=2, action="append",
                         type=str, default=[],
                         metavar=("KEY", "FILENAME"),
                         help="key and file whose content to be written to "
                              "core device config")

    p_remove = subparsers.add_parser("remove",
                                     help="remove key from core device config")
    p_remove.add_argument("key", metavar="KEY", nargs=argparse.REMAINDER,
                          default=[], type=str,
                          help="key to be removed from core device config")

    subparsers.add_parser("erase", help="fully erase core device config")

    # booting
    t_boot = tools.add_parser("reboot",
                              help="reboot the currently running firmware")

    t_hotswap = tools.add_parser("hotswap",
                                  help="load the specified firmware in RAM")

    t_hotswap.add_argument("image", metavar="IMAGE", type=argparse.FileType("rb"),
                           help="runtime image to be executed")

    # profiling
    t_profile = tools.add_parser("profile",
                                 help="account for communications CPU time")

    subparsers = t_profile.add_subparsers(dest="action")
    subparsers.required = True

    p_start = subparsers.add_parser("start",
                                    help="start profiling")
    p_start.add_argument("--interval", metavar="MICROS", type=int, default=2000,
                         help="sampling interval, in microseconds")
    p_start.add_argument("--hits-size", metavar="ENTRIES", type=int, default=8192,
                         help="hit buffer size")
    p_start.add_argument("--edges-size", metavar="ENTRIES", type=int, default=8192,
                         help="edge buffer size")

    p_stop = subparsers.add_parser("stop",
                                   help="stop profiling")

    p_save = subparsers.add_parser("save",
                                   help="save profile")
    p_save.add_argument("output", metavar="OUTPUT", type=argparse.FileType("w"),
                        help="file to save profile to, in Callgrind format")
    p_save.add_argument("firmware", metavar="FIRMWARE", type=str,
                        help="path to firmware ELF file")
    p_save.add_argument("--no-compression",
                        dest="compression", default=True, action="store_false",
                        help="disable profile compression")
    p_save.add_argument("--no-demangle",
                        dest="demangle", default=True, action="store_false",
                        help="disable symbol demangling")

    # misc debug
    t_debug = tools.add_parser("debug",
                               help="specialized debug functions")

    subparsers = t_debug.add_subparsers(dest="action")
    subparsers.required = True

    p_allocator = subparsers.add_parser("allocator",
                                        help="show heap layout")

    return parser
Пример #19
0
def get_argparser():
    parser = argparse.ArgumentParser(
        description="ARTIQ core device development tool",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)

    add_common_args(parser)

    parser.add_argument("-t",
                        "--target",
                        metavar="TARGET",
                        type=str,
                        default="kasli",
                        help="target to build, one of: "
                        "kc705 kasli sayma")
    parser.add_argument("-V",
                        "--variant",
                        metavar="VARIANT",
                        type=str,
                        default=None,
                        help="variant to build, dependent on the target")
    parser.add_argument("-g",
                        "--gateware",
                        default=False,
                        action="store_true",
                        help="build/flash gateware, not just software")
    parser.add_argument("--args",
                        metavar="ARGS",
                        type=shlex.split,
                        default=[],
                        help="extra arguments for gateware/firmware build")

    parser.add_argument("-H",
                        "--host",
                        type=str,
                        default="lab.m-labs.hk",
                        help="SSH host where the development board is located")
    parser.add_argument("-J",
                        "--jump",
                        type=str,
                        default=None,
                        help="SSH host to jump through")
    parser.add_argument("-b",
                        "--board",
                        type=str,
                        default="{board_type}-1",
                        help="board to connect to on the development SSH host")
    parser.add_argument(
        "-B",
        "--board-file",
        type=str,
        default="/var/lib/artiq/boards/{board}",
        help="the board file containing the openocd initialization commands; "
        "it is also used as the lock file")
    parser.add_argument(
        "-s",
        "--serial",
        type=str,
        default="/dev/ttyUSB_{board}",
        help="TTY device corresponding to the development board")
    parser.add_argument(
        "-d",
        "--device",
        type=str,
        default="{board}",
        help="address or domain corresponding to the development board")
    parser.add_argument(
        "-w",
        "--wait",
        action="store_true",
        help="wait for the board to unlock instead of aborting the actions")

    parser.add_argument(
        "actions",
        metavar="ACTION",
        type=str,
        default=[],
        nargs="+",
        help="actions to perform, sequence of: "
        "build clean reset flash flash+log load connect hotswap")

    return parser
Пример #20
0
def get_argparser():
    parser = argparse.ArgumentParser(description="ARTIQ core device "
                                     "management tool")

    add_common_args(parser)
    parser.add_argument("--device-db",
                        default="device_db.py",
                        help="device database file (default: '%(default)s')")
    parser.add_argument("-D",
                        "--device",
                        default=None,
                        help="use specified core device address instead of "
                        "reading device database")

    tools = parser.add_subparsers(dest="tool")
    tools.required = True

    # logging
    t_log = tools.add_parser("log", help="read logs and change log levels")

    subparsers = t_log.add_subparsers(dest="action")

    p_clear = subparsers.add_parser("clear", help="clear log buffer")

    p_set_level = subparsers.add_parser(
        "set_level", help="set minimum level for messages to be logged")
    p_set_level.add_argument(
        "level",
        metavar="LEVEL",
        type=str,
        help="log level (one of: OFF ERROR WARN INFO DEBUG TRACE)")

    p_set_uart_level = subparsers.add_parser(
        "set_uart_level",
        help="set minimum level for messages to be logged "
        "to UART")
    p_set_uart_level.add_argument(
        "level",
        metavar="LEVEL",
        type=str,
        help="log level (one of: OFF ERROR WARN INFO DEBUG TRACE)")

    # configuration
    t_config = tools.add_parser(
        "config", help="read and change core device configuration")

    subparsers = t_config.add_subparsers(dest="action")
    subparsers.required = True

    p_read = subparsers.add_parser("read",
                                   help="read key from core device config")
    p_read.add_argument("key",
                        metavar="KEY",
                        type=str,
                        help="key to be read from core device config")

    p_write = subparsers.add_parser("write",
                                    help="write key-value records to core "
                                    "device config")
    p_write.add_argument("-s",
                         "--string",
                         nargs=2,
                         action="append",
                         default=[],
                         metavar=("KEY", "STRING"),
                         type=str,
                         help="key-value records to be written to core device "
                         "config")
    p_write.add_argument("-f",
                         "--file",
                         nargs=2,
                         action="append",
                         type=str,
                         default=[],
                         metavar=("KEY", "FILENAME"),
                         help="key and file whose content to be written to "
                         "core device config")

    p_remove = subparsers.add_parser("remove",
                                     help="remove key from core device config")
    p_remove.add_argument("key",
                          metavar="KEY",
                          nargs=argparse.REMAINDER,
                          default=[],
                          type=str,
                          help="key to be removed from core device config")

    subparsers.add_parser("erase", help="fully erase core device config")

    # booting
    t_boot = tools.add_parser("reboot",
                              help="reboot the currently running firmware")

    t_hotswap = tools.add_parser("hotswap",
                                 help="load the specified firmware in RAM")

    t_hotswap.add_argument("image",
                           metavar="IMAGE",
                           type=argparse.FileType("rb"),
                           help="runtime image to be executed")

    # profiling
    t_profile = tools.add_parser("profile",
                                 help="account for communications CPU time")

    subparsers = t_profile.add_subparsers(dest="action")
    subparsers.required = True

    p_start = subparsers.add_parser("start", help="start profiling")
    p_start.add_argument("--interval",
                         metavar="MICROS",
                         type=int,
                         default=2000,
                         help="sampling interval, in microseconds")
    p_start.add_argument("--hits-size",
                         metavar="ENTRIES",
                         type=int,
                         default=8192,
                         help="hit buffer size")
    p_start.add_argument("--edges-size",
                         metavar="ENTRIES",
                         type=int,
                         default=8192,
                         help="edge buffer size")

    p_stop = subparsers.add_parser("stop", help="stop profiling")

    p_save = subparsers.add_parser("save", help="save profile")
    p_save.add_argument("output",
                        metavar="OUTPUT",
                        type=argparse.FileType("w"),
                        help="file to save profile to, in Callgrind format")
    p_save.add_argument("firmware",
                        metavar="FIRMWARE",
                        type=str,
                        help="path to firmware ELF file")
    p_save.add_argument("--no-compression",
                        dest="compression",
                        default=True,
                        action="store_false",
                        help="disable profile compression")
    p_save.add_argument("--no-demangle",
                        dest="demangle",
                        default=True,
                        action="store_false",
                        help="disable symbol demangling")

    # misc debug
    t_debug = tools.add_parser("debug", help="specialized debug functions")

    subparsers = t_debug.add_subparsers(dest="action")
    subparsers.required = True

    p_allocator = subparsers.add_parser("allocator", help="show heap layout")

    return parser
Пример #21
0
def get_argparser():
    parser = argparse.ArgumentParser(description="ARTIQ CLI client")
    parser.add_argument("-s",
                        "--server",
                        default="::1",
                        help="hostname or IP of the master to connect to")
    parser.add_argument("--port",
                        default=None,
                        type=int,
                        help="TCP port to use to connect to the master")

    subparsers = parser.add_subparsers(dest="action")
    subparsers.required = True

    parser_add = subparsers.add_parser("submit", help="submit an experiment")
    parser_add.add_argument("-p",
                            "--pipeline",
                            default="main",
                            type=str,
                            help="pipeline to run the experiment in "
                            "(default: %(default)s)")
    parser_add.add_argument("-P",
                            "--priority",
                            default=0,
                            type=int,
                            help="priority (higher value means sooner "
                            "scheduling, default: %(default)s)")
    parser_add.add_argument("-t",
                            "--timed",
                            default=None,
                            type=str,
                            help="set a due date for the experiment")
    parser_add.add_argument("-f",
                            "--flush",
                            default=False,
                            action="store_true",
                            help="flush the pipeline before preparing "
                            "the experiment")
    parser_add.add_argument("-R",
                            "--repository",
                            default=False,
                            action="store_true",
                            help="use the experiment repository")
    parser_add.add_argument("-r",
                            "--revision",
                            default=None,
                            help="use a specific repository revision "
                            "(defaults to head, ignored without -R)")
    parser_add.add_argument("-c",
                            "--class-name",
                            default=None,
                            help="name of the class to run")
    add_common_args(parser)
    parser_add.add_argument("file",
                            metavar="FILE",
                            help="file containing the experiment to run")
    parser_add.add_argument("arguments",
                            metavar="ARGUMENTS",
                            nargs="*",
                            help="run arguments")

    parser_delete = subparsers.add_parser("delete",
                                          help="delete an experiment "
                                          "from the schedule")
    parser_delete.add_argument("-g",
                               action="store_true",
                               help="request graceful termination")
    parser_delete.add_argument("rid",
                               metavar="RID",
                               type=int,
                               help="run identifier (RID)")

    parser_set_dataset = subparsers.add_parser("set-dataset",
                                               help="add or modify a dataset")
    parser_set_dataset.add_argument("name",
                                    metavar="NAME",
                                    help="name of the dataset")
    parser_set_dataset.add_argument("value",
                                    metavar="VALUE",
                                    help="value in PYON format")

    persist_group = parser_set_dataset.add_mutually_exclusive_group()
    persist_group.add_argument("-p",
                               "--persist",
                               action="store_true",
                               help="make the dataset persistent")
    persist_group.add_argument("-n",
                               "--no-persist",
                               action="store_true",
                               help="make the dataset non-persistent")

    parser_del_dataset = subparsers.add_parser("del-dataset",
                                               help="delete a dataset")
    parser_del_dataset.add_argument("name", help="name of the dataset")

    parser_show = subparsers.add_parser(
        "show", help="show schedule, log, devices or datasets")
    parser_show.add_argument(
        "what",
        metavar="WHAT",
        choices=["schedule", "log", "ccb", "devices", "datasets"],
        help="select object to show: %(choices)s")

    subparsers.add_parser("scan-devices",
                          help="trigger a device database (re)scan")

    parser_scan_repos = subparsers.add_parser(
        "scan-repository", help="trigger a repository (re)scan")
    parser_scan_repos.add_argument("--async",
                                   action="store_true",
                                   help="trigger scan and return immediately")
    parser_scan_repos.add_argument("revision",
                                   metavar="REVISION",
                                   default=None,
                                   nargs="?",
                                   help="use a specific repository revision "
                                   "(defaults to head)")

    parser_ls = subparsers.add_parser("ls",
                                      help="list a directory on the master")
    parser_ls.add_argument("directory", default="", nargs="?")

    return parser