Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9bc902c authored by Bertrand Simonnet's avatar Bertrand Simonnet Committed by android-build-merger
Browse files

Merge "metricsd: Log over binder."

am: c5e921fe

* commit 'c5e921fe':
  metricsd: Log over binder.
parents e40884af c5e921fe
Loading
Loading
Loading
Loading
+25 −17
Original line number Diff line number Diff line
@@ -18,8 +18,6 @@ metrics_cpp_extension := .cc
libmetrics_sources := \
  c_metrics_library.cc \
  metrics_library.cc \
  serialization/metric_sample.cc \
  serialization/serialization_utils.cc \
  timer.cc

metrics_client_sources := \
@@ -30,18 +28,18 @@ metrics_collector_common := \
  collectors/cpu_usage_collector.cc \
  collectors/disk_usage_collector.cc \
  metrics_collector.cc \
  persistent_integer.cc \
  persistent_integer.cc

metricsd_common := \
  persistent_integer.cc \
  serialization/metric_sample.cc \
  serialization/serialization_utils.cc \
  uploader/bn_metricsd_impl.cc \
  uploader/crash_counters.cc \
  uploader/metrics_hashes.cc \
  uploader/metrics_log_base.cc \
  uploader/metrics_log.cc \
  uploader/sender_http.cc \
  uploader/system_profile_cache.cc \
  uploader/upload_service.cc \
  uploader/upload_service.cc

metrics_collector_tests_sources := \
  collectors/averaged_statistics_collector_test.cc \
@@ -49,14 +47,13 @@ metrics_collector_tests_sources := \
  metrics_collector_test.cc \
  metrics_library_test.cc \
  persistent_integer_test.cc \
  serialization/serialization_utils_unittest.cc \
  timer_test.cc \
  timer_test.cc

metricsd_tests_sources := \
  uploader/metrics_hashes_unittest.cc \
  uploader/metrics_log_base_unittest.cc \
  uploader/mock/sender_mock.cc \
  uploader/upload_service_test.cc \
  uploader/upload_service_test.cc

metrics_CFLAGS := -Wall \
  -Wno-char-subscripts \
@@ -70,7 +67,7 @@ metrics_CPPFLAGS := -Wno-non-virtual-dtor \
  -fvisibility=default
metrics_includes := external/gtest/include \
  $(LOCAL_PATH)/include
libmetrics_shared_libraries := libchrome libbrillo
libmetrics_shared_libraries := libchrome libbinder libbrillo libutils
metrics_collector_shared_libraries := $(libmetrics_shared_libraries) \
  libbrillo-dbus \
  libbrillo-http \
@@ -78,14 +75,24 @@ metrics_collector_shared_libraries := $(libmetrics_shared_libraries) \
  libdbus \
  libmetrics \
  librootdev \
  libweaved \
  libweaved

metricsd_shared_libraries := \
  libbinder \
  libbrillo \
  libbrillo-http \
  libchrome \
  libprotobuf-cpp-lite \
  libupdate_engine_client \
  libutils

# Static proxy library for the binder interface.
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := metricsd_binder_proxy
LOCAL_SHARED_LIBRARIES := libbinder libutils
LOCAL_SRC_FILES := aidl/android/brillo/metrics/IMetricsd.aidl
include $(BUILD_STATIC_LIBRARY)

# Shared library for metrics.
# ========================================================
@@ -100,6 +107,7 @@ LOCAL_RTTI_FLAG := -frtti
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
LOCAL_SHARED_LIBRARIES := $(libmetrics_shared_libraries)
LOCAL_SRC_FILES := $(libmetrics_sources)
LOCAL_STATIC_LIBRARIES := metricsd_binder_proxy
include $(BUILD_SHARED_LIBRARY)

# CLI client for metrics.
@@ -114,6 +122,7 @@ LOCAL_CPPFLAGS := $(metrics_CPPFLAGS)
LOCAL_SHARED_LIBRARIES := $(libmetrics_shared_libraries) \
  libmetrics
LOCAL_SRC_FILES := $(metrics_client_sources)
LOCAL_STATIC_LIBRARIES := metricsd_binder_proxy
include $(BUILD_EXECUTABLE)

# Protobuf library for metricsd.
@@ -144,6 +153,7 @@ LOCAL_RTTI_FLAG := -frtti
LOCAL_SHARED_LIBRARIES := $(metrics_collector_shared_libraries)
LOCAL_SRC_FILES := $(metrics_collector_common) \
  metrics_collector_main.cc
LOCAL_STATIC_LIBRARIES := metricsd_binder_proxy
include $(BUILD_EXECUTABLE)

# metricsd daemon.
@@ -158,9 +168,8 @@ LOCAL_CPPFLAGS := $(metrics_CPPFLAGS)
LOCAL_INIT_RC := metricsd.rc
LOCAL_REQUIRED_MODULES := \
  metrics_collector
LOCAL_RTTI_FLAG := -frtti
LOCAL_SHARED_LIBRARIES := $(metricsd_shared_libraries)
LOCAL_STATIC_LIBRARIES := metricsd_protos
LOCAL_STATIC_LIBRARIES := metricsd_protos metricsd_binder_proxy
LOCAL_SRC_FILES := $(metricsd_common) \
  metricsd_main.cc
include $(BUILD_EXECUTABLE)
@@ -173,10 +182,9 @@ LOCAL_CFLAGS := $(metrics_CFLAGS)
LOCAL_CLANG := true
LOCAL_CPP_EXTENSION := $(metrics_cpp_extension)
LOCAL_CPPFLAGS := $(metrics_CPPFLAGS) -Wno-sign-compare
LOCAL_RTTI_FLAG := -frtti
LOCAL_SHARED_LIBRARIES := $(metricsd_shared_libraries) libmetrics
LOCAL_SHARED_LIBRARIES := $(metricsd_shared_libraries)
LOCAL_SRC_FILES := $(metricsd_tests_sources) $(metricsd_common)
LOCAL_STATIC_LIBRARIES := libBionicGtestMain libgmock metricsd_protos
LOCAL_STATIC_LIBRARIES := libBionicGtestMain libgmock metricsd_protos metricsd_binder_proxy
include $(BUILD_NATIVE_TEST)

# Unit tests for metrics_collector.
@@ -191,7 +199,7 @@ LOCAL_RTTI_FLAG := -frtti
LOCAL_SHARED_LIBRARIES := $(metrics_collector_shared_libraries)
LOCAL_SRC_FILES := $(metrics_collector_tests_sources) \
  $(metrics_collector_common)
LOCAL_STATIC_LIBRARIES := libBionicGtestMain libgmock
LOCAL_STATIC_LIBRARIES := libBionicGtestMain libgmock metricsd_binder_proxy
include $(BUILD_NATIVE_TEST)

# Weave schema files
+25 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.brillo.metrics;

interface IMetricsd {
  oneway void recordHistogram(String name, int sample, int min, int max,
                              int nbuckets);
  oneway void recordLinearHistogram(String name, int sample, int max);
  oneway void recordSparseHistogram(String name, int sample);
  oneway void recordCrash(String type);
}
+0 −1
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ static const char kSharedMetricsDirectory[] = "/data/misc/metrics/";
static const char kMetricsdDirectory[] = "/data/misc/metricsd/";
static const char kMetricsCollectorDirectory[] =
    "/data/misc/metrics_collector/";
static const char kMetricsEventsFileName[] = "uma-events";
static const char kMetricsGUIDFileName[] = "Sysinfo.GUID";
static const char kMetricsServer[] = "https://clients4.google.com/uma/v2";
static const char kConsentFileName[] = "enabled";
+15 −2
Original line number Diff line number Diff line
@@ -24,9 +24,17 @@
#include <base/compiler_specific.h>
#include <base/files/file_path.h>
#include <base/macros.h>
#include <base/memory/scoped_ptr.h>
#include <binder/IServiceManager.h>
#include <gtest/gtest_prod.h>  // for FRIEND_TEST

namespace android {
namespace brillo {
namespace metrics {
class IMetricsd;
}  // namespace metrics
}  // namespace brillo
}  // namespace android

class MetricsLibraryInterface {
 public:
  virtual void Init() = 0;
@@ -152,6 +160,10 @@ class MetricsLibrary : public MetricsLibraryInterface {
                       char* buffer, int buffer_size,
                       bool* result);

  // Connects to IMetricsd if the proxy does not exist or is not alive.
  // Don't block if we fail to get the proxy for any reason.
  bool CheckService();

  // Time at which we last checked if metrics were enabled.
  time_t cached_enabled_time_;

@@ -161,7 +173,8 @@ class MetricsLibrary : public MetricsLibraryInterface {
  // True iff we should cache the enabled/disabled status.
  bool use_caching_;

  base::FilePath uma_events_file_;
  android::sp<android::IServiceManager> manager_;
  android::sp<android::brillo::metrics::IMetricsd> metricsd_proxy_;
  base::FilePath consent_file_;

  DISALLOW_COPY_AND_ASSIGN(MetricsLibrary);
+1 −49
Original line number Diff line number Diff line
@@ -21,11 +21,8 @@

#include "constants.h"
#include "metrics/metrics_library.h"
#include "serialization/metric_sample.h"
#include "serialization/serialization_utils.h"

enum Mode {
    kModeDumpLogs,
    kModeSendSample,
    kModeSendEnumSample,
    kModeSendSparseSample,
@@ -48,7 +45,6 @@ void ShowUsage() {
          "           |min| > 0, |min| <= sample < |max|\n"
          "  -c: return exit status 0 if user consents to stats, 1 otherwise,\n"
          "      in guest mode always return 1\n"
          "  -d: dump cached logs to the console\n"
          "  -e: send linear/enumeration histogram data\n"
          "  -g: return exit status 0 if machine in guest mode, 1 otherwise\n"
          "  -s: send a sparse histogram sample\n"
@@ -139,59 +135,17 @@ static int IsGuestMode() {
  return metrics_lib.IsGuestMode() ? 0 : 1;
}

static int DumpLogs() {
  base::FilePath events_file = base::FilePath(metrics::kSharedMetricsDirectory)
                                   .Append(metrics::kMetricsEventsFileName);
  printf("Metrics from %s\n\n", events_file.value().data());

  ScopedVector<metrics::MetricSample> metrics;
  metrics::SerializationUtils::ReadMetricsFromFile(events_file.value(),
                                                   &metrics);

  for (ScopedVector<metrics::MetricSample>::const_iterator i = metrics.begin();
       i != metrics.end(); ++i) {
    const metrics::MetricSample* sample = *i;
    printf("name: %s\t", sample->name().c_str());
    printf("type: ");

    switch (sample->type()) {
      case metrics::MetricSample::CRASH:
        printf("CRASH");
        break;
      case metrics::MetricSample::HISTOGRAM:
        printf("HISTOGRAM");
        break;
      case metrics::MetricSample::LINEAR_HISTOGRAM:
        printf("LINEAR_HISTOGRAM");
        break;
      case metrics::MetricSample::SPARSE_HISTOGRAM:
        printf("SPARSE_HISTOGRAM");
        break;
      case metrics::MetricSample::USER_ACTION:
        printf("USER_ACTION");
        break;
    }

    printf("\n");
  }

  return 0;
}

int main(int argc, char** argv) {
  enum Mode mode = kModeSendSample;
  bool secs_to_msecs = false;

  // Parse arguments
  int flag;
  while ((flag = getopt(argc, argv, "abcdegstuv")) != -1) {
  while ((flag = getopt(argc, argv, "abcegstuv")) != -1) {
    switch (flag) {
      case 'c':
        mode = kModeHasConsent;
        break;
      case 'd':
        mode = kModeDumpLogs;
        break;
      case 'e':
        mode = kModeSendEnumSample;
        break;
@@ -252,8 +206,6 @@ int main(int argc, char** argv) {
      return HasConsent();
    case kModeIsGuestMode:
      return IsGuestMode();
    case kModeDumpLogs:
      return DumpLogs();
    default:
      ShowUsage();
      return 0;
Loading