// Copyright 2021 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 "runtime_probe/system/helper_invoker_debugd_impl.h"

#include <memory>
#include <string>
#include <utility>

#include <base/check.h>
#include <base/logging.h>
#include <brillo/errors/error.h>
#include <debugd/dbus-proxies.h>

#include "runtime_probe/system/context_instance.h"
#include "runtime_probe/utils/pipe_utils.h"

namespace runtime_probe {

bool HelperInvokerDebugdImpl::Invoke(const ProbeFunction* probe_function,
                                     const std::string& probe_statement_str,
                                     std::string* result) const {
  base::ScopedFD read_fd{};
  brillo::ErrorPtr error;
  if (!ContextInstance::Get()->debugd_proxy()->EvaluateProbeFunction(
          probe_statement_str, &read_fd, &error)) {
    LOG(ERROR) << "Debugd::EvaluateProbeFunction failed: "
               << error->GetMessage();
    return false;
  }

  if (!ReadNonblockingPipeToString(read_fd.get(), result)) {
    LOG(ERROR) << "Cannot read result from helper";
    return false;
  }
  return true;
}

}  // namespace runtime_probe
