| // Copyright 2015 The LUCI Authors. All rights reserved. |
| // Use of this source code is governed under the Apache License, Version 2.0 |
| // that can be found in the LICENSE file. |
| |
| syntax = "proto3"; |
| |
| package logpb; |
| |
| option go_package = "go.chromium.org/luci/logdog/api/logpb"; |
| |
| import "google/protobuf/timestamp.proto"; |
| import "google/protobuf/duration.proto"; |
| |
| /* A log stream type. */ |
| enum StreamType { |
| TEXT = 0; |
| BINARY = 1; |
| DATAGRAM = 2; |
| } |
| |
| /** |
| * Log stream descriptor data. This is the full set of information that |
| * describes a logging stream. |
| */ |
| message LogStreamDescriptor { |
| /* |
| * The stream's prefix (required). |
| * |
| * Logs originating from the same Butler instance will share a Prefix. |
| * |
| * A valid prefix value is a StreamName described in: |
| * https://go.chromium.org/luci/logdog/common/types#StreamName |
| */ |
| string prefix = 1; |
| /* |
| * The log stream's name (required). |
| * |
| * This is used to uniquely identify a log stream within the scope of its |
| * prefix. |
| * |
| * A valid name value is a StreamName described in: |
| * https://go.chromium.org/luci/logdog/common/types#StreamName |
| */ |
| string name = 2; |
| |
| /* The log stream's content type (required). */ |
| StreamType stream_type = 3; |
| |
| /* |
| * The stream's content type (required). |
| * |
| * This must be an HTTP Content-Type value. Begins with MIME media type; may |
| * include a charset directive. It is made available to LogDog clients when |
| * querying stream metadata. It will also be applied to archived binary log |
| * data. |
| */ |
| string content_type = 4; |
| |
| /* |
| * The log stream's base timestamp (required). |
| * |
| * This notes the start time of the log stream. All LogEntries express their |
| * timestamp as microsecond offsets from this field. |
| */ |
| google.protobuf.Timestamp timestamp = 5; |
| |
| /* |
| * Tag is an arbitrary key/value tag associated with this log stream. |
| * |
| * LogDog clients can query for log streams based on tag values. |
| */ |
| map<string, string> tags = 6; |
| |
| /* |
| * If set, the stream will be joined together during archival to recreate the |
| * original stream and made available at <prefix>/+/<name>.ext. |
| */ |
| string binary_file_ext = 7; |
| } |
| |
| /* Text stream content. */ |
| message Text { |
| /* |
| * Contiguous text lines and their delimiters. |
| * |
| * The array of lines follows the following pattern: |
| * - 0 or 1 completion lines completing the last LogEntry's Text (i.e. with |
| * a delimiter but not itself the full line) |
| * - any number of complete lines (i.e. with delimiter, each its own line) |
| * - 0 or 1 partial lines |
| */ |
| message Line { |
| /* The line's text content, not including its delimiter. */ |
| bytes value = 1; |
| |
| /* |
| * The line's delimiter string. |
| * |
| * If this is an empty string, this line is continued in the next sequential |
| * line, and the line's sequence number does not advance. |
| */ |
| string delimiter = 2; |
| } |
| repeated Line lines = 1; |
| } |
| |
| /* Binary stream content. */ |
| message Binary { |
| // Formerly the LogEntry.Sequence value was duplicated here. |
| reserved 1; |
| |
| /* The binary stream's data. */ |
| bytes data = 2; |
| } |
| |
| /* Datagram stream content type. */ |
| message Datagram { |
| /* This datagram data. */ |
| bytes data = 1; |
| |
| /* |
| * If this is not a partial datagram, this field will include reassembly and |
| * state details for the full datagram. |
| */ |
| message Partial { |
| /* |
| * The index, starting with zero, of this datagram fragment in the full |
| * datagram. |
| */ |
| uint32 index = 1; |
| |
| /* The size of the full datagram */ |
| uint64 size = 2; |
| |
| /* If true, this is the last partial datagram in the overall datagram. */ |
| bool last = 3; |
| } |
| Partial partial = 2; |
| } |
| |
| /** |
| * An individual log entry. |
| * |
| * This contains the superset of transmissible log data. Its content fields |
| * should be interpreted in the context of the log stream's content type. |
| */ |
| message LogEntry { |
| /* |
| * The stream time offset for this content. |
| * |
| * This offset is added to the log stream's base "timestamp" to resolve the |
| * timestamp for this specific Content. |
| */ |
| google.protobuf.Duration time_offset = 1; |
| |
| /* |
| * The message index within the Prefix (required). |
| * |
| * This is value is unique to this LogEntry across the entire set of entries |
| * sharing the stream's Prefix. It is used to designate unambiguous log |
| * ordering. |
| */ |
| uint64 prefix_index = 2; |
| |
| /* |
| * The message index within its Stream (required). |
| * |
| * This value is unique across all entries sharing the same Prefix and Stream |
| * Name. It is used to designate unambiguous log ordering within the stream. |
| */ |
| uint64 stream_index = 3; |
| |
| /* |
| * The sequence number of the first content entry in this LogEntry. |
| * |
| * Text: This is the line index of the first included line. Line indices begin |
| * at zero. |
| * Binary: This is the byte offset of the first byte in the included data. |
| * Datagram: This is the index of the datagram. The first datagram has index |
| * zero. |
| */ |
| uint64 sequence = 4; |
| |
| /* |
| * The content of the message. The field that is populated here must |
| * match the log's `stream_type`. |
| */ |
| oneof content { |
| /* Text Stream: Lines of log text. */ |
| Text text = 10; |
| |
| /* Binary stream: data segment. */ |
| Binary binary = 11; |
| |
| /* Datagram stream: Datagrams. */ |
| Datagram datagram = 12; |
| } |
| } |
| |
| /** |
| * LogIndex is an index into an at-rest log storage. |
| * |
| * The log stream and log index are generated by the Archivist during archival. |
| * |
| * An archived log stream is a series of contiguous LogEntry frames. The index |
| * maps a log's logical logation in its stream, prefix, and timeline to its |
| * frame's binary offset in the archived log stream blob. |
| */ |
| message LogIndex { |
| /* |
| * The LogStreamDescriptor for this log stream (required). |
| * |
| * The index stores the stream's LogStreamDescriptor so that a client can |
| * know the full set of log metadata by downloading its index. |
| */ |
| LogStreamDescriptor desc = 1; |
| |
| /* |
| * Entry is a single index entry. |
| * |
| * The index is composed of a series of entries, each corresponding to a |
| * sequential snapshot of of the log stream. |
| */ |
| message Entry { |
| /* |
| * The byte offset in the emitted log stream of the RecordIO entry for the |
| * LogEntry corresponding to this Entry. |
| */ |
| uint64 offset = 1; |
| /* |
| * The sequence number of the first content entry. |
| * |
| * Text: This is the line index of the first included line. Line indices |
| * begin at zero. |
| * Binary: This is the byte offset of the first byte in the included data. |
| * Datagram: This is the index of the datagram. The first datagram has index |
| * zero. |
| */ |
| uint64 sequence = 2; |
| |
| /* |
| * The log index that this entry describes (required). |
| * |
| * This is used by clients to identify a specific LogEntry within a set of |
| * streams sharing a Prefix. |
| */ |
| uint64 prefix_index = 3; |
| |
| /* |
| * The time offset of this log entry (required). |
| * |
| * This is used by clients to identify a specific LogEntry within a log |
| * stream. |
| */ |
| uint64 stream_index = 4; |
| |
| /* |
| * The time offset of this log entry, in microseconds. |
| * |
| * This is added to the descriptor's "timestamp" field to identify the |
| * specific timestamp of this log. It is used by clients to identify a |
| * specific LogEntry by time. |
| */ |
| google.protobuf.Duration time_offset = 5; |
| } |
| |
| /* |
| * A series of ascending-ordered Entry messages representing snapshots of an |
| * archived log stream. |
| * |
| * Within this set of Entry messages, the "offset", "prefix_index", |
| * "stream_index", and "time_offset" fields will be ascending. |
| * |
| * The frequency of Entry messages is not defined; it is up to the Archivist |
| * process to choose a frequency. |
| */ |
| repeated Entry entries = 2; |
| |
| /** |
| * The last prefix index in the log stream. |
| * |
| * This is optional. If zero, there is either no information about the last |
| * prefix index, or there are zero entries in the prefix. |
| */ |
| uint64 last_prefix_index = 3; |
| /** |
| * The last stream index in the log stream. |
| * |
| * This is optional. If zero, there is either no information about the last |
| * stream index, or there are zero entries in the stream. |
| */ |
| uint64 last_stream_index = 4; |
| /** |
| * The number of log entries in the stream. |
| * |
| * This is optional. If zero, there is either no information about the number |
| * of log entries, or there are zero entries in the stream. |
| */ |
| uint64 log_entry_count = 5; |
| } |