// 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.pkg.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 {
  INVALID = 0;
  INFO = 1;
  WARNING = 2;
  ERROR = 3;
  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;
  }
}
