blob: bb913d8e801cc751fb9c41fbe63f6f0a6df0a0db [file] [log] [blame]
// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef RUNTIME_PROBE_PROBE_CONFIG_H_
#define RUNTIME_PROBE_PROBE_CONFIG_H_
#include <map>
#include <memory>
#include <string>
#include <vector>
#include <base/values.h>
#include <gtest/gtest.h>
#include "runtime_probe/component_category.h"
namespace runtime_probe {
class ProbeConfig {
// Holds a probe config.
//
// The input will be in JSON format with following schema::
// {
// <category:string>: {
// <component_name:string>: <statement:ProbeStatement>,
// ...
// }
// }
public:
static std::unique_ptr<ProbeConfig> FromValue(const base::Value& dv);
// Evaluates the probe config.
//
// @param category: specifies the components to probe.
// @return base::Value with the following format:
// {
// <category:string>: [
// {
// "name": <component_name:string>,
// "values": <probed_values of ProbeStatement>,
// "information": <information of ProbeStatement>
// }
// ]
// }
base::Value Eval(const std::vector<std::string>& category) const;
// Evaluates the probe config.
//
// This is the same as calling `this->eval({keys of category_})`.
base::Value Eval() const;
ComponentCategory* GetComponentCategory(
const std::string& category_name) const;
private:
// Must call `FromValue()` to create an instance.
ProbeConfig() = default;
std::map<std::string, std::unique_ptr<ComponentCategory>> category_;
FRIEND_TEST(ProbeConfigTest, LoadConfig);
};
} // namespace runtime_probe
#endif // RUNTIME_PROBE_PROBE_CONFIG_H_