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

Side by Side Diff: extensions/browser/api/cast_channel/logger.h

Issue 2688463003: [chrome.cast.channel] Remove event logging. (Closed)
Patch Set: Remove errors object when socket is closed Created 3 years, 10 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
OLDNEW
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 #ifndef EXTENSIONS_BROWSER_API_CAST_CHANNEL_LOGGER_H_ 5 #ifndef EXTENSIONS_BROWSER_API_CAST_CHANNEL_LOGGER_H_
6 #define EXTENSIONS_BROWSER_API_CAST_CHANNEL_LOGGER_H_ 6 #define EXTENSIONS_BROWSER_API_CAST_CHANNEL_LOGGER_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <deque> 10 #include <deque>
11 #include <map> 11 #include <map>
12 #include <memory> 12 #include <memory>
13 #include <string> 13 #include <string>
14 14
15 #include "base/macros.h" 15 #include "base/macros.h"
16 #include "base/memory/ref_counted.h" 16 #include "base/memory/ref_counted.h"
17 #include "base/threading/thread_checker.h" 17 #include "base/threading/thread_checker.h"
18 #include "extensions/browser/api/cast_channel/logger_util.h"
19 #include "extensions/common/api/cast_channel/logging.pb.h" 18 #include "extensions/common/api/cast_channel/logging.pb.h"
20 #include "net/base/ip_endpoint.h"
21 19
22 namespace base {
23 class Clock;
24 }
25 20
26 namespace extensions { 21 namespace extensions {
27 namespace api { 22 namespace api {
28 namespace cast_channel { 23 namespace cast_channel {
29 24
30 struct AuthResult; 25 struct AuthResult;
31 class CastSocket;
32 26
33 static const int kMaxSocketsToLog = 50; 27 // Holds the most recent errors encountered by a CastSocket.
34 static const int kMaxEventsPerSocket = 2000; 28 struct LastErrors {
Kevin M 2017/02/09 19:28:54 low pri nit: LastErrors seems like a misnomer; thi
mark a. foltz 2017/02/10 21:55:16 It's designed to collect the last net:: error and
29 public:
30 LastErrors();
31 ~LastErrors();
35 32
36 // Logs information of each channel and sockets and exports the log as 33 // The most recent event that occurred at the time of the error.
37 // a blob. Logger is done on the IO thread. 34 proto::EventType event_type;
35
36 // The most recent ChallengeReplyErrorType logged for the socket.
37 proto::ChallengeReplyErrorType challenge_reply_error_type;
38
39 // The most recent net_return_value logged for the socket.
40 int net_return_value;
41 };
42
43 // Called with events that occur on a Cast Channel and remembers any that
44 // warrant reporting to the caller in LastErrors.
38 class Logger : public base::RefCounted<Logger> { 45 class Logger : public base::RefCounted<Logger> {
39 public: 46 public:
40 // |clock|: Clock used for generating timestamps for the events. Owned by 47 Logger();
41 // this class.
42 // |unix_epoch_time|: The Time that corresponds to the Unix epoch.
43 // Can be set to other values (e.g. zero) for testing purposes.
44 //
45 // See crbug.com/518951 for information on why base::Clock
46 // is used instead of base::TickClock.
47 Logger(std::unique_ptr<base::Clock> clock, base::Time unix_epoch_time);
48
49 // For newly created sockets. Will create an event and log a
50 // CAST_SOCKET_CREATED event.
51 void LogNewSocketEvent(const CastSocket& cast_socket);
52
53 void LogSocketEvent(int channel_id, proto::EventType event_type);
54 void LogSocketEventWithDetails(int channel_id,
55 proto::EventType event_type,
56 const std::string& details);
57 48
58 // For events that involves socket / crypto operations that returns a value. 49 // For events that involves socket / crypto operations that returns a value.
59 void LogSocketEventWithRv(int channel_id, 50 void LogSocketEventWithRv(int channel_id,
60 proto::EventType event_type, 51 proto::EventType event_type,
61 int rv); 52 int rv);
62 53
63 // For *_STATE_CHANGED events.
64 void LogSocketReadyState(int channel_id, proto::ReadyState new_state);
65 void LogSocketConnectState(int channel_id, proto::ConnectionState new_state);
66 void LogSocketReadState(int channel_id, proto::ReadState new_state);
67 void LogSocketWriteState(int channel_id, proto::WriteState new_state);
68 void LogSocketErrorState(int channel_id, proto::ErrorState new_state);
69
70 // For AUTH_CHALLENGE_REPLY event. 54 // For AUTH_CHALLENGE_REPLY event.
71 void LogSocketChallengeReplyEvent(int channel_id, 55 void LogSocketChallengeReplyEvent(int channel_id,
72 const AuthResult& auth_result); 56 const AuthResult& auth_result);
73 57
74 void LogSocketEventForMessage(int channel_id, 58 // Returns the last errors logged for |channel_id|.
75 proto::EventType event_type, 59 LastErrors GetLastErrors(int channel_id) const;
76 const std::string& message_namespace,
77 const std::string& details);
78 60
79 // Assembles logs collected so far and return it as a serialized Log proto, 61 // Removes a LastErrors entry for |channel_id| if one exists.
80 // compressed in gzip format. 62 void ClearLastErrors(int channel_id);
81 // If serialization or compression failed, returns nullptr.
82 // |length|: If successful, assigned with size of compressed content.
83 std::unique_ptr<char[]> GetLogs(size_t* length) const;
84
85 // Clears the internal map.
86 void Reset();
87
88 // Returns the last errors logged for |channel_id|. If the the logs for
89 // |channel_id| are evicted before this is called, returns a LastErrors with
90 // no errors. This may happen if errors are logged and retrieved in different
91 // tasks.
92 LastErrors GetLastErrors(int channel_id) const;
93 63
94 private: 64 private:
95 friend class base::RefCounted<Logger>; 65 friend class base::RefCounted<Logger>;
96 ~Logger(); 66 ~Logger();
97 67
98 struct AggregatedSocketEventLog { 68 using LastErrorsMap = std::map<int, LastErrors>;
99 public:
100 AggregatedSocketEventLog();
101 ~AggregatedSocketEventLog();
102
103 // Partially constructed AggregatedSocketEvent proto populated by Logger.
104 // Contains top level info such as channel ID, IP end point and channel
105 // auth type.
106 proto::AggregatedSocketEvent aggregated_socket_event;
107 // Events to be assigned to the AggregatedSocketEvent proto. Contains the
108 // most recent |kMaxEventsPerSocket| entries. The oldest events are
109 // evicted as new events are logged.
110 std::deque<proto::SocketEvent> socket_events;
111
112 // The most recent errors logged for the socket.
113 LastErrors last_errors;
114 };
115
116 using AggregatedSocketEventLogMap =
117 std::map<int, std::unique_ptr<AggregatedSocketEventLog>>;
118 69
119 // Returns a SocketEvent proto with common fields (EventType, timestamp) 70 // Returns a SocketEvent proto with common fields (EventType, timestamp)
120 // populated. 71 // populated.
121 proto::SocketEvent CreateEvent(proto::EventType event_type); 72 proto::SocketEvent CreateEvent(proto::EventType event_type);
122 73
123 // Records |event| associated with |channel_id|. 74 // Uses |event| associated with |channel_id| to update its LastErrors.
124 // If the internal map is already logging maximum number of sockets and this 75 void LogSocketEvent(int channel_id, const proto::SocketEvent& socket_event);
125 // is a new socket, the socket with the smallest channel id will be discarded.
126 // Returns a reference to the AggregatedSocketEvent proto created/modified.
127 proto::AggregatedSocketEvent& LogSocketEvent(
128 int channel_id,
129 const proto::SocketEvent& socket_event);
130 76
131 std::unique_ptr<base::Clock> clock_; 77 LastErrorsMap last_errors_;
132 AggregatedSocketEventLogMap aggregated_socket_events_;
133 base::Time unix_epoch_time_;
134
135 // Log proto holding global statistics.
136 proto::Log log_;
137 78
138 base::ThreadChecker thread_checker_; 79 base::ThreadChecker thread_checker_;
139 80
140 DISALLOW_COPY_AND_ASSIGN(Logger); 81 DISALLOW_COPY_AND_ASSIGN(Logger);
141 }; 82 };
142 } // namespace cast_channel 83 } // namespace cast_channel
143 } // namespace api 84 } // namespace api
144 } // namespace extensions 85 } // namespace extensions
145 86
146 #endif // EXTENSIONS_BROWSER_API_CAST_CHANNEL_LOGGER_H_ 87 #endif // EXTENSIONS_BROWSER_API_CAST_CHANNEL_LOGGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698