from nilmdb.utils.printf import * import nilmdb.utils.time import fnmatch import argparse from argparse import ArgumentDefaultsHelpFormatter as def_form def setup(self, sub): cmd = sub.add_parser("intervals", help="List intervals", formatter_class = def_form, description=""" List intervals in a stream, similar to 'list --detail path'. If '--diff diffpath' is provided, only interval ranges that are present in 'path' and not present in 'diffpath' are printed. """) cmd.set_defaults(verify = cmd_intervals_verify, handler = cmd_intervals) group = cmd.add_argument_group("Stream selection") group.add_argument("path", metavar="PATH", help="List intervals for this path") group.add_argument("-d", "--diff", metavar="PATH", help="Subtract intervals from this path") group = cmd.add_argument_group("Interval details") group.add_argument("-s", "--start", metavar="TIME", type=self.arg_time, help="Starting timestamp for intervals " "(free-form, inclusive)") group.add_argument("-e", "--end", metavar="TIME", type=self.arg_time, help="Ending timestamp for intervals " "(free-form, noninclusive)") group = cmd.add_argument_group("Misc options") group.add_argument("-T", "--timestamp-raw", action="store_true", help="Show raw timestamps when printing times") return cmd def cmd_intervals_verify(self): if self.args.start is not None and self.args.end is not None: if self.args.start >= self.args.end: self.parser.error("start must precede end") def cmd_intervals(self): """List intervals in a stream""" if self.args.timestamp_raw: time_string = nilmdb.utils.time.float_time_to_string else: time_string = nilmdb.utils.time.format_time try: for (start, end) in self.client.stream_intervals( self.args.path, self.args.start, self.args.end, self.args.diff): printf("[ %s -> %s ]\n", time_string(start), time_string(end)) except nilmdb.client.ClientError as e: self.die("error listing intervals: %s", str(e))