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.
 
 
 

63 lines
2.4 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. group.add_argument("-d", "--diff", metavar="PATH",
  22. help="Subtract intervals from this path")
  23. group = cmd.add_argument_group("Interval details")
  24. group.add_argument("-s", "--start",
  25. metavar="TIME", type=self.arg_time,
  26. help="Starting timestamp for intervals "
  27. "(free-form, inclusive)")
  28. group.add_argument("-e", "--end",
  29. metavar="TIME", type=self.arg_time,
  30. help="Ending timestamp for intervals "
  31. "(free-form, noninclusive)")
  32. group = cmd.add_argument_group("Misc options")
  33. group.add_argument("-T", "--timestamp-raw", action="store_true",
  34. help="Show raw timestamps when printing times")
  35. return cmd
  36. def cmd_intervals_verify(self):
  37. if self.args.start is not None and self.args.end is not None:
  38. if self.args.start >= self.args.end:
  39. self.parser.error("start must precede end")
  40. def cmd_intervals(self):
  41. """List intervals in a stream"""
  42. if self.args.timestamp_raw:
  43. time_string = nilmdb.utils.time.float_time_to_string
  44. else:
  45. time_string = nilmdb.utils.time.format_time
  46. try:
  47. for (start, end) in self.client.stream_intervals(
  48. self.args.path, self.args.start, self.args.end, self.args.diff):
  49. printf("[ %s -> %s ]\n", time_string(start), time_string(end))
  50. except nilmdb.client.ClientError as e:
  51. self.die("error listing intervals: %s", str(e))