// Copyright 2020 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.

#ifndef SRC_STORAGE_FSHOST_EXTRACT_METADATA_H_
#define SRC_STORAGE_FSHOST_EXTRACT_METADATA_H_

#include <lib/zx/time.h>

#include <cstdint>
#include <string>

#include <fbl/unique_fd.h>
#include <fs-management/format.h>

namespace devmgr {

struct DumpMetadataOptions {
  // A string to uniquely identify hex dump strings. This helps in grepping the logs for dump
  // messages. EIL may stand for Extracted Image Log but the string is mostly chosen because of
  // strings rarity in the code base.
  // Try to keep this string as short as possible.
  // |tag| and |bytes_per_line| together decide how long each generated dump line will be. Syslog
  // has its own buffer limit. If a dumped log crosses syslog's limit then syslog might
  // choose to wrap, trucante, or drop the message. We try here to keep tag small and
  // |bytes_per_row| and |stream_buffer_size| large to improve density of the dumped log but still
  // within syslog's limits.
  std::string tag = "EIL";

  // Format of the disk to be extracted.
  disk_format_t disk_format = DISK_FORMAT_UNKNOWN;

  // How long to wait before and after dumping for logs to settle.
  zx::duration log_settle_time = zx::sec(10);

  // Number of bytes to print per line. See comments for |tag|.
  uint16_t bytes_per_line = 64;

  // Number of bytes to buffer before writing to serial log. See comments for |tag|.
  size_t stream_buffer_size = 10240;
};

// This function returns true if extraction is enabled.
// We link extractor library only in specific build types.
bool ExtractMetadataEnabled();

void MaybeDumpMetadata(fbl::unique_fd device_fd, DumpMetadataOptions options = {});

}  // namespace devmgr

#endif  // SRC_STORAGE_FSHOST_EXTRACT_METADATA_H_
