blob: e85c4d473b8e2041eddf61868a26e30480c85c8a [file] [log] [blame]
Darin Petkov65b01462010-04-14 13:32:20 -07001// 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
3// found in the LICENSE file.
4
Darin Petkov4fcb2ac2010-04-15 16:40:23 -07005#include <cstdio>
Darin Petkov65b01462010-04-14 13:32:20 -07006#include <cstdlib>
Darin Petkov65b01462010-04-14 13:32:20 -07007
8#include "metrics_library.h"
9
Darin Petkov65b01462010-04-14 13:32:20 -070010int main(int argc, char** argv) {
11 bool send_to_autotest = false;
12 bool send_to_chrome = true;
Darin Petkov5b7dce12010-04-21 15:45:10 -070013 bool send_enum = false;
Darin Petkov4fcb2ac2010-04-15 16:40:23 -070014 bool secs_to_msecs = false;
Darin Petkovc2526a12010-04-21 14:24:04 -070015 int name_index = 1;
Darin Petkov65b01462010-04-14 13:32:20 -070016 bool print_usage = false;
17
18 if (argc >= 3) {
19 // Parse arguments
20 int flag;
Darin Petkov5b7dce12010-04-21 15:45:10 -070021 while ((flag = getopt(argc, argv, "abet")) != -1) {
Darin Petkov65b01462010-04-14 13:32:20 -070022 switch (flag) {
23 case 'a':
24 send_to_autotest = true;
25 send_to_chrome = false;
26 break;
27 case 'b':
28 send_to_chrome = true;
29 send_to_autotest = true;
30 break;
Darin Petkov5b7dce12010-04-21 15:45:10 -070031 case 'e':
32 send_enum = true;
33 break;
Darin Petkov4fcb2ac2010-04-15 16:40:23 -070034 case 't':
35 secs_to_msecs = true;
36 break;
Darin Petkov65b01462010-04-14 13:32:20 -070037 default:
38 print_usage = true;
39 break;
40 }
41 }
Darin Petkovc2526a12010-04-21 14:24:04 -070042 name_index = optind;
Darin Petkov65b01462010-04-14 13:32:20 -070043 } else {
44 print_usage = true;
45 }
46
Darin Petkov5b7dce12010-04-21 15:45:10 -070047 int num_args = send_enum ? 3 : 5;
48 if ((name_index + num_args) != argc ||
49 (send_enum && secs_to_msecs)) {
Darin Petkov65b01462010-04-14 13:32:20 -070050 print_usage = true;
51 }
52
53 if (print_usage) {
Darin Petkov4fcb2ac2010-04-15 16:40:23 -070054 fprintf(stderr,
Darin Petkov5b7dce12010-04-21 15:45:10 -070055 "Usage: metrics_client [-ab] [-t] name sample min max nbuckets\n"
56 " metrics_client [-ab] -e name sample max\n"
Darin Petkov4fcb2ac2010-04-15 16:40:23 -070057 "\n"
Darin Petkovc2526a12010-04-21 14:24:04 -070058 " default: send metric with integer values to Chrome only\n"
Darin Petkov5b7dce12010-04-21 15:45:10 -070059 " |min| > 0, |min| <= sample < |max|\n"
60 " -a: send metric (name/sample) to Autotest only\n"
61 " -b: send metric to both Chrome and Autotest\n"
62 " -e: send linear/enumeration histogram data\n"
Darin Petkovc2526a12010-04-21 14:24:04 -070063 " -t: convert sample from double seconds to int milliseconds\n");
Darin Petkov65b01462010-04-14 13:32:20 -070064 return 1;
65 }
66
Darin Petkovc2526a12010-04-21 14:24:04 -070067 const char* name = argv[name_index];
68 int sample;
Darin Petkov4fcb2ac2010-04-15 16:40:23 -070069 if (secs_to_msecs) {
Darin Petkovc2526a12010-04-21 14:24:04 -070070 sample = static_cast<int>(atof(argv[name_index + 1]) * 1000.0);
Darin Petkov4fcb2ac2010-04-15 16:40:23 -070071 } else {
Darin Petkovc2526a12010-04-21 14:24:04 -070072 sample = atoi(argv[name_index + 1]);
Darin Petkov4fcb2ac2010-04-15 16:40:23 -070073 }
74
Darin Petkov65b01462010-04-14 13:32:20 -070075 // Send metrics
76 if (send_to_autotest) {
Darin Petkovc2526a12010-04-21 14:24:04 -070077 MetricsLibrary::SendToAutotest(name, sample);
Darin Petkov65b01462010-04-14 13:32:20 -070078 }
Darin Petkov5b7dce12010-04-21 15:45:10 -070079
Darin Petkov65b01462010-04-14 13:32:20 -070080 if (send_to_chrome) {
Darin Petkov21cd2c52010-05-12 15:26:16 -070081 MetricsLibrary metrics_lib;
82 metrics_lib.Init();
Darin Petkov5b7dce12010-04-21 15:45:10 -070083 if (send_enum) {
84 int max = atoi(argv[name_index + 2]);
Darin Petkov21cd2c52010-05-12 15:26:16 -070085 metrics_lib.SendEnumToUMA(name, sample, max);
Darin Petkov5b7dce12010-04-21 15:45:10 -070086 } else {
87 int min = atoi(argv[name_index + 2]);
88 int max = atoi(argv[name_index + 3]);
89 int nbuckets = atoi(argv[name_index + 4]);
Darin Petkov21cd2c52010-05-12 15:26:16 -070090 metrics_lib.SendToUMA(name, sample, min, max, nbuckets);
Darin Petkov5b7dce12010-04-21 15:45:10 -070091 }
Darin Petkov65b01462010-04-14 13:32:20 -070092 }
93 return 0;
94}