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

Side by Side Diff: metrics_library.cc

Issue 3171023: Add weekly crash counters, refactor metrics_daemon, respect opt-in in library. (Closed) Base URL: http://src.chromium.org/git/metrics.git
Patch Set: Respond to review 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 unified diff | Download patch
« no previous file with comments | « metrics_library.h ('k') | metrics_library_test.cc » ('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 "metrics_library.h" 5 #include "metrics_library.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <sys/file.h> 8 #include <sys/file.h>
9 #include <sys/stat.h>
9 10
10 #include <cstdarg> 11 #include <cstdarg>
11 #include <cstdio> 12 #include <cstdio>
12 #include <cstring> 13 #include <cstring>
13 14
14 #define READ_WRITE_ALL_FILE_FLAGS \ 15 #define READ_WRITE_ALL_FILE_FLAGS \
15 (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) 16 (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
16 17
17 static const char kAutotestPath[] = 18 static const char kAutotestPath[] = "/var/log/metrics/autotest-events";
18 "/var/log/metrics/autotest-events"; 19 static const char kUMAEventsPath[] = "/var/log/metrics/uma-events";
19 static const char kUMAEventsPath[] = 20 static const char kConsentFile[] = "/home/chronos/Consent To Send Stats";
20 "/var/log/metrics/uma-events";
21 static const int32_t kBufferSize = 1024; 21 static const int32_t kBufferSize = 1024;
22 22
23 time_t MetricsLibrary::cached_enabled_time_ = 0;
24 bool MetricsLibrary::cached_enabled_ = false;
25
23 using std::string; 26 using std::string;
24 27
25 // TODO(sosa@chromium.org) - use Chromium logger instead of stderr 28 // TODO(sosa@chromium.org) - use Chromium logger instead of stderr
26 static void PrintError(const char* message, const char* file, 29 static void PrintError(const char* message, const char* file,
27 int code) { 30 int code) {
28 static const char kProgramName[] = "libmetrics"; 31 static const char kProgramName[] = "libmetrics";
29 if (code == 0) { 32 if (code == 0) {
30 fprintf(stderr, "%s: %s\n", kProgramName, message); 33 fprintf(stderr, "%s: %s\n", kProgramName, message);
31 } else if (file == NULL) { 34 } else if (file == NULL) {
32 fprintf(stderr, "%s: ", kProgramName); 35 fprintf(stderr, "%s: ", kProgramName);
33 perror(message); 36 perror(message);
34 } else { 37 } else {
35 fprintf(stderr, "%s: %s: ", kProgramName, file); 38 fprintf(stderr, "%s: %s: ", kProgramName, file);
36 perror(message); 39 perror(message);
37 } 40 }
38 } 41 }
39 42
40 MetricsLibrary::MetricsLibrary() 43 MetricsLibrary::MetricsLibrary()
41 : uma_events_file_(NULL) {} 44 : uma_events_file_(NULL),
45 consent_file_(kConsentFile) {}
46
47 bool MetricsLibrary::AreMetricsEnabled() {
48 static struct stat stat_buffer;
49 time_t this_check_time = time(NULL);
50
51 if (this_check_time != cached_enabled_time_) {
52 cached_enabled_time_ = this_check_time;
53 cached_enabled_ = (stat(consent_file_, &stat_buffer) >= 0);
54 }
55 return cached_enabled_;
56 }
42 57
43 bool MetricsLibrary::SendMessageToChrome(int32_t length, const char* message) { 58 bool MetricsLibrary::SendMessageToChrome(int32_t length, const char* message) {
59 if (!AreMetricsEnabled())
60 return true;
61
44 int chrome_fd = open(uma_events_file_, 62 int chrome_fd = open(uma_events_file_,
45 O_WRONLY | O_APPEND | O_CREAT, 63 O_WRONLY | O_APPEND | O_CREAT,
46 READ_WRITE_ALL_FILE_FLAGS); 64 READ_WRITE_ALL_FILE_FLAGS);
47 // If we failed to open it, return. 65 // If we failed to open it, return.
48 if (chrome_fd < 0) { 66 if (chrome_fd < 0) {
49 PrintError("open", uma_events_file_, errno); 67 PrintError("open", uma_events_file_, errno);
50 return false; 68 return false;
51 } 69 }
52 70
53 // Need to chmod because open flags are anded with umask. Ignore the 71 // Need to chmod because open flags are anded with umask. Ignore the
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 FormatChromeMessage(kBufferSize, message, 166 FormatChromeMessage(kBufferSize, message,
149 "linearhistogram%c%s %d %d", '\0', 167 "linearhistogram%c%s %d %d", '\0',
150 name.c_str(), sample, max); 168 name.c_str(), sample, max);
151 169
152 if (message_length < 0) 170 if (message_length < 0)
153 return false; 171 return false;
154 172
155 // Send the message. 173 // Send the message.
156 return SendMessageToChrome(message_length, message); 174 return SendMessageToChrome(message_length, message);
157 } 175 }
OLDNEW
« no previous file with comments | « metrics_library.h ('k') | metrics_library_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698