// Copyright 2016-2018, Pulumi Corporation.
//
// 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";

import "google/protobuf/empty.proto";

package pulumirpc;

// Engine is an interface into the core engine responsible for orchestrating resource operations.
service Engine {
    // Log logs a global message in the engine, including errors and warnings.
    rpc Log(LogRequest) returns (google.protobuf.Empty) {}
}

// LogSeverity is the severity level of a log message.  Errors are fatal; all others are informational.
enum LogSeverity {
    DEBUG = 0;   // a debug-level message not displayed to end-users (the default).
    INFO = 1;    // an informational message printed to output during resource operations.
    WARNING = 2; // a warning to indicate that something went wrong.
    ERROR = 3;   // a fatal error indicating that the tool should stop processing subsequent resource operations.
}

message LogRequest {
    // the logging level of this message.
    LogSeverity severity = 1;

    // the contents of the logged message.
    string message = 2;

    // the (optional) resource urn this log is associated with.
    string urn = 3;

    // the (optional) stream id that a stream of log messages can be associated with. This allows
    // clients to not have to buffer a large set of log messages that they all want to be
    // conceptually connected.  Instead the messages can be sent as chunks (with the same stream id)
    // and the end display can show the messages as they arrive, while still stitching them together
    // into one total log message.
    //
    // 0/not-given means: do not associate with any stream.
    int32 streamId = 4;
}