gcm_stats_recorder_impl.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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
  3. // found in the LICENSE file.
  4. #ifndef COMPONENTS_GCM_DRIVER_GCM_STATS_RECORDER_IMPL_H_
  5. #define COMPONENTS_GCM_DRIVER_GCM_STATS_RECORDER_IMPL_H_
  6. #include <stdint.h>
  7. #include <string>
  8. #include "base/containers/circular_deque.h"
  9. #include "base/memory/raw_ptr.h"
  10. #include "base/time/time.h"
  11. #include "components/gcm_driver/gcm_activity.h"
  12. #include "google_apis/gcm/engine/connection_factory.h"
  13. #include "google_apis/gcm/engine/mcs_client.h"
  14. #include "google_apis/gcm/engine/registration_request.h"
  15. #include "google_apis/gcm/engine/unregistration_request.h"
  16. #include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
  17. namespace gcm {
  18. enum class GCMDecryptionResult;
  19. // Records GCM internal stats and activities for debugging purpose. Recording
  20. // can be turned on/off by calling set_is_recording(...) function. It is turned
  21. // off by default.
  22. // This class is not thread safe. It is meant to be owned by a gcm client
  23. // instance.
  24. class GCMStatsRecorderImpl : public GCMStatsRecorder {
  25. public:
  26. GCMStatsRecorderImpl();
  27. GCMStatsRecorderImpl(const GCMStatsRecorderImpl&) = delete;
  28. GCMStatsRecorderImpl& operator=(const GCMStatsRecorderImpl&) = delete;
  29. ~GCMStatsRecorderImpl() override;
  30. // Set a delegate to receive callback from the recorder.
  31. void SetDelegate(Delegate* delegate);
  32. // Clear all recorded activities.
  33. void Clear();
  34. // Records a message decryption failure caused by |result| for |app_id|.
  35. void RecordDecryptionFailure(const std::string& app_id,
  36. GCMDecryptionResult result);
  37. // GCMStatsRecorder implementation:
  38. void RecordCheckinInitiated(uint64_t android_id) override;
  39. void RecordCheckinDelayedDueToBackoff(int64_t delay_msec) override;
  40. void RecordCheckinSuccess() override;
  41. void RecordCheckinFailure(const std::string& status,
  42. bool will_retry) override;
  43. void RecordConnectionInitiated(const std::string& host) override;
  44. void RecordConnectionDelayedDueToBackoff(int64_t delay_msec) override;
  45. void RecordConnectionSuccess() override;
  46. void RecordConnectionFailure(int network_error) override;
  47. void RecordConnectionResetSignaled(
  48. ConnectionFactory::ConnectionResetReason reason) override;
  49. void RecordRegistrationSent(const std::string& app_id,
  50. const std::string& source) override;
  51. void RecordRegistrationResponse(const std::string& app_id,
  52. const std::string& source,
  53. RegistrationRequest::Status status) override;
  54. void RecordRegistrationRetryDelayed(const std::string& app_id,
  55. const std::string& source,
  56. int64_t delay_msec,
  57. int retries_left) override;
  58. void RecordUnregistrationSent(const std::string& app_id,
  59. const std::string& source) override;
  60. void RecordUnregistrationResponse(
  61. const std::string& app_id,
  62. const std::string& source,
  63. UnregistrationRequest::Status status) override;
  64. void RecordUnregistrationRetryDelayed(const std::string& app_id,
  65. const std::string& source,
  66. int64_t delay_msec,
  67. int retries_left) override;
  68. void RecordDataMessageReceived(const std::string& app_id,
  69. const std::string& from,
  70. int message_byte_size,
  71. ReceivedMessageType message_type) override;
  72. void RecordDataSentToWire(const std::string& app_id,
  73. const std::string& receiver_id,
  74. const std::string& message_id,
  75. int queued) override;
  76. void RecordNotifySendStatus(const std::string& app_id,
  77. const std::string& receiver_id,
  78. const std::string& message_id,
  79. MCSClient::MessageSendStatus status,
  80. int byte_size,
  81. int ttl) override;
  82. void RecordIncomingSendError(const std::string& app_id,
  83. const std::string& receiver_id,
  84. const std::string& message_id) override;
  85. // Collect all recorded activities into |*recorded_activities|.
  86. void CollectActivities(RecordedActivities* recorded_activities) const;
  87. bool is_recording() const { return is_recording_; }
  88. void set_is_recording(bool recording) { is_recording_ = recording; }
  89. const base::circular_deque<CheckinActivity>& checkin_activities() const {
  90. return checkin_activities_;
  91. }
  92. const base::circular_deque<ConnectionActivity>& connection_activities()
  93. const {
  94. return connection_activities_;
  95. }
  96. const base::circular_deque<RegistrationActivity>& registration_activities()
  97. const {
  98. return registration_activities_;
  99. }
  100. const base::circular_deque<ReceivingActivity>& receiving_activities() const {
  101. return receiving_activities_;
  102. }
  103. const base::circular_deque<SendingActivity>& sending_activities() const {
  104. return sending_activities_;
  105. }
  106. const base::circular_deque<DecryptionFailureActivity>&
  107. decryption_failure_activities() const {
  108. return decryption_failure_activities_;
  109. }
  110. protected:
  111. // Notify the recorder delegate, if it exists, that an activity has been
  112. // recorded.
  113. void NotifyActivityRecorded();
  114. void RecordCheckin(const std::string& event,
  115. const std::string& details);
  116. void RecordConnection(const std::string& event,
  117. const std::string& details);
  118. void RecordRegistration(const std::string& app_id,
  119. const std::string& source,
  120. const std::string& event,
  121. const std::string& details);
  122. void RecordReceiving(const std::string& app_id,
  123. const std::string& from,
  124. int message_byte_size,
  125. const std::string& event,
  126. const std::string& details);
  127. void RecordSending(const std::string& app_id,
  128. const std::string& receiver_id,
  129. const std::string& message_id,
  130. const std::string& event,
  131. const std::string& details);
  132. bool is_recording_;
  133. raw_ptr<Delegate> delegate_;
  134. base::circular_deque<CheckinActivity> checkin_activities_;
  135. base::circular_deque<ConnectionActivity> connection_activities_;
  136. base::circular_deque<RegistrationActivity> registration_activities_;
  137. base::circular_deque<ReceivingActivity> receiving_activities_;
  138. base::circular_deque<SendingActivity> sending_activities_;
  139. base::circular_deque<DecryptionFailureActivity>
  140. decryption_failure_activities_;
  141. base::TimeTicks last_connection_initiation_time_;
  142. };
  143. } // namespace gcm
  144. #endif // COMPONENTS_GCM_DRIVER_GCM_STATS_RECORDER_IMPL_H_