Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 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 |
| 3 | // found in the LICENSE file. |
| 4 | |
Darin Petkov | 4fcb2ac | 2010-04-15 16:40:23 -0700 | [diff] [blame] | 5 | #include <cstdio> |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 6 | #include <cstdlib> |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 7 | |
| 8 | #include "metrics_library.h" |
| 9 | |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 10 | int main(int argc, char** argv) { |
| 11 | bool send_to_autotest = false; |
| 12 | bool send_to_chrome = true; |
Darin Petkov | 5b7dce1 | 2010-04-21 15:45:10 -0700 | [diff] [blame] | 13 | bool send_enum = false; |
Darin Petkov | 4fcb2ac | 2010-04-15 16:40:23 -0700 | [diff] [blame] | 14 | bool secs_to_msecs = false; |
Darin Petkov | c2526a1 | 2010-04-21 14:24:04 -0700 | [diff] [blame] | 15 | int name_index = 1; |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 16 | bool print_usage = false; |
| 17 | |
| 18 | if (argc >= 3) { |
| 19 | // Parse arguments |
| 20 | int flag; |
Darin Petkov | 5b7dce1 | 2010-04-21 15:45:10 -0700 | [diff] [blame] | 21 | while ((flag = getopt(argc, argv, "abet")) != -1) { |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 22 | 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 Petkov | 5b7dce1 | 2010-04-21 15:45:10 -0700 | [diff] [blame] | 31 | case 'e': |
| 32 | send_enum = true; |
| 33 | break; |
Darin Petkov | 4fcb2ac | 2010-04-15 16:40:23 -0700 | [diff] [blame] | 34 | case 't': |
| 35 | secs_to_msecs = true; |
| 36 | break; |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 37 | default: |
| 38 | print_usage = true; |
| 39 | break; |
| 40 | } |
| 41 | } |
Darin Petkov | c2526a1 | 2010-04-21 14:24:04 -0700 | [diff] [blame] | 42 | name_index = optind; |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 43 | } else { |
| 44 | print_usage = true; |
| 45 | } |
| 46 | |
Darin Petkov | 5b7dce1 | 2010-04-21 15:45:10 -0700 | [diff] [blame] | 47 | int num_args = send_enum ? 3 : 5; |
| 48 | if ((name_index + num_args) != argc || |
| 49 | (send_enum && secs_to_msecs)) { |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 50 | print_usage = true; |
| 51 | } |
| 52 | |
| 53 | if (print_usage) { |
Darin Petkov | 4fcb2ac | 2010-04-15 16:40:23 -0700 | [diff] [blame] | 54 | fprintf(stderr, |
Darin Petkov | 5b7dce1 | 2010-04-21 15:45:10 -0700 | [diff] [blame] | 55 | "Usage: metrics_client [-ab] [-t] name sample min max nbuckets\n" |
| 56 | " metrics_client [-ab] -e name sample max\n" |
Darin Petkov | 4fcb2ac | 2010-04-15 16:40:23 -0700 | [diff] [blame] | 57 | "\n" |
Darin Petkov | c2526a1 | 2010-04-21 14:24:04 -0700 | [diff] [blame] | 58 | " default: send metric with integer values to Chrome only\n" |
Darin Petkov | 5b7dce1 | 2010-04-21 15:45:10 -0700 | [diff] [blame] | 59 | " |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 Petkov | c2526a1 | 2010-04-21 14:24:04 -0700 | [diff] [blame] | 63 | " -t: convert sample from double seconds to int milliseconds\n"); |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 64 | return 1; |
| 65 | } |
| 66 | |
Darin Petkov | c2526a1 | 2010-04-21 14:24:04 -0700 | [diff] [blame] | 67 | const char* name = argv[name_index]; |
| 68 | int sample; |
Darin Petkov | 4fcb2ac | 2010-04-15 16:40:23 -0700 | [diff] [blame] | 69 | if (secs_to_msecs) { |
Darin Petkov | c2526a1 | 2010-04-21 14:24:04 -0700 | [diff] [blame] | 70 | sample = static_cast<int>(atof(argv[name_index + 1]) * 1000.0); |
Darin Petkov | 4fcb2ac | 2010-04-15 16:40:23 -0700 | [diff] [blame] | 71 | } else { |
Darin Petkov | c2526a1 | 2010-04-21 14:24:04 -0700 | [diff] [blame] | 72 | sample = atoi(argv[name_index + 1]); |
Darin Petkov | 4fcb2ac | 2010-04-15 16:40:23 -0700 | [diff] [blame] | 73 | } |
| 74 | |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 75 | // Send metrics |
| 76 | if (send_to_autotest) { |
Darin Petkov | c2526a1 | 2010-04-21 14:24:04 -0700 | [diff] [blame] | 77 | MetricsLibrary::SendToAutotest(name, sample); |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 78 | } |
Darin Petkov | 5b7dce1 | 2010-04-21 15:45:10 -0700 | [diff] [blame] | 79 | |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 80 | if (send_to_chrome) { |
Darin Petkov | 21cd2c5 | 2010-05-12 15:26:16 -0700 | [diff] [blame^] | 81 | MetricsLibrary metrics_lib; |
| 82 | metrics_lib.Init(); |
Darin Petkov | 5b7dce1 | 2010-04-21 15:45:10 -0700 | [diff] [blame] | 83 | if (send_enum) { |
| 84 | int max = atoi(argv[name_index + 2]); |
Darin Petkov | 21cd2c5 | 2010-05-12 15:26:16 -0700 | [diff] [blame^] | 85 | metrics_lib.SendEnumToUMA(name, sample, max); |
Darin Petkov | 5b7dce1 | 2010-04-21 15:45:10 -0700 | [diff] [blame] | 86 | } 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 Petkov | 21cd2c5 | 2010-05-12 15:26:16 -0700 | [diff] [blame^] | 90 | metrics_lib.SendToUMA(name, sample, min, max, nbuckets); |
Darin Petkov | 5b7dce1 | 2010-04-21 15:45:10 -0700 | [diff] [blame] | 91 | } |
Darin Petkov | 65b0146 | 2010-04-14 13:32:20 -0700 | [diff] [blame] | 92 | } |
| 93 | return 0; |
| 94 | } |