// Copyright 2024 Google LLC
//
// 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 google.cloud.discoveryengine.logging;

import "google/protobuf/struct.proto";
import "google/rpc/status.proto";

option csharp_namespace = "Google.Cloud.DiscoveryEngine.Logging";
option go_package = "cloud.google.com/go/discoveryengine/logging/loggingpb;loggingpb";
option java_multiple_files = true;
option java_outer_classname = "ErrorLogProto";
option java_package = "com.google.cloud.discoveryengine.logging";
option objc_class_prefix = "DISCOVERYENGINE";
option php_namespace = "Google\\Cloud\\DiscoveryEngine\\Logging";
option ruby_package = "Google::Cloud::DiscoveryEngine::Logging";

// Describes a running service that sends errors.
message ServiceContext {
  // An identifier of the service—for example, `discoveryengine.googleapis.com`.
  string service = 1;
}

// HTTP request data that is related to a reported error.
message HttpRequestContext {
  // The HTTP response status code for the request.
  int32 response_status_code = 1;
}

// Indicates a location in the source code of the service for which
// errors are reported.
message SourceLocation {
  // Human-readable name of a function or method—for example,
  // `google.cloud.discoveryengine.v1alpha.RecommendationService.Recommend`.
  string function_name = 1;
}

// A description of the context in which an error occurred.
message ErrorContext {
  // The HTTP request which was processed when the error was triggered.
  HttpRequestContext http_request = 1;

  // The location in the source code where the decision was made to
  // report the error, usually the place where it was logged.
  SourceLocation report_location = 2;
}

// The error payload that is populated on LRO import APIs, including the
// following:
//
// * `google.cloud.discoveryengine.v1alpha.DocumentService.ImportDocuments`
// * `google.cloud.discoveryengine.v1alpha.UserEventService.ImportUserEvents`
message ImportErrorContext {
  // The operation resource name of the LRO.
  string operation = 1;

  // Google Cloud Storage file path of the import source.
  // Can be set for batch operation error.
  string gcs_path = 2;

  // Line number of the content in file.
  // Should be empty for permission or batch operation error.
  string line_number = 3;

  // Detailed content which caused the error.
  // Should be empty for permission or batch operation error.
  oneof line_content {
    // The detailed content which caused the error on importing a document.
    string document = 4;

    // The detailed content which caused the error on importing a user event.
    string user_event = 5;
  }
}

// An error log which is reported to the Error Reporting system.
message ErrorLog {
  // The service context in which this error has occurred.
  ServiceContext service_context = 1;

  // A description of the context in which the error occurred.
  ErrorContext context = 2;

  // A message describing the error.
  string message = 3;

  // The RPC status associated with the error log.
  google.rpc.Status status = 4;

  // The API request payload, represented as a protocol buffer.
  //
  // Most API request types are supported—for example:
  //
  // * `type.googleapis.com/google.cloud.discoveryengine.v1alpha.DocumentService.CreateDocumentRequest`
  // * `type.googleapis.com/google.cloud.discoveryengine.v1alpha.UserEventService.WriteUserEventRequest`
  google.protobuf.Struct request_payload = 5;

  // The API response payload, represented as a protocol buffer.
  //
  // This is used to log some "soft errors", where the response is valid but we
  // consider there are some quality issues like unjoined events.
  //
  // The following API responses are supported, and no PII is included:
  //
  // * `google.cloud.discoveryengine.v1alpha.RecommendationService.Recommend`
  // * `google.cloud.discoveryengine.v1alpha.UserEventService.WriteUserEvent`
  // * `google.cloud.discoveryengine.v1alpha.UserEventService.CollectUserEvent`
  google.protobuf.Struct response_payload = 6;

  // The error payload that is populated on LRO import APIs.
  ImportErrorContext import_payload = 7;
}
