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

Unified Diff: metrics_client.cc

Issue 3571009: metrics: Add guest mode detection to metrics library and client (Closed) Base URL: http://git.chromium.org/git/metrics.git
Patch Set: Fix metrics_client semantics bug Created 10 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | metrics_daemon.cc » ('j') | metrics_library.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
+ }
+}
« no previous file with comments | « no previous file | metrics_daemon.cc » ('j') | metrics_library.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698