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
|
from iottb import definitions
|
||||||
import logging
|
import logging
|
||||||
from iottb.utils.user_interaction import tb_echo
|
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
|
# Ensure logs dir exists before new handlers are registered in main.py
|
||||||
if not log_dir.is_dir():
|
if not log_dir.is_dir():
|
||||||
log_dir.mkdir()
|
log_dir.mkdir()
|
||||||
|
|
||||||
|
DOCS_FOLDER = Path.cwd() / 'docs'
|
||||||
|
|
||||||
|
|||||||
@ -46,6 +46,14 @@ def validate_sniff(ctx, param, value):
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def run_pre(pre):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def run_post(post):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
@click.command('sniff', help='Sniff packets with tcpdump')
|
@click.command('sniff', help='Sniff packets with tcpdump')
|
||||||
@optgroup.group('Testbed sources')
|
@optgroup.group('Testbed sources')
|
||||||
@optgroup.option('--db', '--database', type=str, envvar='IOTTB_DB', show_envvar=True,
|
@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.argument('device', required=False)
|
||||||
@click.pass_context
|
@click.pass_context
|
||||||
def sniff(ctx, device, interface, print_pacno, ff, count, monitor_mode, print_ll, address, db, unsafe, guided,
|
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 """
|
""" Sniff packets from a device """
|
||||||
logger.info('sniff command invoked')
|
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
|
# Step1: Load Config
|
||||||
config = ctx.obj['CONFIG']
|
config = ctx.obj['CONFIG']
|
||||||
logger.debug(f'Config loaded: {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)
|
json.dump(metadata, f, indent=4)
|
||||||
|
|
||||||
click.echo(f'END SNIFF SUBCOMMAND')
|
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
|
import click
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
import sys
|
import sys
|
||||||
|
from iottb import DOCS_FOLDER
|
||||||
# Import your CLI app here
|
# Import your CLI app here
|
||||||
from iottb.main import cli
|
from iottb.main import cli
|
||||||
|
|
||||||
@ -28,7 +30,7 @@ def get_help_text(command):
|
|||||||
|
|
||||||
def write_help_to_file(cli, filename):
|
def write_help_to_file(cli, filename):
|
||||||
"""Write help messages of all commands and subcommands to a file."""
|
"""Write help messages of all commands and subcommands to a file."""
|
||||||
with open(filename, 'w') as f:
|
with open(filename, 'w+') as f:
|
||||||
# main
|
# main
|
||||||
f.write(f"Main Command: iottb\n")
|
f.write(f"Main Command: iottb\n")
|
||||||
f.write(get_help_text(cli))
|
f.write(get_help_text(cli))
|
||||||
@ -49,4 +51,9 @@ def write_help_to_file(cli, filename):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
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