Make help message generation robust.
This commit is contained in:
parent
de30d7a4af
commit
854fba049d
142
code/iottb-project/docs/help_messages.md
Normal file
142
code/iottb-project/docs/help_messages.md
Normal file
@ -0,0 +1,142 @@
|
||||
Main Command: iottb
|
||||
Testbed [I]
|
||||
Usage: [OPTIONS] COMMAND [ARGS]...
|
||||
|
||||
Options:
|
||||
-v, --verbosity Set verbosity [0<=x<=3]
|
||||
-d, --debug Enable debug mode
|
||||
--dry-run
|
||||
--cfg-file PATH Path to iottb config file
|
||||
--help Show this message and exit.
|
||||
|
||||
Commands:
|
||||
add-device Add a device to a database
|
||||
init-db
|
||||
rm-cfg Removes the cfg file from the filesystem.
|
||||
rm-dbs Removes ALL(!) databases from the filesystem if...
|
||||
set-key-in-table-to Edit config or metadata files.
|
||||
show-all Show everything: configuration, databases, and...
|
||||
show-cfg Show the current configuration context
|
||||
sniff Sniff packets with tcpdump
|
||||
|
||||
|
||||
Command: init-db
|
||||
Usage: [OPTIONS]
|
||||
|
||||
Options:
|
||||
-d, --dest PATH Location to put (new) iottb database
|
||||
-n, --name TEXT Name of new database.
|
||||
--update-default / --no-update-default
|
||||
If new db should be set as the new default
|
||||
--help Show this message and exit.
|
||||
|
||||
|
||||
Command: rm-cfg
|
||||
Usage: [OPTIONS]
|
||||
|
||||
Removes the cfg file from the filesystem.
|
||||
|
||||
This is mostly a utility during development. Once non-standard database
|
||||
locations are implemented, deleting this would lead to iottb not being able
|
||||
to find them anymore.
|
||||
|
||||
Options:
|
||||
--yes Confirm the action without prompting.
|
||||
--help Show this message and exit.
|
||||
|
||||
|
||||
Command: set-key-in-table-to
|
||||
Usage: [OPTIONS]
|
||||
|
||||
Edit config or metadata files. TODO: Implement
|
||||
|
||||
Options:
|
||||
--file TEXT
|
||||
--table TEXT
|
||||
--key TEXT
|
||||
--value TEXT
|
||||
--help Show this message and exit.
|
||||
|
||||
|
||||
Command: rm-dbs
|
||||
Usage: [OPTIONS]
|
||||
|
||||
Removes ALL(!) databases from the filesystem if they're empty.
|
||||
|
||||
Development utility currently unfit for use.
|
||||
|
||||
Options:
|
||||
--yes Confirm the action without prompting.
|
||||
--help Show this message and exit.
|
||||
|
||||
|
||||
Command: add-device
|
||||
Usage: [OPTIONS]
|
||||
|
||||
Add a device to a database
|
||||
|
||||
Options:
|
||||
--dev, --device-name TEXT The name of the device to be added. If this
|
||||
string contains spaces or other special
|
||||
characters normalization is
|
||||
performed to derive a canonical name [required]
|
||||
--db, --database DIRECTORY Database in which to add this device. If not
|
||||
specified use default from config. [env var:
|
||||
IOTTB_DB]
|
||||
--guided Add device interactively [env var:
|
||||
IOTTB_GUIDED_ADD]
|
||||
--help Show this message and exit.
|
||||
|
||||
|
||||
Command: show-cfg
|
||||
Usage: [OPTIONS]
|
||||
|
||||
Show the current configuration context
|
||||
|
||||
Options:
|
||||
--cfg-file PATH Path to the config file
|
||||
-pp Pretty Print
|
||||
--help Show this message and exit.
|
||||
|
||||
|
||||
Command: sniff
|
||||
Usage: [OPTIONS] [TCPDUMP-ARGS] [DEVICE]
|
||||
|
||||
Sniff packets with tcpdump
|
||||
|
||||
Options:
|
||||
Testbed sources:
|
||||
--db, --database TEXT Database of device. Only needed if not current
|
||||
default. [env var: IOTTB_DB]
|
||||
--app TEXT Companion app being used during capture
|
||||
Runtime behaviour:
|
||||
--unsafe Disable checks for otherwise required options.
|
||||
[env var: IOTTB_UNSAFE]
|
||||
--guided [env var: IOTTB_GUIDED]
|
||||
--pre PATH Script to be executed before main commandis
|
||||
started.
|
||||
Tcpdump options:
|
||||
-i, --interface TEXT Network interface to capture on.If not specified
|
||||
tcpdump tries to find and appropriate one. [env
|
||||
var: IOTTB_CAPTURE_INTERFACE]
|
||||
-a, --address TEXT IP or MAC address to filter packets by. [env var:
|
||||
IOTTB_CAPTURE_ADDRESS]
|
||||
-I, --monitor-mode Put interface into monitor mode.
|
||||
--ff TEXT tcpdump filter as string or file path. [env var:
|
||||
IOTTB_CAPTURE_FILTER]
|
||||
-#, --print-pacno Print packet number at beginning of line. True by
|
||||
default.
|
||||
-e, --print-ll Print link layer headers. True by default.
|
||||
-c, --count INTEGER Number of packets to capture.
|
||||
--help Show this message and exit.
|
||||
|
||||
|
||||
Command: show-all
|
||||
Usage: [OPTIONS]
|
||||
|
||||
Show everything: configuration, databases, and device metadata
|
||||
|
||||
Options:
|
||||
--help Show this message and exit.
|
||||
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
from pathlib import Path
|
||||
|
||||
from iottb import definitions
|
||||
import logging
|
||||
from iottb.utils.user_interaction import tb_echo
|
||||
@ -9,3 +11,6 @@ log_dir = definitions.LOGDIR
|
||||
# Ensure logs dir exists before new handlers are registered in main.py
|
||||
if not log_dir.is_dir():
|
||||
log_dir.mkdir()
|
||||
|
||||
DOCS_FOLDER = Path.cwd() / 'docs'
|
||||
|
||||
|
||||
@ -46,6 +46,14 @@ def validate_sniff(ctx, param, value):
|
||||
return value
|
||||
|
||||
|
||||
def run_pre(pre):
|
||||
pass
|
||||
|
||||
|
||||
def run_post(post):
|
||||
pass
|
||||
|
||||
|
||||
@click.command('sniff', help='Sniff packets with tcpdump')
|
||||
@optgroup.group('Testbed sources')
|
||||
@optgroup.option('--db', '--database', type=str, envvar='IOTTB_DB', show_envvar=True,
|
||||
@ -79,10 +87,13 @@ def validate_sniff(ctx, param, value):
|
||||
@click.argument('device', required=False)
|
||||
@click.pass_context
|
||||
def sniff(ctx, device, interface, print_pacno, ff, count, monitor_mode, print_ll, address, db, unsafe, guided,
|
||||
app, tcpdump_args, **params):
|
||||
app, tcpdump_args, pre, post, **params):
|
||||
""" Sniff packets from a device """
|
||||
logger.info('sniff command invoked')
|
||||
|
||||
# Step 0: run pre script:
|
||||
if pre:
|
||||
click.echo(f'Running pre command {pre}')
|
||||
run_pre(pre)
|
||||
# Step1: Load Config
|
||||
config = ctx.obj['CONFIG']
|
||||
logger.debug(f'Config loaded: {config}')
|
||||
@ -325,3 +336,6 @@ def sniff(ctx, device, interface, print_pacno, ff, count, monitor_mode, print_ll
|
||||
json.dump(metadata, f, indent=4)
|
||||
|
||||
click.echo(f'END SNIFF SUBCOMMAND')
|
||||
if post:
|
||||
click.echo(f'Running post command {post}')
|
||||
run_post(post)
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
from pathlib import Path
|
||||
|
||||
import click
|
||||
from io import StringIO
|
||||
import sys
|
||||
|
||||
from iottb import DOCS_FOLDER
|
||||
# Import your CLI app here
|
||||
from iottb.main import cli
|
||||
|
||||
@ -28,7 +30,7 @@ def get_help_text(command):
|
||||
|
||||
def write_help_to_file(cli, filename):
|
||||
"""Write help messages of all commands and subcommands to a file."""
|
||||
with open(filename, 'w') as f:
|
||||
with open(filename, 'w+') as f:
|
||||
# main
|
||||
f.write(f"Main Command: iottb\n")
|
||||
f.write(get_help_text(cli))
|
||||
@ -49,4 +51,9 @@ def write_help_to_file(cli, filename):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
write_help_to_file(cli, "help_messages.md")
|
||||
from iottb import DOCS_FOLDER
|
||||
print('Must be in project root for this to work properly!')
|
||||
print(f'CWD is {str(Path.cwd())}')
|
||||
DOCS_FOLDER.mkdir(exist_ok=True)
|
||||
write_help_to_file(cli, str(DOCS_FOLDER / "help_messages.md"))
|
||||
print(f'Wrote help_messages.md to {str(DOCS_FOLDER / "help_messages.md")}')
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user