You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

67 lines
2.6 KiB

  1. from nilmdb.utils.printf import *
  2. import nilmdb.utils.time
  3. import fnmatch
  4. import argparse
  5. from argparse import ArgumentDefaultsHelpFormatter as def_form
  6. def setup(self, sub):
  7. cmd = sub.add_parser("intervals", help="List intervals",
  8. formatter_class = def_form,
  9. description="""
  10. List intervals in a stream, similar to
  11. 'list --detail path'.
  12. If '--diff diffpath' is provided, only
  13. interval ranges that are present in 'path'
  14. and not present in 'diffpath' are printed.
  15. """)
  16. cmd.set_defaults(verify = cmd_intervals_verify,
  17. handler = cmd_intervals)
  18. group = cmd.add_argument_group("Stream selection")
  19. group.add_argument("path", metavar="PATH",
  20. help="List intervals for this path",
  21. ).completer = self.complete.path
  22. group.add_argument("-d", "--diff", metavar="PATH",
  23. help="Subtract intervals from this path",
  24. ).completer = self.complete.path
  25. group = cmd.add_argument_group("Interval details")
  26. group.add_argument("-s", "--start",
  27. metavar="TIME", type=self.arg_time,
  28. help="Starting timestamp for intervals "
  29. "(free-form, inclusive)",
  30. ).completer = self.complete.time
  31. group.add_argument("-e", "--end",
  32. metavar="TIME", type=self.arg_time,
  33. help="Ending timestamp for intervals "
  34. "(free-form, noninclusive)",
  35. ).completer = self.complete.time
  36. group = cmd.add_argument_group("Misc options")
  37. group.add_argument("-T", "--timestamp-raw", action="store_true",
  38. help="Show raw timestamps when printing times")
  39. return cmd
  40. def cmd_intervals_verify(self):
  41. if self.args.start is not None and self.args.end is not None:
  42. if self.args.start >= self.args.end:
  43. self.parser.error("start must precede end")
  44. def cmd_intervals(self):
  45. """List intervals in a stream"""
  46. if self.args.timestamp_raw:
  47. time_string = nilmdb.utils.time.float_time_to_string
  48. else:
  49. time_string = nilmdb.utils.time.format_time
  50. try:
  51. for (start, end) in self.client.stream_intervals(
  52. self.args.path, self.args.start, self.args.end, self.args.diff):
  53. printf("[ %s -> %s ]\n", time_string(start), time_string(end))
  54. except nilmdb.client.ClientError as e:
  55. self.die("error listing intervals: %s", str(e))