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

Side by Side Diff: remoting/client/server_log_entry.cc

Issue 282063005: Pull out common code from client and host versions of ServerLogEntry. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
5 #include "remoting/client/server_log_entry.h"
6
7 #include "base/logging.h"
8 #include "base/macros.h"
9 #include "base/rand_util.h"
10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/stringize_macros.h"
12 #include "base/strings/stringprintf.h"
13 #include "base/sys_info.h"
14 #include "remoting/base/constants.h"
15 #include "remoting/client/chromoting_stats.h"
16 #include "remoting/protocol/connection_to_host.h"
17 #include "remoting/protocol/errors.h"
18 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h"
19
20 using base::StringPrintf;
21 using base::SysInfo;
22 using buzz::QName;
23 using buzz::XmlElement;
24 using remoting::protocol::ConnectionToHost;
25
26 namespace remoting {
27
28 namespace client {
29
30 namespace {
31 const char kLogCommand[] = "log";
32
33 const char kLogEntry[] = "entry";
34
35 const char kKeyEventName[] = "event-name";
36 const char kValueEventNameSessionState[] = "session-state";
37 const char kValueEventNameStatistics[] = "connection-statistics";
38 const char kValueEventNameSessionIdOld[] = "session-id-old";
39 const char kValueEventNameSessionIdNew[] = "session-id-new";
40
41 const char kKeyRole[] = "role";
42 const char kValueRoleClient[] = "client";
43
44 const char kKeyMode[] = "mode";
45 const char kValueModeIt2Me[] = "it2me";
46 const char kValueModeMe2Me[] = "me2me";
47
48 const char kKeySessionState[] = "session-state";
49 const char kValueSessionStateConnected[] = "connected";
50 const char kValueSessionStateClosed[] = "closed";
51
52 const char kKeyOsName[] = "os-name";
53 const char kKeyOsVersion[] = "os-version";
54 const char kKeyAppVersion[] = "app-version";
55
56 const char kKeyCpu[] = "cpu";
57
58 } // namespace
59
60 ServerLogEntry::ServerLogEntry() {
61 }
62
63 ServerLogEntry::~ServerLogEntry() {
64 }
65
66 // static
67 scoped_ptr<buzz::XmlElement> ServerLogEntry::MakeStanza() {
68 return scoped_ptr<buzz::XmlElement>(
69 new XmlElement(QName(kChromotingXmlNamespace, kLogCommand)));
70 }
71
72 // static
73 scoped_ptr<ServerLogEntry> ServerLogEntry::MakeForSessionStateChange(
74 protocol::ConnectionToHost::State state,
75 protocol::ErrorCode error) {
76 scoped_ptr<ServerLogEntry> entry(new ServerLogEntry());
77 entry->Set(kKeyRole, kValueRoleClient);
78 entry->Set(kKeyEventName, kValueEventNameSessionState);
79
80 entry->Set(kKeySessionState, GetValueSessionState(state));
81 if (error != protocol::OK) {
82 entry->Set("connection-error", GetValueError(error));
83 }
84
85 return entry.Pass();
86 }
87
88 // static
89 scoped_ptr<ServerLogEntry> ServerLogEntry::MakeForStatistics(
90 ChromotingStats* statistics) {
91 scoped_ptr<ServerLogEntry> entry(new ServerLogEntry());
92 entry->Set(kKeyRole, kValueRoleClient);
93 entry->Set(kKeyEventName, kValueEventNameStatistics);
94
95 entry->Set("video-bandwidth",
96 StringPrintf("%.2f", statistics->video_bandwidth()->Rate()));
97 entry->Set("capture-latency",
98 StringPrintf("%.2f", statistics->video_capture_ms()->Average()));
99 entry->Set("encode-latency",
100 StringPrintf("%.2f", statistics->video_encode_ms()->Average()));
101 entry->Set("decode-latency",
102 StringPrintf("%.2f", statistics->video_decode_ms()->Average()));
103 entry->Set("render-latency",
104 StringPrintf("%.2f", statistics->video_frame_rate()->Rate()));
105 entry->Set("roundtrip-latency",
106 StringPrintf("%.2f", statistics->round_trip_ms()->Average()));
107
108 return entry.Pass();
109 }
110
111 // static
112 scoped_ptr<ServerLogEntry> ServerLogEntry::MakeForSessionIdOld(
113 const std::string& session_id) {
114 scoped_ptr<ServerLogEntry> entry(new ServerLogEntry());
115 entry->Set(kKeyRole, kValueRoleClient);
116 entry->Set(kKeyEventName, kValueEventNameSessionIdOld);
117 entry->AddSessionId(session_id);
118 return entry.Pass();
119 }
120
121 // static
122 scoped_ptr<ServerLogEntry> ServerLogEntry::MakeForSessionIdNew(
123 const std::string& session_id) {
124 scoped_ptr<ServerLogEntry> entry(new ServerLogEntry());
125 entry->Set(kKeyRole, kValueRoleClient);
126 entry->Set(kKeyEventName, kValueEventNameSessionIdNew);
127 entry->AddSessionId(session_id);
128 return entry.Pass();
129 }
130
131 void ServerLogEntry::AddClientFields() {
132 Set(kKeyOsName, SysInfo::OperatingSystemName());
133 Set(kKeyOsVersion, SysInfo::OperatingSystemVersion());
134 Set(kKeyAppVersion, STRINGIZE(VERSION));
135 Set(kKeyCpu, SysInfo::OperatingSystemArchitecture());
136 };
137
138 void ServerLogEntry::AddModeField(ServerLogEntry::Mode mode) {
139 Set(kKeyMode, GetValueMode(mode));
140 }
141
142 void ServerLogEntry::AddSessionId(const std::string& session_id) {
143 Set("session-id", session_id);
144 }
145
146 void ServerLogEntry::AddSessionDuration(base::TimeDelta duration) {
147 Set("session-duration", base::Int64ToString(duration.InSeconds()));
148 }
149
150 // static
151 const char* ServerLogEntry::GetValueMode(ServerLogEntry::Mode mode) {
152 switch (mode) {
153 case IT2ME:
154 return kValueModeIt2Me;
155 case ME2ME:
156 return kValueModeMe2Me;
157 default:
158 NOTREACHED();
159 return NULL;
160 }
161 }
162
163 scoped_ptr<XmlElement> ServerLogEntry::ToStanza() const {
164 scoped_ptr<XmlElement> stanza(new XmlElement(QName(
165 kChromotingXmlNamespace, kLogEntry)));
166 ValuesMap::const_iterator iter;
167 for (iter = values_map_.begin(); iter != values_map_.end(); ++iter) {
168 stanza->AddAttr(QName(std::string(), iter->first), iter->second);
169 }
170 return stanza.Pass();
171 }
172
173 // static
174 const char* ServerLogEntry::GetValueSessionState(
175 ConnectionToHost::State state) {
176 switch (state) {
177 // Where possible, these are the same strings that the webapp sends for the
178 // corresponding state - see remoting/webapp/server_log_entry.js.
179 case ConnectionToHost::INITIALIZING:
180 return "initializing";
181 case ConnectionToHost::CONNECTING:
182 return "connecting";
183 case ConnectionToHost::AUTHENTICATED:
184 return "authenticated";
185 case ConnectionToHost::CONNECTED:
186 return kValueSessionStateConnected;
187 case ConnectionToHost::FAILED:
188 return "connection-failed";
189 case ConnectionToHost::CLOSED:
190 return kValueSessionStateClosed;
191 default:
192 NOTREACHED();
193 return NULL;
194 }
195 }
196
197 // static
198 const char* ServerLogEntry::GetValueError(protocol::ErrorCode error) {
199 switch (error) {
200 // Where possible, these are the same strings that the webapp sends for the
201 // corresponding error - see remoting/webapp/server_log_entry.js.
202 case protocol::OK:
203 return "none";
204 case protocol::PEER_IS_OFFLINE:
205 return "host-is-offline";
206 case protocol::SESSION_REJECTED:
207 return "session-rejected";
208 case protocol::INCOMPATIBLE_PROTOCOL:
209 return "incompatible-protocol";
210 case protocol::AUTHENTICATION_FAILED:
211 return "authentication-failed";
212 case protocol::CHANNEL_CONNECTION_ERROR:
213 return "channel-connection-error";
214 case protocol::SIGNALING_ERROR:
215 return "signaling-error";
216 case protocol::SIGNALING_TIMEOUT:
217 return "signaling-timeout";
218 case protocol::HOST_OVERLOAD:
219 return "host-overload";
220 case protocol::UNKNOWN_ERROR:
221 return "unknown-error";
222 default:
223 NOTREACHED();
224 return NULL;
225 }
226 }
227
228 void ServerLogEntry::AddEventName(const std::string& event_name) {
229 Set("event-name", event_name);
230 }
231
232 void ServerLogEntry::Set(const std::string& key, const std::string& value) {
233 values_map_[key] = value;
234 }
235
236 } // namespace client
237
238 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698