// Copyright 2020 The Monogon Project Authors.
//
// SPDX-License-Identifier: Apache-2.0
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";
package osbase.logtree.proto;
option go_package = "source.monogon.dev/osbase/logtree/proto";

import "google/protobuf/timestamp.proto";

// Severity level corresponding to //osbase/logtree.Severity.
enum LeveledLogSeverity {
  LEVELED_LOG_SEVERITY_INVALID = 0;
  LEVELED_LOG_SEVERITY_INFO = 1;
  LEVELED_LOG_SEVERITY_WARNING = 2;
  LEVELED_LOG_SEVERITY_ERROR = 3;
  LEVELED_LOG_SEVERITY_FATAL = 4;
}

// LogEntry corresponding to logtree.LogEntry in //osbase/logtree.
message LogEntry {
  // A leveled log entry emitted from a compatible system, eg. Metorpolis code
  // or a klog-parsed line.
  message Leveled {
    repeated string lines = 1;
    google.protobuf.Timestamp timestamp = 2;
    LeveledLogSeverity severity = 3;
    // Source of the error, expressed as file:line.
    string location = 4;
  }
  // Raw log entry, captured from an external system without parting. Might
  // contain some timestamp/level/origin information embedded in data. Data
  // contained within should be treated as unsanitized external data.
  message Raw {
    string data = 1;
    // Original length of line, set if data was truncated.
    int64 original_length = 2;
  }

  // Origin DN (Distinguished Name), a unique identifier which is provided by
  // the supervisor system.
  string dn = 1;
  oneof kind {
    Leveled leveled = 2;
    Raw raw = 3;
  }
}
