| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <cstdio> | 5 #include <cstdio> |
| 6 #include <cstdlib> | 6 #include <cstdlib> |
| 7 | 7 |
| 8 #include "metrics_library.h" | 8 #include "metrics_library.h" |
| 9 | 9 |
| 10 void ShowUsage() { | 10 void ShowUsage() { |
| 11 fprintf(stderr, | 11 fprintf(stderr, |
| 12 "Usage: metrics_client [-ab] [-t] name sample min max nbuckets\n" | 12 "Usage: metrics_client [-ab] [-t] name sample min max nbuckets\n" |
| 13 " metrics_client [-ab] -e name sample max\n" | 13 " metrics_client [-ab] -e name sample max\n" |
| 14 " metrics_client -u action\n" |
| 14 " metrics_client [-cg]\n" | 15 " metrics_client [-cg]\n" |
| 15 "\n" | 16 "\n" |
| 16 " default: send metric with integer values to Chrome only\n" | 17 " default: send metric with integer values to Chrome only\n" |
| 17 " |min| > 0, |min| <= sample < |max|\n" | 18 " |min| > 0, |min| <= sample < |max|\n" |
| 18 " -a: send metric (name/sample) to Autotest only\n" | 19 " -a: send metric (name/sample) to Autotest only\n" |
| 19 " -b: send metric to both Chrome and Autotest\n" | 20 " -b: send metric to both Chrome and Autotest\n" |
| 20 " -c: return exit status 0 if user consents to stats, 1 otherwise\n" | 21 " -c: return exit status 0 if user consents to stats, 1 otherwise\n" |
| 21 " -e: send linear/enumeration histogram data\n" | 22 " -e: send linear/enumeration histogram data\n" |
| 22 " -g: return exit status 0 if machine in guest mode, 1 otherwise\n" | 23 " -g: return exit status 0 if machine in guest mode, 1 otherwise\n" |
| 23 " -t: convert sample from double seconds to int milliseconds\n"); | 24 " -t: convert sample from double seconds to int milliseconds\n" |
| 25 " -u: send a user action to Chrome\n"); |
| 24 exit(1); | 26 exit(1); |
| 25 } | 27 } |
| 26 | 28 |
| 27 static int SendStats(char* argv[], | 29 static int SendStats(char* argv[], |
| 28 int name_index, | 30 int name_index, |
| 29 bool send_enum, | 31 bool send_enum, |
| 30 bool secs_to_msecs, | 32 bool secs_to_msecs, |
| 31 bool send_to_autotest, | 33 bool send_to_autotest, |
| 32 bool send_to_chrome) { | 34 bool send_to_chrome) { |
| 33 const char* name = argv[name_index]; | 35 const char* name = argv[name_index]; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 52 } else { | 54 } else { |
| 53 int min = atoi(argv[name_index + 2]); | 55 int min = atoi(argv[name_index + 2]); |
| 54 int max = atoi(argv[name_index + 3]); | 56 int max = atoi(argv[name_index + 3]); |
| 55 int nbuckets = atoi(argv[name_index + 4]); | 57 int nbuckets = atoi(argv[name_index + 4]); |
| 56 metrics_lib.SendToUMA(name, sample, min, max, nbuckets); | 58 metrics_lib.SendToUMA(name, sample, min, max, nbuckets); |
| 57 } | 59 } |
| 58 } | 60 } |
| 59 return 0; | 61 return 0; |
| 60 } | 62 } |
| 61 | 63 |
| 64 static int SendUserAction(char* argv[], int action_index) { |
| 65 const char* action = argv[action_index]; |
| 66 MetricsLibrary metrics_lib; |
| 67 metrics_lib.Init(); |
| 68 metrics_lib.SendUserActionToUMA(action); |
| 69 return 0; |
| 70 } |
| 71 |
| 62 static int HasConsent() { | 72 static int HasConsent() { |
| 63 MetricsLibrary metrics_lib; | 73 MetricsLibrary metrics_lib; |
| 64 metrics_lib.Init(); | 74 metrics_lib.Init(); |
| 65 return metrics_lib.AreMetricsEnabled() ? 0 : 1; | 75 return metrics_lib.AreMetricsEnabled() ? 0 : 1; |
| 66 } | 76 } |
| 67 | 77 |
| 68 static int IsGuestMode() { | 78 static int IsGuestMode() { |
| 69 MetricsLibrary metrics_lib; | 79 MetricsLibrary metrics_lib; |
| 70 metrics_lib.Init(); | 80 metrics_lib.Init(); |
| 71 return metrics_lib.IsGuestMode() ? 0 : 1; | 81 return metrics_lib.IsGuestMode() ? 0 : 1; |
| 72 } | 82 } |
| 73 | 83 |
| 74 int main(int argc, char** argv) { | 84 int main(int argc, char** argv) { |
| 75 enum Mode { | 85 enum Mode { |
| 76 kModeSendStats, | 86 kModeSendStats, |
| 87 kModeSendUserAction, |
| 77 kModeHasConsent, | 88 kModeHasConsent, |
| 78 kModeIsGuestMode | 89 kModeIsGuestMode |
| 79 } mode = kModeSendStats; | 90 } mode = kModeSendStats; |
| 80 bool send_to_autotest = false; | 91 bool send_to_autotest = false; |
| 81 bool send_to_chrome = true; | 92 bool send_to_chrome = true; |
| 82 bool send_enum = false; | 93 bool send_enum = false; |
| 83 bool secs_to_msecs = false; | 94 bool secs_to_msecs = false; |
| 84 bool print_usage = false; | 95 bool print_usage = false; |
| 85 | 96 |
| 86 // Parse arguments | 97 // Parse arguments |
| 87 int flag; | 98 int flag; |
| 88 while ((flag = getopt(argc, argv, "abcegt")) != -1) { | 99 while ((flag = getopt(argc, argv, "abcegtu")) != -1) { |
| 89 switch (flag) { | 100 switch (flag) { |
| 90 case 'a': | 101 case 'a': |
| 91 mode = kModeSendStats; | 102 mode = kModeSendStats; |
| 92 send_to_autotest = true; | 103 send_to_autotest = true; |
| 93 send_to_chrome = false; | 104 send_to_chrome = false; |
| 94 break; | 105 break; |
| 95 case 'b': | 106 case 'b': |
| 96 mode = kModeSendStats; | 107 mode = kModeSendStats; |
| 97 send_to_chrome = true; | 108 send_to_chrome = true; |
| 98 send_to_autotest = true; | 109 send_to_autotest = true; |
| 99 break; | 110 break; |
| 100 case 'c': | 111 case 'c': |
| 101 mode = kModeHasConsent; | 112 mode = kModeHasConsent; |
| 102 break; | 113 break; |
| 103 case 'e': | 114 case 'e': |
| 104 send_enum = true; | 115 send_enum = true; |
| 105 break; | 116 break; |
| 106 case 'g': | 117 case 'g': |
| 107 mode = kModeIsGuestMode; | 118 mode = kModeIsGuestMode; |
| 108 break; | 119 break; |
| 109 case 't': | 120 case 't': |
| 110 secs_to_msecs = true; | 121 secs_to_msecs = true; |
| 111 break; | 122 break; |
| 123 case 'u': |
| 124 mode = kModeSendUserAction; |
| 125 break; |
| 112 default: | 126 default: |
| 113 print_usage = true; | 127 print_usage = true; |
| 114 break; | 128 break; |
| 115 } | 129 } |
| 116 } | 130 } |
| 117 int name_index = optind; | 131 int arg_index = optind; |
| 118 | 132 |
| 119 int expected_args = 0; | 133 int expected_args = 0; |
| 120 if (mode == kModeSendStats) | 134 if (mode == kModeSendStats) |
| 121 expected_args = send_enum ? 3 : 5; | 135 expected_args = send_enum ? 3 : 5; |
| 136 else if (mode == kModeSendUserAction) |
| 137 expected_args = 1; |
| 122 | 138 |
| 123 if ((name_index + expected_args) != argc) { | 139 if ((arg_index + expected_args) != argc) { |
| 124 ShowUsage(); | 140 ShowUsage(); |
| 125 } | 141 } |
| 126 | 142 |
| 127 switch(mode) { | 143 switch(mode) { |
| 128 case kModeSendStats: | 144 case kModeSendStats: |
| 129 if (send_enum && secs_to_msecs) { | 145 if (send_enum && secs_to_msecs) { |
| 130 ShowUsage(); | 146 ShowUsage(); |
| 131 } | 147 } |
| 132 return SendStats(argv, | 148 return SendStats(argv, |
| 133 name_index, | 149 arg_index, |
| 134 send_enum, | 150 send_enum, |
| 135 secs_to_msecs, | 151 secs_to_msecs, |
| 136 send_to_autotest, | 152 send_to_autotest, |
| 137 send_to_chrome); | 153 send_to_chrome); |
| 154 case kModeSendUserAction: |
| 155 return SendUserAction(argv, arg_index); |
| 138 case kModeHasConsent: | 156 case kModeHasConsent: |
| 139 return HasConsent(); | 157 return HasConsent(); |
| 140 case kModeIsGuestMode: | 158 case kModeIsGuestMode: |
| 141 return IsGuestMode(); | 159 return IsGuestMode(); |
| 142 default: | 160 default: |
| 143 ShowUsage(); | 161 ShowUsage(); |
| 144 return 0; | 162 return 0; |
| 145 } | 163 } |
| 146 } | 164 } |
| OLD | NEW |