# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config.gni")
import("//src/sys/build/components.gni")
import("//third_party/cobalt/metrics_registry.gni")

metrics_registry("metrics_registry") {
  # This must match the ID of our Cobalt project as specified in:
  # third_party/cobalt_config/projects.yaml
  project_id = 1334068210
  namespace = "fuchsia_system_metrics"
  generate_cc = true
  generate_binarypb = false
}

metrics_registry("diagnostics_metrics_registry") {
  # This must match the ID of our Cobalt project as specified in:
  # third_party/cobalt_config/projects.yaml
  project_id = 5
  namespace = "fuchsia_component_diagnostics"
  generate_cc = true
  generate_binarypb = false
}

source_set("system_metrics_daemon_lib") {
  sources = [
    "activity_listener.cc",
    "activity_listener.h",
    "cpu_stats_fetcher.h",
    "cpu_stats_fetcher_impl.cc",
    "cpu_stats_fetcher_impl.h",
    "log_stats_fetcher.h",
    "log_stats_fetcher_impl.cc",
    "log_stats_fetcher_impl.h",
    "system_metrics_daemon.cc",
    "system_metrics_daemon.h",
  ]

  public_deps = [
    ":diagnostics_metrics_registry_cc",
    ":metrics_registry_cc",
    "//sdk/fidl/fuchsia.cobalt",
    "//sdk/fidl/fuchsia.diagnostics",
    "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_c",
    "//sdk/fidl/fuchsia.kernel:fuchsia.kernel_llcpp",
    "//sdk/fidl/fuchsia.ui.activity",
    "//sdk/lib/inspect/contrib/cpp:archive_reader",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/inspect/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/cobalt/bin/utils:clock",
    "//src/cobalt/bin/utils:status_utils",
    "//src/lib/cobalt/cpp:cobalt_event_builder",
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//third_party/cobalt/src/lib/client/cpp:buckets_config",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/abs_clock",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/trace",
    "//zircon/system/ulib/trace-provider:trace-provider-with-fdio",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]

  # TODO(fxbug.dev/69585): This target uses raw zx::channel with LLCPP which is deprecated.
  # Please migrate to typed channel APIs (fidl::ClientEnd<T>, fidl::ServerEnd<T>).
  # See linked bug for details.
  configs += [ "//build/cpp:fidl-llcpp-deprecated-raw-channels" ]
}

executable("system-metrics") {
  output_name = "cobalt_system_metrics"

  sources = [ "system_metrics_main.cc" ]

  deps = [
    ":system_metrics_daemon_lib",
    "//sdk/lib/sys/cpp",
  ]
}

config_data("config") {
  for_pkg = "cobalt_system_metrics"

  sources = [
    # The metric specs for granular error stats.
    "granular_error_stats_specs.txt",

    # The default allowlist included in core. Other products can define their own allowlist.
    "log_stats_component_allowlist.txt",
  ]
}

fuchsia_package_with_single_component("cobalt_system_metrics") {
  manifest = "meta/cobalt_system_metrics.cmx"
  deps = [ ":system-metrics" ]
}

executable("cobalt_system_metrics_unittests") {
  testonly = true

  sources = [
    "log_stats_fetcher_impl_test.cc",
    "system_metrics_daemon_test.cc",
  ]

  deps = [
    ":system_metrics_daemon_lib",
    "testing:fake_fetchers",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.cobalt",
    "//sdk/lib/inspect/testing/cpp",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/cobalt/bin/testing:fake_clock_lib",
    "//src/cobalt/bin/testing:fake_logger_lib",
    "//src/cobalt/bin/utils:clock",
    "//src/lib/fsl",
    "//src/lib/fxl/test:gtest_main",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]

  # TODO(67363): Temporarily disable lsan for this target. Reenable once all leaks are fixed.
  deps += [ "//build/config/sanitizers:suppress-lsan.DO-NOT-USE-THIS" ]
}
