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