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#ifndef REMOTING_CLIENT_CLIENT_STATUS_LOGGER_H_ 6#define REMOTING_CLIENT_CLIENT_STATUS_LOGGER_H_ 7 8#include "base/threading/non_thread_safe.h" 9#include "base/time/time.h" 10#include "remoting/protocol/connection_to_host.h" 11#include "remoting/protocol/errors.h" 12#include "remoting/signaling/log_to_server.h" 13 14namespace remoting { 15 16class ChromotingStats; 17 18// ClientStatusLogger sends client log entries to a server. 19// The contents of the log entries are described in server_log_entry_client.cc. 20// They do not contain any personally identifiable information. 21class ClientStatusLogger : public base::NonThreadSafe { 22 public: 23 ClientStatusLogger(ServerLogEntry::Mode mode, 24 SignalStrategy* signal_strategy, 25 const std::string& directory_bot_jid); 26 ~ClientStatusLogger(); 27 28 void LogSessionStateChange(protocol::ConnectionToHost::State state, 29 protocol::ErrorCode error); 30 void LogStatistics(remoting::ChromotingStats* statistics); 31 32 // Allows test code to fake SignalStrategy state change events. 33 void SetSignalingStateForTest(SignalStrategy::State state); 34 35 private: 36 LogToServer log_to_server_; 37 38 // Generates a new random session ID. 39 void GenerateSessionId(); 40 41 // Expire the session ID if the maximum duration has been exceeded. 42 void MaybeExpireSessionId(); 43 44 // A randomly generated session ID to be attached to log messages. This 45 // is regenerated at the start of a new session. 46 std::string session_id_; 47 48 // Start time of the session. 49 base::TimeTicks session_start_time_; 50 51 // Time when the session ID was generated. 52 base::TimeTicks session_id_generation_time_; 53 54 DISALLOW_COPY_AND_ASSIGN(ClientStatusLogger); 55}; 56 57} // namespace remoting 58 59#endif // REMOTING_CLIENT_CLIENT_STATUS_LOGGER_H_ 60