// Copyright 2021 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.
use {fuchsia_inspect as inspect, fuchsia_inspect_derive::Inspect};

#[derive(Inspect, Default)]
pub struct SamplerExecutorStats {
    pub total_project_samplers_configured: inspect::UintProperty,
    pub healthily_exited_samplers: inspect::UintProperty,
    pub errorfully_exited_samplers: inspect::UintProperty,
    pub reboot_exited_samplers: inspect::UintProperty,
    pub inspect_node: fuchsia_inspect::Node,
}

impl SamplerExecutorStats {
    pub fn new() -> Self {
        Self::default()
    }
}

#[derive(Inspect, Default)]
pub struct ProjectSamplerStats {
    // Total number of unique project samplers for this project.
    pub project_sampler_count: inspect::UintProperty,
    // Total number of configured metrics across all
    // project samplers for this project..
    pub metrics_configured: inspect::UintProperty,
    // Total number of cobalt logs sent on the behalf of this project.
    pub cobalt_logs_sent: inspect::UintProperty,
    inspect_node: fuchsia_inspect::Node,
}

impl ProjectSamplerStats {
    pub fn new() -> Self {
        Self::default()
    }
}
