| Index: metrics_client.cc
 | 
| diff --git a/metrics_client.cc b/metrics_client.cc
 | 
| index e85c4d473b8e2041eddf61868a26e30480c85c8a..ce22e987ed7ded016bd1a499bc6e0cad21b1edca 100644
 | 
| --- a/metrics_client.cc
 | 
| +++ b/metrics_client.cc
 | 
| @@ -7,63 +7,29 @@
 | 
|  
 | 
|  #include "metrics_library.h"
 | 
|  
 | 
| -int main(int argc, char** argv) {
 | 
| -  bool send_to_autotest = false;
 | 
| -  bool send_to_chrome = true;
 | 
| -  bool send_enum = false;
 | 
| -  bool secs_to_msecs = false;
 | 
| -  int name_index = 1;
 | 
| -  bool print_usage = false;
 | 
| -
 | 
| -  if (argc >= 3) {
 | 
| -    // Parse arguments
 | 
| -    int flag;
 | 
| -    while ((flag = getopt(argc, argv, "abet")) != -1) {
 | 
| -      switch (flag) {
 | 
| -        case 'a':
 | 
| -          send_to_autotest = true;
 | 
| -          send_to_chrome = false;
 | 
| -          break;
 | 
| -        case 'b':
 | 
| -          send_to_chrome = true;
 | 
| -          send_to_autotest = true;
 | 
| -          break;
 | 
| -        case 'e':
 | 
| -          send_enum = true;
 | 
| -          break;
 | 
| -        case 't':
 | 
| -          secs_to_msecs = true;
 | 
| -          break;
 | 
| -        default:
 | 
| -          print_usage = true;
 | 
| -          break;
 | 
| -      }
 | 
| -    }
 | 
| -    name_index = optind;
 | 
| -  } else {
 | 
| -    print_usage = true;
 | 
| -  }
 | 
| -
 | 
| -  int num_args = send_enum ? 3 : 5;
 | 
| -  if ((name_index + num_args) != argc ||
 | 
| -      (send_enum && secs_to_msecs)) {
 | 
| -    print_usage = true;
 | 
| -  }
 | 
| -
 | 
| -  if (print_usage) {
 | 
| -    fprintf(stderr,
 | 
| -            "Usage:  metrics_client [-ab] [-t] name sample min max nbuckets\n"
 | 
| -            "        metrics_client [-ab] -e   name sample max\n"
 | 
| -            "\n"
 | 
| -            "  default: send metric with integer values to Chrome only\n"
 | 
| -            "           |min| > 0, |min| <= sample < |max|\n"
 | 
| -            "  -a: send metric (name/sample) to Autotest only\n"
 | 
| -            "  -b: send metric to both Chrome and Autotest\n"
 | 
| -            "  -e: send linear/enumeration histogram data\n"
 | 
| -            "  -t: convert sample from double seconds to int milliseconds\n");
 | 
| -    return 1;
 | 
| -  }
 | 
| +void ShowUsage() {
 | 
| +  fprintf(stderr,
 | 
| +          "Usage:  metrics_client [-ab] [-t] name sample min max nbuckets\n"
 | 
| +          "        metrics_client [-ab] -e   name sample max\n"
 | 
| +          "        metrics_client [-cg]\n"
 | 
| +          "\n"
 | 
| +          "  default: send metric with integer values to Chrome only\n"
 | 
| +          "           |min| > 0, |min| <= sample < |max|\n"
 | 
| +          "  -a: send metric (name/sample) to Autotest only\n"
 | 
| +          "  -b: send metric to both Chrome and Autotest\n"
 | 
| +          "  -c: return exit status 0 if user consents to stats, 1 otherwise\n"
 | 
| +          "  -e: send linear/enumeration histogram data\n"
 | 
| +          "  -g: return exit status 0 if machine in guest mode, 1 otherwise\n"
 | 
| +          "  -t: convert sample from double seconds to int milliseconds\n");
 | 
| +  exit(1);
 | 
| +}
 | 
|  
 | 
| +static int SendStats(char* argv[],
 | 
| +                     int name_index,
 | 
| +                     bool send_enum,
 | 
| +                     bool secs_to_msecs,
 | 
| +                     bool send_to_autotest,
 | 
| +                     bool send_to_chrome) {
 | 
|    const char* name = argv[name_index];
 | 
|    int sample;
 | 
|    if (secs_to_msecs) {
 | 
| @@ -92,3 +58,89 @@ int main(int argc, char** argv) {
 | 
|    }
 | 
|    return 0;
 | 
|  }
 | 
| +
 | 
| +static int HasConsent() {
 | 
| +  MetricsLibrary metrics_lib;
 | 
| +  metrics_lib.Init();
 | 
| +  return metrics_lib.AreMetricsEnabled() ? 0 : 1;
 | 
| +}
 | 
| +
 | 
| +static int IsGuestMode() {
 | 
| +  MetricsLibrary metrics_lib;
 | 
| +  metrics_lib.Init();
 | 
| +  return metrics_lib.IsGuestMode() ? 0 : 1;
 | 
| +}
 | 
| +
 | 
| +int main(int argc, char** argv) {
 | 
| +  enum Mode {
 | 
| +    kModeSendStats,
 | 
| +    kModeHasConsent,
 | 
| +    kModeIsGuestMode
 | 
| +  } mode = kModeSendStats;
 | 
| +  bool send_to_autotest = false;
 | 
| +  bool send_to_chrome = true;
 | 
| +  bool send_enum = false;
 | 
| +  bool secs_to_msecs = false;
 | 
| +  bool print_usage = false;
 | 
| +
 | 
| +  // Parse arguments
 | 
| +  int flag;
 | 
| +  while ((flag = getopt(argc, argv, "abcegt")) != -1) {
 | 
| +    switch (flag) {
 | 
| +      case 'a':
 | 
| +        mode = kModeSendStats;
 | 
| +        send_to_autotest = true;
 | 
| +        send_to_chrome = false;
 | 
| +        break;
 | 
| +      case 'b':
 | 
| +        mode = kModeSendStats;
 | 
| +        send_to_chrome = true;
 | 
| +        send_to_autotest = true;
 | 
| +        break;
 | 
| +      case 'c':
 | 
| +        mode = kModeHasConsent;
 | 
| +        break;
 | 
| +      case 'e':
 | 
| +        send_enum = true;
 | 
| +        break;
 | 
| +      case 'g':
 | 
| +        mode = kModeIsGuestMode;
 | 
| +        break;
 | 
| +      case 't':
 | 
| +        secs_to_msecs = true;
 | 
| +        break;
 | 
| +      default:
 | 
| +        print_usage = true;
 | 
| +        break;
 | 
| +    }
 | 
| +  }
 | 
| +  int name_index = optind;
 | 
| +
 | 
| +  int expected_args = 0;
 | 
| +  if (mode == kModeSendStats)
 | 
| +    expected_args = send_enum ? 3 : 5;
 | 
| +
 | 
| +  if ((name_index + expected_args) != argc) {
 | 
| +    ShowUsage();
 | 
| +  }
 | 
| +
 | 
| +  switch(mode) {
 | 
| +    case kModeSendStats:
 | 
| +      if (send_enum && secs_to_msecs) {
 | 
| +        ShowUsage();
 | 
| +      }
 | 
| +      return SendStats(argv,
 | 
| +                       name_index,
 | 
| +                       send_enum,
 | 
| +                       secs_to_msecs,
 | 
| +                       send_to_autotest,
 | 
| +                       send_to_chrome);
 | 
| +    case kModeHasConsent:
 | 
| +      return HasConsent();
 | 
| +    case kModeIsGuestMode:
 | 
| +      return IsGuestMode();
 | 
| +    default:
 | 
| +      ShowUsage();
 | 
| +      return 0;
 | 
| +  }
 | 
| +}
 | 
| 
 |