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/host/server_log_entry_host.h" 6 7#include "base/strings/stringize_macros.h" 8#include "base/sys_info.h" 9#include "remoting/signaling/server_log_entry.h" 10 11using base::SysInfo; 12 13namespace remoting { 14 15namespace { 16const char kValueEventNameSessionState[] = "session-state"; 17const char kValueEventNameHeartbeat[] = "heartbeat"; 18const char kValueEventNameHostStatus[] = "host-status"; 19 20const char kValueRoleHost[] = "host"; 21 22const char kKeySessionState[] = "session-state"; 23const char kValueSessionStateConnected[] = "connected"; 24const char kValueSessionStateClosed[] = "closed"; 25 26const char kStatusName[] = "status"; 27const char kExitCodeName[] = "exit-code"; 28 29const char kKeyOsName[] = "os-name"; 30 31#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) 32const char kKeyOsVersion[] = "os-version"; 33#endif 34 35const char kKeyHostVersion[] = "host-version"; 36 37const char kKeyConnectionType[] = "connection-type"; 38 39const char* GetValueSessionState(bool connected) { 40 return connected ? kValueSessionStateConnected : kValueSessionStateClosed; 41} 42 43} // namespace 44 45scoped_ptr<ServerLogEntry> MakeLogEntryForSessionStateChange( 46 bool connected) { 47 scoped_ptr<ServerLogEntry> entry(new ServerLogEntry()); 48 entry->AddRoleField(kValueRoleHost); 49 entry->AddEventNameField(kValueEventNameSessionState); 50 entry->Set(kKeySessionState, GetValueSessionState(connected)); 51 return entry.Pass(); 52} 53 54scoped_ptr<ServerLogEntry> MakeLogEntryForHeartbeat() { 55 scoped_ptr<ServerLogEntry> entry(new ServerLogEntry()); 56 entry->AddRoleField(kValueRoleHost); 57 entry->AddEventNameField(kValueEventNameHeartbeat); 58 return entry.Pass(); 59} 60 61// static 62scoped_ptr<ServerLogEntry> MakeLogEntryForHostStatus( 63 HostStatusSender::HostStatus host_status, HostExitCodes exit_code) { 64 scoped_ptr<ServerLogEntry> entry(new ServerLogEntry()); 65 entry->AddRoleField(kValueRoleHost); 66 entry->AddEventNameField(kValueEventNameHostStatus); 67 entry->Set(kStatusName, HostStatusSender::HostStatusToString(host_status)); 68 if (host_status == HostStatusSender::OFFLINE) 69 entry->Set(kExitCodeName, ExitCodeToString(exit_code)); 70 return entry.Pass(); 71} 72 73void AddHostFieldsToLogEntry(ServerLogEntry* entry) { 74#if defined(OS_WIN) 75 entry->Set(kKeyOsName, "Windows"); 76#elif defined(OS_MACOSX) 77 entry->Set(kKeyOsName, "Mac"); 78#elif defined(OS_CHROMEOS) 79 entry->Set(kKeyOsName, "ChromeOS"); 80#elif defined(OS_LINUX) 81 entry->Set(kKeyOsName, "Linux"); 82#endif 83 84 // SysInfo::OperatingSystemVersionNumbers is only defined for the following 85 // OSes: see base/sys_info_unittest.cc. 86#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) 87 std::stringstream os_version; 88 int32 os_major_version = 0; 89 int32 os_minor_version = 0; 90 int32 os_bugfix_version = 0; 91 SysInfo::OperatingSystemVersionNumbers(&os_major_version, &os_minor_version, 92 &os_bugfix_version); 93 os_version << os_major_version << "." << os_minor_version << "." 94 << os_bugfix_version; 95 entry->Set(kKeyOsVersion, os_version.str()); 96#endif 97 98 entry->Set(kKeyHostVersion, STRINGIZE(VERSION)); 99 entry->AddCpuField(); 100}; 101 102void AddConnectionTypeToLogEntry(ServerLogEntry* entry, 103 protocol::TransportRoute::RouteType type) { 104 entry->Set(kKeyConnectionType, protocol::TransportRoute::GetTypeString(type)); 105} 106 107} // namespace remoting 108