Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(360)

Side by Side Diff: metrics_client.cc

Issue 6094010: Add support for user actions to the metrics library and the metrics clients. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/metrics.git@master
Patch Set: Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « c_metrics_library.cc ('k') | metrics_library.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 }
OLDNEW
« no previous file with comments | « c_metrics_library.cc ('k') | metrics_library.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698