pkg_size: create a simple CLI tool to dump a system size report

pkg_size dumps the sizes of the packages contained within a built root.
It will also push gauge data (package size) per package and per
invocation (total root size) to the build api metrics append-only queue
via append_metrics_log. This data is to be used for build metrics trend
reporting.

BUG=chromium:1000449
TEST=cros_sdk -- '$HOME/trunk/chromite/run_tests'

Cq-Depend: chromium:1834120
Change-Id: I735057f9bcfe4de367a8df888e76a09836e371d1
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1801037
Tested-by: Will Bradley <wbbradley@chromium.org>
Commit-Queue: Will Bradley <wbbradley@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Alex Klein <saklein@chromium.org>
diff --git a/scripts/emit_metric.py b/scripts/emit_metric.py
index 9e58dba..928365c 100644
--- a/scripts/emit_metric.py
+++ b/scripts/emit_metric.py
@@ -14,16 +14,19 @@
 def main(argv):
   """Emit a metric event."""
   parser = commandline.ArgumentParser(description=__doc__)
-  parser.add_argument('op', choices=metrics.VALID_OPS,
+  parser.add_argument('op', choices=sorted(metrics.VALID_OPS),
                       help='Which metric event operator to emit.')
   parser.add_argument('name',
                       help='The name of the metric event as you would like it '
                            'to appear downstream in data stores.')
-  parser.add_argument('key', nargs='?',
-                      help='A unique key for this invocation to ensure that '
-                           'start and stop timers can be matched.')
+  parser.add_argument('arg', nargs='?',
+                      help='An accessory argument dependent upon the "op".')
   opts = parser.parse_args(argv)
 
+  if opts.arg and not metrics.OP_EXPECTS_ARG[opts.op]:
+    # We do not expect to get an |arg| for this |op|.
+    parser.error('Unexpected arg "%s" given for op "%s"' % (opts.arg,
+                                                            opts.op))
+
   timestamp = metrics.current_milli_time()
-  key = opts.key or opts.name
-  metrics.append_metrics_log(timestamp, opts.name, opts.op, key=key)
+  metrics.append_metrics_log(timestamp, opts.name, opts.op, arg=opts.arg)