metrics: Add a mechanism to notify users when we want to collect additional metrics.

When we change the version number in metrics_utils:

If the user is not a Googler, or has opted out explicitly, nothing happens
and we still don't collect metrics.

If we're collecting metrics from the user, we stop collecting metrics
and display a notice telling them what has changed.
That notice will be displayed ten times, after which we will
resume collecting metrics. A notice telling them we're collecting metrics
will still be displayed.

Bug: None
Change-Id: If1cc12b2fc06f0d6237714c4f182367b1afdf9fb
Reviewed-on: https://chromium-review.googlesource.com/c/1285395
Commit-Queue: Edward Lesmes <ehmaldonado@chromium.org>
Reviewed-by: Andrii Shyshkalov <tandrii@chromium.org>
diff --git a/metrics_utils.py b/metrics_utils.py
index 936c692..9bdae9e 100644
--- a/metrics_utils.py
+++ b/metrics_utils.py
@@ -12,8 +12,16 @@
 from third_party import colorama
 
 
+# Current version of metrics recording.
+# When we add new metrics, the version number will be increased, we display the
+# user what has changed, and ask the user to agree again.
+CURRENT_VERSION = 0
+
 APP_URL = 'https://cit-cli-metrics.appspot.com'
 
+EMPTY_LINE = (
+  '*                                                   *'
+)
 NOTICE_COUNTDOWN_HEADER = (
   '*****************************************************\n'
   '*  METRICS COLLECTION WILL START IN %2d EXECUTIONS   *'
@@ -22,14 +30,23 @@
   '*****************************************************\n'
   '*      METRICS COLLECTION IS TAKING PLACE           *'
 )
+NOTICE_VERSION_CHANGE_HEADER = (
+  '*****************************************************\n'
+  '*       WE ARE COLLECTING ADDITIONAL METRICS        *'
+)
 NOTICE_FOOTER = (
-  '*                                                   *\n'
   '* For more information, and for how to disable this *\n'
   '* message, please see metrics.README.md in your     *\n'
   '* depot_tools checkout.                             *\n'
   '*****************************************************\n'
 )
 
+CHANGE_NOTICE = {
+  # No changes for version 0
+  0: '',
+}
+
+
 KNOWN_PROJECT_URLS = {
   'https://chrome-internal.googlesource.com/chrome/ios_internal',
   'https://chrome-internal.googlesource.com/infra/infra_internal',
@@ -105,9 +122,21 @@
 def print_notice(countdown):
   """Print a notice to let the user know the status of metrics collection."""
   colorama.init()
-  print(colorama.Fore.RED + '\033[1m', file=sys.stderr)
+  print(colorama.Fore.RED + '\033[1m', file=sys.stderr, end='')
   if countdown:
     print(NOTICE_COUNTDOWN_HEADER % countdown, file=sys.stderr)
   else:
     print(NOTICE_COLLECTION_HEADER, file=sys.stderr)
+  print(EMPTY_LINE, file=sys.stderr)
   print(NOTICE_FOOTER + colorama.Style.RESET_ALL, file=sys.stderr)
+
+
+def print_version_change(config_version):
+  """Print a notice to let the user know we are collecting more metrics."""
+  colorama.init()
+  print(colorama.Fore.RED + '\033[1m', file=sys.stderr, end='')
+  print(NOTICE_VERSION_CHANGE_HEADER, file=sys.stderr)
+  print(EMPTY_LINE, file=sys.stderr)
+  for version in range(config_version + 1, CURRENT_VERSION + 1):
+    print(CHANGE_NOTICE[version], file=sys.stderr)
+    print(EMPTY_LINE, file=sys.stderr)