15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROMEOS_DBUS_DEBUG_DAEMON_CLIENT_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROMEOS_DBUS_DEBUG_DAEMON_CLIENT_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/files/file.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted_memory.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/task_runner.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/chromeos_export.h" 13424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chromeos/dbus/dbus_client.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace metrics { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PerfDataProto; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DebugDaemonClient is used to communicate with the debug daemon. 24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class CHROMEOS_EXPORT DebugDaemonClient : public DBusClient { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DebugDaemonClient(); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called once GetDebugLogs() is complete. Takes one parameter: 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - succeeded: was the logs stored successfully. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(bool succeeded)> GetDebugLogsCallback; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Requests to store debug logs into |file| and calls |callback| 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // when completed. Debug logs will be stored in the .tgz if 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // |is_compressed| is true, otherwise in logs will be stored in .tar format. 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void DumpDebugLogs(bool is_compressed, 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::File file, 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<base::TaskRunner> task_runner, 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GetDebugLogsCallback& callback) = 0; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called once SetDebugMode() is complete. Takes one parameter: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - succeeded: debug mode was changed successfully. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(bool succeeded)> SetDebugModeCallback; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Requests to change debug mode to given |subsystem| and calls 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |callback| when completed. |subsystem| should be one of the 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // following: "wifi", "ethernet", "cellular" or "none". 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetDebugMode(const std::string& subsystem, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SetDebugModeCallback& callback) = 0; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called once GetRoutes() is complete. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(bool succeeded, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<std::string>& routes)> 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRoutesCallback; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetRoutes(bool numeric, bool ipv6, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GetRoutesCallback& callback) = 0; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called once GetNetworkStatus() is complete. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(bool succeeded, const std::string& status)> 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNetworkStatusCallback; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets information about network status as json. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetNetworkStatus(const GetNetworkStatusCallback& callback) = 0; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called once GetModemStatus() is complete. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(bool succeeded, const std::string& status)> 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetModemStatusCallback; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets information about modem status as json. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetModemStatus(const GetModemStatusCallback& callback) = 0; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch // Called once GetWiMaxStatus() is complete. 7258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch typedef base::Callback<void(bool succeeded, const std::string& status)> 7358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch GetWiMaxStatusCallback; 7458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 7558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch // Gets information about WiMAX status as json. 7658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch virtual void GetWiMaxStatus(const GetWiMaxStatusCallback& callback) = 0; 7758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called once GetNetworkInterfaces() is complete. Takes two parameters: 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - succeeded: information was obtained successfully. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - status: network interfaces information in json. For details, please refer 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to http://gerrit.chromium.org/gerrit/#/c/28045/5/src/helpers/netif.cc 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(bool succeeded, const std::string& status)> 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNetworkInterfacesCallback; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets information about network interfaces as json. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetNetworkInterfaces( 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GetNetworkInterfacesCallback& callback) = 0; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called once GetPerfData() is complete only if the the data is successfully 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // obtained from debugd. 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef base::Callback<void(const std::vector<uint8>& data)> 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetPerfDataCallback; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Runs perf for |duration| seconds and returns data collected. 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void GetPerfData(uint32_t duration, 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetPerfDataCallback& callback) = 0; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Callback type for GetScrubbedLogs(), GetAllLogs() or GetUserLogFiles(). 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(bool succeeded, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::map<std::string, std::string>& logs)> 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLogsCallback; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Gets scrubbed logs from debugd. 104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual void GetScrubbedLogs(const GetLogsCallback& callback) = 0; 105ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets all logs collected by debugd. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetAllLogs(const GetLogsCallback& callback) = 0; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets list of user log files that must be read by Chrome. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetUserLogFiles(const GetLogsCallback& callback) = 0; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Requests to start system/kernel tracing. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void StartSystemTracing() = 0; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called once RequestStopSystemTracing() is complete. Takes one parameter: 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - result: the data collected while tracing was active 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(const scoped_refptr<base::RefCountedString>& 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result)> StopSystemTracingCallback; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Requests to stop system tracing and calls |callback| when completed. 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool RequestStopSystemTracing( 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<base::TaskRunner> task_runner, 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const StopSystemTracingCallback& callback) = 0; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns an empty SystemTracingCallback that does nothing. 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static StopSystemTracingCallback EmptyStopSystemTracingCallback(); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called once TestICMP() is complete. Takes two parameters: 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - succeeded: information was obtained successfully. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - status: information about ICMP connectivity to a specified host as json. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For details please refer to 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // https://gerrit.chromium.org/gerrit/#/c/30310/2/src/helpers/icmp.cc 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(bool succeeded, const std::string& status)> 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestICMPCallback; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tests ICMP connectivity to a specified host. The |ip_address| contains the 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPv4 or IPv6 address of the host, for example "8.8.8.8". 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TestICMP(const std::string& ip_address, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestICMPCallback& callback) = 0; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Tests ICMP connectivity to a specified host. The |ip_address| contains the 142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // IPv4 or IPv6 address of the host, for example "8.8.8.8". 143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void TestICMPWithOptions( 144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& ip_address, 145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::map<std::string, std::string>& options, 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const TestICMPCallback& callback) = 0; 147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 148e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Trigger uploading of crashes. 149e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual void UploadCrashes() = 0; 150e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Factory function, creates a new instance and returns ownership. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For normal usage, access the singleton via DBusThreadManager::Get(). 153a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static DebugDaemonClient* Create(); 154424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create() should be used instead. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DebugDaemonClient(); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DebugDaemonClient); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROMEOS_DBUS_DEBUG_DAEMON_CLIENT_H_ 166