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