blob: 319eb40ee7f229c934d73416f44ce5aa89de720c [file] [log] [blame]
// Copyright 2019 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.
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <zircon/compiler.h>
#include <filesystem>
#include <fs-host/json_recorder.h>
JsonRecorder::JsonRecorder() = default;
JsonRecorder::~JsonRecorder() {
std::lock_guard<std::mutex> lock(sizes_stream_lock_);
if (!sizes_stream_.is_open())
return;
sizes_stream_ << "\n]\n";
}
bool JsonRecorder::OpenFile(const char* const path) {
std::lock_guard<std::mutex> lock(sizes_stream_lock_);
if (sizes_stream_.is_open())
return false;
sizes_stream_.open(path);
sizes_stream_ << "[\n";
return true;
}
void JsonRecorder::Append(std::string_view path, std::string_view digest,
std::uint64_t bytes, std::size_t size) {
std::lock_guard<std::mutex> lock(sizes_stream_lock_);
if (!sizes_stream_.is_open())
return;
if (likely(needs_comma_))
sizes_stream_ << ",\n";
else
needs_comma_ = true;
sizes_stream_ << " {\n";
sizes_stream_ << " \"source_path\": " << std::filesystem::relative(std::filesystem::canonical(path)) << ",\n";
sizes_stream_ << " \"merkle\": \"" << digest << "\",\n";
sizes_stream_ << " \"bytes\": " << bytes << ",\n";
sizes_stream_ << " \"size\": " << size << "\n";
sizes_stream_ << " }";
}