blob: c26ad91df152821f9d55e06e8dd43cdfa60d53ea [file] [log] [blame]
// Copyright 2019 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.
#include <base/json/json_reader.h>
#include <base/logging.h>
#include <base/process/launch.h>
#include <base/values.h>
#include <brillo/syslog_logging.h>
#include "runtime_probe/probe_function.h"
#include "runtime_probe/utils/config_utils.h"
namespace {
enum ExitStatus {
kSuccess = EXIT_SUCCESS, // 0
kFailedToParseProbeStatementFromArg = 2,
};
} // namespace
int main(int argc, char* argv[]) {
brillo::InitLog(brillo::kLogToSyslog);
for (int i = 0; i < argc; ++i) {
DLOG(INFO) << "Got arguments, index " << i << " = " << argv[i];
}
if (argc != 2) {
LOG(ERROR) << "Helper only consumes a single probe statement";
return kFailedToParseProbeStatementFromArg;
}
std::unique_ptr<base::DictionaryValue> dict_val =
// TODO(crbug.com/1054279): use base::JSONReader::Read after uprev to
// r680000.
base::DictionaryValue::From(base::JSONReader::ReadDeprecated(argv[1]));
if (dict_val == nullptr) {
LOG(ERROR) << "Failed to parse the probe statement to JSON";
return kFailedToParseProbeStatementFromArg;
}
std::unique_ptr<runtime_probe::ProbeFunction> probe_function =
runtime_probe::ProbeFunction::FromValue(*dict_val);
if (probe_function == nullptr) {
LOG(ERROR) << "Failed to convert a probe statement to probe function";
return kFailedToParseProbeStatementFromArg;
}
std::string output;
int ret = probe_function->EvalInHelper(&output);
if (ret)
return ret;
printf("%s", output.c_str());
return ExitStatus::kSuccess;
}