22import logging
33import sys
44
5- from dateutil .parser import parse , ParserError
65from saluki .consume import consume
76from saluki .listen import listen
87from saluki .play import play
98from saluki .sniff import sniff
10- from saluki .utils import parse_kafka_uri
9+ from saluki .utils import parse_kafka_uri , dateutil_parsable_or_unix_timestamp
1110
1211logger = logging .getLogger ("saluki" )
1312logging .basicConfig (level = logging .INFO )
1817_SNIFF = "sniff"
1918
2019
21- def _dateutil_parsable_or_unix_timestamp (inp : str ) -> float :
22- try :
23- try :
24- return parse (inp ).timestamp ()
25- except ParserError :
26- return float (inp )
27- except ValueError :
28- raise argparse .ArgumentTypeError (f"timestamp { inp } is not parsable by dateutil.parse() and is not a unix timestamp" )
29-
30-
3120def main () -> None :
3221 parser = argparse .ArgumentParser (
3322 prog = "saluki" ,
3423 description = "serialise/de-serialise flatbuffers and consume/produce from/to kafka" ,
3524 )
36- parser .add_argument (
25+ common_options = argparse .ArgumentParser (add_help = False )
26+ common_options .add_argument ("-v" , "--verbose" , help = "show DEBUG logs" , action = 'store_true' )
27+ common_options .add_argument (
3728 "-l" ,
3829 "--log-file" ,
3930 help = "filename to output all data to" ,
@@ -57,8 +48,8 @@ def main() -> None:
5748
5849 sub_parsers = parser .add_subparsers (help = "sub-command help" , required = True , dest = "command" )
5950
60- sniff_parser = sub_parsers .add_parser (_SNIFF , help = "sniff - broker metadata" )
61- sniff_parser .add_argument ("broker" , type = str , help = "broker, optionally suffixed with a topic name" )
51+ sniff_parser = sub_parsers .add_parser (_SNIFF , help = "sniff - broker metadata" , parents = [ common_options ] )
52+ sniff_parser .add_argument ("broker" , type = str , help = "broker, optionally suffixed with a topic name to filter to " )
6253
6354 consumer_parser = argparse .ArgumentParser (add_help = False )
6455 consumer_parser .add_argument (
@@ -70,7 +61,7 @@ def main() -> None:
7061 )
7162
7263 consumer_mode_parser = sub_parsers .add_parser (
73- _CONSUME , help = "consumer mode" , parents = [topic_parser , consumer_parser ]
64+ _CONSUME , help = "consumer mode" , parents = [topic_parser , consumer_parser , common_options ]
7465 )
7566 consumer_mode_parser .add_argument (
7667 "-m" ,
@@ -88,13 +79,13 @@ def main() -> None:
8879 listen_parser = sub_parsers .add_parser ( # noqa: F841
8980 _LISTEN ,
9081 help = "listen mode - listen until KeyboardInterrupt" ,
91- parents = [topic_parser , consumer_parser ],
82+ parents = [topic_parser , consumer_parser , common_options ],
9283 )
9384
9485 play_parser = sub_parsers .add_parser (
9586 _PLAY ,
9687 help = "replay mode - replay data into another topic" ,
97- parents = [],
88+ parents = [common_options ],
9889 )
9990 play_parser .add_argument ("topics" , type = str , nargs = 2 , help = "SRC topic DEST topic" )
10091 g = play_parser .add_mutually_exclusive_group (required = True )
@@ -105,13 +96,16 @@ def main() -> None:
10596 type = int ,
10697 nargs = 2 ,
10798 )
108- g .add_argument ("-t" , "--timestamps" , help = 'timestamps to replay between in ISO8601 or RFC3339 format ie. "2025-11-17 07:00:00" ' , type = _dateutil_parsable_or_unix_timestamp , nargs = 2 )
99+ g .add_argument ("-t" , "--timestamps" , help = 'timestamps to replay between in ISO8601 or RFC3339 format ie. "2025-11-17 07:00:00 or as a unix timestamp " ' , type = dateutil_parsable_or_unix_timestamp , nargs = 2 )
109100
110101 if len (sys .argv ) == 1 :
111102 parser .print_help ()
112103 sys .exit (1 )
113104 args = parser .parse_args ()
114105
106+ if args .verbose :
107+ logger .setLevel (logging .DEBUG )
108+
115109 if args .log_file :
116110 logger .addHandler (logging .FileHandler (args .log_file .name ))
117111
@@ -141,8 +135,10 @@ def main() -> None:
141135 elif args .command == _SNIFF :
142136 try :
143137 broker , topic = parse_kafka_uri (args .broker )
138+ logger .debug (f"Sniffing single topic { topic } on broker { broker } " )
144139 sniff (broker , topic )
145140 except RuntimeError :
141+ logger .debug (f"Sniffing whole broker { args .broker } " )
146142 sniff (args .broker )
147143
148144
0 commit comments