OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium 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 "google_apis/gcm/monitoring/gcm_stats_recorder.h" | 5 #include "google_apis/gcm/monitoring/gcm_stats_recorder.h" |
6 | 6 |
7 #include <deque> | 7 #include <deque> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/format_macros.h" | 10 #include "base/format_macros.h" |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
12 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" |
13 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
14 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
15 | 15 |
16 namespace gcm { | 16 namespace gcm { |
17 | 17 |
18 const uint32 MAX_LOGGED_ACTIVITY_COUNT = 100; | 18 const uint32 MAX_LOGGED_ACTIVITY_COUNT = 100; |
19 | 19 |
20 namespace { | 20 namespace { |
21 | 21 |
22 // Insert an itme to the front of deque while maintaining the size of the deque. | 22 // Insert an itme to the front of deque while maintaining the size of the deque. |
Nicolas Zea
2014/05/02 20:51:36
nit: itme -> item
juyik
2014/05/02 21:44:18
Done.
| |
23 // Overflow item is discarded. | 23 // Overflow item is discarded. |
24 template <typename T> | 24 template <typename T> |
25 T* InsertCircularBuffer(std::deque<T>* q, const T& item) { | 25 T* InsertCircularBuffer(std::deque<T>* q, const T& item) { |
26 DCHECK(q); | 26 DCHECK(q); |
27 q->push_front(item); | 27 q->push_front(item); |
28 if (q->size() > MAX_LOGGED_ACTIVITY_COUNT) { | 28 if (q->size() > MAX_LOGGED_ACTIVITY_COUNT) { |
29 q->pop_back(); | 29 q->pop_back(); |
30 } | 30 } |
31 return &q->front(); | 31 return &q->front(); |
32 } | 32 } |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
140 | 140 |
141 } // namespace | 141 } // namespace |
142 | 142 |
143 GCMStatsRecorder::Activity::Activity() | 143 GCMStatsRecorder::Activity::Activity() |
144 : time(base::Time::Now()) { | 144 : time(base::Time::Now()) { |
145 } | 145 } |
146 | 146 |
147 GCMStatsRecorder::Activity::~Activity() { | 147 GCMStatsRecorder::Activity::~Activity() { |
148 } | 148 } |
149 | 149 |
150 GCMStatsRecorder::CheckinActivity::CheckinActivity() { | |
151 } | |
152 | |
153 GCMStatsRecorder::CheckinActivity::~CheckinActivity() { | |
154 } | |
155 | |
150 GCMStatsRecorder::ConnectionActivity::ConnectionActivity() { | 156 GCMStatsRecorder::ConnectionActivity::ConnectionActivity() { |
151 } | 157 } |
152 | 158 |
153 GCMStatsRecorder::ConnectionActivity::~ConnectionActivity() { | 159 GCMStatsRecorder::ConnectionActivity::~ConnectionActivity() { |
154 } | 160 } |
155 | 161 |
156 GCMStatsRecorder::RegistrationActivity::RegistrationActivity() { | 162 GCMStatsRecorder::RegistrationActivity::RegistrationActivity() { |
157 } | 163 } |
158 | 164 |
159 GCMStatsRecorder::RegistrationActivity::~RegistrationActivity() { | 165 GCMStatsRecorder::RegistrationActivity::~RegistrationActivity() { |
(...skipping 22 matching lines...) Expand all Loading... | |
182 } | 188 } |
183 | 189 |
184 GCMStatsRecorder::~GCMStatsRecorder() { | 190 GCMStatsRecorder::~GCMStatsRecorder() { |
185 } | 191 } |
186 | 192 |
187 void GCMStatsRecorder::SetRecording(bool recording) { | 193 void GCMStatsRecorder::SetRecording(bool recording) { |
188 is_recording_ = recording; | 194 is_recording_ = recording; |
189 } | 195 } |
190 | 196 |
191 void GCMStatsRecorder::Clear() { | 197 void GCMStatsRecorder::Clear() { |
198 checkin_activities_.clear(); | |
192 connection_activities_.clear(); | 199 connection_activities_.clear(); |
193 registration_activities_.clear(); | 200 registration_activities_.clear(); |
194 receiving_activities_.clear(); | 201 receiving_activities_.clear(); |
195 sending_activities_.clear(); | 202 sending_activities_.clear(); |
196 } | 203 } |
197 | 204 |
205 void GCMStatsRecorder::RecordCheckin( | |
206 const std::string& event, | |
207 const std::string& details) { | |
208 CheckinActivity data; | |
209 CheckinActivity* inserted_data = InsertCircularBuffer( | |
210 &checkin_activities_, data); | |
211 inserted_data->event = event; | |
212 inserted_data->details = details; | |
213 } | |
214 | |
215 void GCMStatsRecorder::RecordCheckinInitiated(uint64 android_id) { | |
216 if (!is_recording_) | |
217 return; | |
218 RecordCheckin("Checkin initiated", | |
219 base::StringPrintf("Android Id: %" PRIu64, android_id)); | |
220 } | |
221 | |
222 void GCMStatsRecorder::RecordCheckinDelayedDueToBackoff(int64 delay_msec) { | |
223 if (!is_recording_) | |
224 return; | |
225 RecordCheckin("Checkin backoff", | |
226 base::StringPrintf("Delayed for %" PRId64 " msec", | |
227 delay_msec)); | |
228 } | |
229 | |
230 void GCMStatsRecorder::RecordCheckinSuccess() { | |
231 if (!is_recording_) | |
232 return; | |
233 RecordCheckin("Checkin succeeded", std::string()); | |
234 } | |
235 | |
236 void GCMStatsRecorder::RecordCheckinFailure(std::string status, | |
237 bool will_retry) { | |
238 if (!is_recording_) | |
239 return; | |
240 RecordCheckin("Checkin failed", base::StringPrintf( | |
241 "%s.%s", status.c_str(), will_retry ? " Will retry." : "")); | |
Nicolas Zea
2014/05/02 20:51:36
nit: perhaps also say "Will not retry" for false c
juyik
2014/05/02 21:44:18
Done.
| |
242 } | |
243 | |
198 void GCMStatsRecorder::RecordConnection( | 244 void GCMStatsRecorder::RecordConnection( |
199 const std::string& event, | 245 const std::string& event, |
200 const std::string& details) { | 246 const std::string& details) { |
201 ConnectionActivity data; | 247 ConnectionActivity data; |
202 ConnectionActivity* inserted_data = InsertCircularBuffer( | 248 ConnectionActivity* inserted_data = InsertCircularBuffer( |
203 &connection_activities_, data); | 249 &connection_activities_, data); |
204 inserted_data->event = event; | 250 inserted_data->event = event; |
205 inserted_data->details = details; | 251 inserted_data->details = details; |
206 } | 252 } |
207 | 253 |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
357 "Message has been deleted on server"); | 403 "Message has been deleted on server"); |
358 break; | 404 break; |
359 default: | 405 default: |
360 NOTREACHED(); | 406 NOTREACHED(); |
361 } | 407 } |
362 } | 408 } |
363 } | 409 } |
364 | 410 |
365 void GCMStatsRecorder::CollectActivities( | 411 void GCMStatsRecorder::CollectActivities( |
366 RecordedActivities* recorder_activities) const { | 412 RecordedActivities* recorder_activities) const { |
413 recorder_activities->checkin_activities.insert( | |
414 recorder_activities->checkin_activities.begin(), | |
415 checkin_activities_.begin(), | |
416 checkin_activities_.end()); | |
367 recorder_activities->connection_activities.insert( | 417 recorder_activities->connection_activities.insert( |
368 recorder_activities->connection_activities.begin(), | 418 recorder_activities->connection_activities.begin(), |
369 connection_activities_.begin(), | 419 connection_activities_.begin(), |
370 connection_activities_.end()); | 420 connection_activities_.end()); |
371 recorder_activities->registration_activities.insert( | 421 recorder_activities->registration_activities.insert( |
372 recorder_activities->registration_activities.begin(), | 422 recorder_activities->registration_activities.begin(), |
373 registration_activities_.begin(), | 423 registration_activities_.begin(), |
374 registration_activities_.end()); | 424 registration_activities_.end()); |
375 recorder_activities->receiving_activities.insert( | 425 recorder_activities->receiving_activities.insert( |
376 recorder_activities->receiving_activities.begin(), | 426 recorder_activities->receiving_activities.begin(), |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
433 const std::string& receiver_id, | 483 const std::string& receiver_id, |
434 const std::string& message_id) { | 484 const std::string& message_id) { |
435 UMA_HISTOGRAM_COUNTS("GCM.IncomingSendErrors", 1); | 485 UMA_HISTOGRAM_COUNTS("GCM.IncomingSendErrors", 1); |
436 if (!is_recording_) | 486 if (!is_recording_) |
437 return; | 487 return; |
438 RecordSending(app_id, receiver_id, message_id, "Received 'send error' msg", | 488 RecordSending(app_id, receiver_id, message_id, "Received 'send error' msg", |
439 std::string()); | 489 std::string()); |
440 } | 490 } |
441 | 491 |
442 } // namespace gcm | 492 } // namespace gcm |
OLD | NEW |