You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
kratos/third_party/google/cloud/irm/v1alpha2/incidents_service.proto

832 lines
26 KiB

// Copyright 2018 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.irm.v1alpha2;
import "google/api/annotations.proto";
import "google/cloud/irm/v1alpha2/incidents.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";
option cc_enable_arenas = true;
option go_package = "google.golang.org/genproto/googleapis/cloud/irm/v1alpha2;irm";
option java_multiple_files = true;
option java_package = "com.google.irm.service.v1alpha2.api";
// The Incident API for Incident Response & Management.
service IncidentService {
// Creates a new incident.
rpc CreateIncident(CreateIncidentRequest) returns (Incident) {
option (google.api.http) = {
post: "/v1alpha2/{parent=projects/*}/incidents"
body: "incident"
};
}
// Returns an incident by name.
rpc GetIncident(GetIncidentRequest) returns (Incident) {
option (google.api.http) = {
get: "/v1alpha2/{name=projects/*/incidents/*}"
};
}
// Returns a list of incidents.
// Incidents are ordered by start time, with the most recent incidents first.
rpc SearchIncidents(SearchIncidentsRequest)
returns (SearchIncidentsResponse) {
option (google.api.http) = {
get: "/v1alpha2/{parent=projects/*}/incidents:search"
};
}
// Updates an existing incident.
rpc UpdateIncident(UpdateIncidentRequest) returns (Incident) {
option (google.api.http) = {
patch: "/v1alpha2/{incident.name=projects/*/incidents/*}"
body: "incident"
};
}
// Returns a list of incidents that are "similar" to the specified incident
// or signal. This functionality is provided on a best-effort basis and the
// definition of "similar" is subject to change.
rpc SearchSimilarIncidents(SearchSimilarIncidentsRequest)
returns (SearchSimilarIncidentsResponse) {
option (google.api.http) = {
get: "/v1alpha2/{name=projects/*/incidents/*}:searchSimilar"
additional_bindings {
get: "/v1alpha2/{name=projects/*/signals/*}:searchSimilarIncidents"
}
};
}
// Creates an annotation on an existing incident. Only 'text/plain' and
// 'text/markdown' annotations can be created via this method.
rpc CreateAnnotation(CreateAnnotationRequest) returns (Annotation) {
option (google.api.http) = {
post: "/v1alpha2/{parent=projects/*/incidents/*}/annotations"
body: "annotation"
};
}
// Lists annotations that are part of an incident. No assumptions should be
// made on the content-type of the annotation returned.
rpc ListAnnotations(ListAnnotationsRequest)
returns (ListAnnotationsResponse) {
option (google.api.http) = {
get: "/v1alpha2/{parent=projects/*/incidents/*}/annotations"
};
}
// Creates a tag on an existing incident.
rpc CreateTag(CreateTagRequest) returns (Tag) {
option (google.api.http) = {
post: "/v1alpha2/{parent=projects/*/incidents/*}/tags"
body: "tag"
};
}
// Deletes an existing tag.
rpc DeleteTag(DeleteTagRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1alpha2/{name=projects/*/incidents/*/tags/*}"
};
}
// Lists tags that are part of an incident.
rpc ListTags(ListTagsRequest) returns (ListTagsResponse) {
option (google.api.http) = {
get: "/v1alpha2/{parent=projects/*/incidents/*}/tags"
};
}
// Creates a new signal.
rpc CreateSignal(CreateSignalRequest) returns (Signal) {
option (google.api.http) = {
post: "/v1alpha2/{parent=projects/*}/signals"
body: "signal"
};
}
// Lists signals that are part of an incident.
// Signals are returned in reverse chronological order.
rpc SearchSignals(SearchSignalsRequest) returns (SearchSignalsResponse) {
option (google.api.http) = {
get: "/v1alpha2/{parent=projects/*}/signals:search"
};
}
// Returns a signal by name.
rpc GetSignal(GetSignalRequest) returns (Signal) {
option (google.api.http) = {
get: "/v1alpha2/{name=projects/*/signals/*}"
};
}
// Updates an existing signal (for example, to assign/unassign it to an
// incident).
rpc UpdateSignal(UpdateSignalRequest) returns (Signal) {
option (google.api.http) = {
patch: "/v1alpha2/{signal.name=projects/*/signals/*}"
body: "signal"
};
}
// Escalates an incident.
rpc EscalateIncident(EscalateIncidentRequest)
returns (EscalateIncidentResponse) {
option (google.api.http) = {
post: "/v1alpha2/{incident.name=projects/*/incidents/*}:escalate"
body: "*"
};
}
// Creates a new artifact.
rpc CreateArtifact(CreateArtifactRequest) returns (Artifact) {
option (google.api.http) = {
post: "/v1alpha2/{parent=projects/*/incidents/*}/artifacts"
body: "artifact"
};
}
// Returns a list of artifacts for an incident.
rpc ListArtifacts(ListArtifactsRequest) returns (ListArtifactsResponse) {
option (google.api.http) = {
get: "/v1alpha2/{parent=projects/*/incidents/*}/artifacts"
};
}
// Updates an existing artifact.
rpc UpdateArtifact(UpdateArtifactRequest) returns (Artifact) {
option (google.api.http) = {
patch: "/v1alpha2/{artifact.name=projects/*/incidents/*/artifacts/*}"
body: "artifact"
};
}
// Deletes an existing artifact.
rpc DeleteArtifact(DeleteArtifactRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1alpha2/{name=projects/*/incidents/*/artifacts/*}"
};
}
// Sends a summary of the shift for oncall handoff.
rpc SendShiftHandoff(SendShiftHandoffRequest)
returns (SendShiftHandoffResponse) {
option (google.api.http) = {
post: "/v1alpha2/{parent=projects/*}/shiftHandoff:send"
body: "*"
};
}
// Creates a new subscription.
// This will fail if:
// a. there are too many (50) subscriptions in the incident already
// b. a subscription using the given channel already exists
rpc CreateSubscription(CreateSubscriptionRequest) returns (Subscription) {
option (google.api.http) = {
post: "/v1alpha2/{parent=projects/*/incidents/*}/subscriptions"
body: "subscription"
};
}
// Updates a subscription.
rpc UpdateSubscription(UpdateSubscriptionRequest) returns (Subscription) {
option (google.api.http) = {
patch: "/v1alpha2/{subscription.name=projects/*/incidents/*/subscriptions/*}"
body: "subscription"
};
}
// Returns a list of subscriptions for an incident.
rpc ListSubscriptions(ListSubscriptionsRequest)
returns (ListSubscriptionsResponse) {
option (google.api.http) = {
get: "/v1alpha2/{parent=projects/*/incidents/*}/subscriptions"
};
}
// Deletes an existing subscription.
rpc DeleteSubscription(DeleteSubscriptionRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1alpha2/{name=projects/*/incidents/*/subscriptions/*}"
};
}
// Creates a role assignment on an existing incident. Normally, the user field
// will be set when assigning a role to oneself, and the next field will be
// set when proposing another user as the assignee. Setting the next field
// directly to a user other than oneself is equivalent to proposing and
// force-assigning the role to the user.
rpc CreateIncidentRoleAssignment(CreateIncidentRoleAssignmentRequest)
returns (IncidentRoleAssignment) {
option (google.api.http) = {
post: "/v1alpha2/{parent=projects/*/incidents/*}/roleAssignments"
body: "*"
};
}
// Deletes an existing role assignment.
rpc DeleteIncidentRoleAssignment(DeleteIncidentRoleAssignmentRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1alpha2/{name=projects/*/incidents/*/roleAssignments/*}"
};
}
// Lists role assignments that are part of an incident.
rpc ListIncidentRoleAssignments(ListIncidentRoleAssignmentsRequest)
returns (ListIncidentRoleAssignmentsResponse) {
option (google.api.http) = {
get: "/v1alpha2/{parent=projects/*/incidents/*}/roleAssignments"
};
}
// Starts a role handover. The proposed assignee will receive an email
// notifying them of the assignment. This will fail if a role handover is
// already pending.
rpc RequestIncidentRoleHandover(RequestIncidentRoleHandoverRequest)
returns (IncidentRoleAssignment) {
option (google.api.http) = {
post: "/v1alpha2/{name=projects/*/incidents/*/roleAssignments/*}:requestHandover"
body: "*"
};
}
// Confirms a role handover. This will fail if the 'proposed_assignee' field
// of the IncidentRoleAssignment is not equal to the 'new_assignee' field of
// the request. If the caller is not the new_assignee,
// ForceIncidentRoleHandover should be used instead.
rpc ConfirmIncidentRoleHandover(ConfirmIncidentRoleHandoverRequest)
returns (IncidentRoleAssignment) {
option (google.api.http) = {
post: "/v1alpha2/{name=projects/*/incidents/*/roleAssignments/*}:confirmHandover"
body: "*"
};
}
// Forces a role handover. This will fail if the 'proposed_assignee' field of
// the IncidentRoleAssignment is not equal to the 'new_assignee' field of the
// request. If the caller is the new_assignee, ConfirmIncidentRoleHandover
// should be used instead.
rpc ForceIncidentRoleHandover(ForceIncidentRoleHandoverRequest)
returns (IncidentRoleAssignment) {
option (google.api.http) = {
post: "/v1alpha2/{name=projects/*/incidents/*/roleAssignments/*}:forceHandover"
body: "*"
};
}
// Cancels a role handover. This will fail if the 'proposed_assignee' field of
// the IncidentRoleAssignment is not equal to the 'new_assignee' field of the
// request.
rpc CancelIncidentRoleHandover(CancelIncidentRoleHandoverRequest)
returns (IncidentRoleAssignment) {
option (google.api.http) = {
post: "/v1alpha2/{name=projects/*/incidents/*/roleAssignments/*}:cancelHandover"
body: "*"
};
}
}
// Request for the CreateIncident method.
message CreateIncidentRequest {
// The incident to create.
Incident incident = 1;
// The resource name of the hosting Stackdriver project which the incident
// belongs to.
// The name is of the form `projects/{project_id_or_number}`
// .
string parent = 2;
}
// Request for the GetIncident method.
message GetIncidentRequest {
// Resource name of the incident, for example,
// "projects/{project_id}/incidents/{incident_id}".
string name = 1;
}
// Request for the UpdateIncident method.
message UpdateIncidentRequest {
// The incident to update with the new values.
Incident incident = 1;
// List of fields that should be updated.
google.protobuf.FieldMask update_mask = 2;
}
// Request for the SearchSimilarIncidents method.
message SearchSimilarIncidentsRequest {
// Resource name of the incident or signal, for example,
// "projects/{project_id}/incidents/{incident_id}".
string name = 1;
// Number of similar incidents to return.
int32 page_size = 2;
// Page token from an earlier query, as returned in 'next_page_token'.
string page_token = 3;
}
// Response for the SearchSimilarIncidents method.
message SearchSimilarIncidentsResponse {
// A single search result, i.e. an incident with (potentially) additional
// information.
message Result {
// An incident that is "similar" to the incident or signal specified in the
// request.
Incident incident = 1;
}
// The search results, ordered by descending relevance.
repeated Result results = 1;
// Page token to fetch the next set of similar incidents.
string next_page_token = 2;
}
// Request for the CreateAnnotation method.
message CreateAnnotationRequest {
// Resource name of the incident, for example,
// "projects/{project_id}/incidents/{incident_id}".
string parent = 1;
// Only annotation.content is an input argument.
Annotation annotation = 2;
}
// Request for the ListAnnotations method.
message ListAnnotationsRequest {
// Resource name of the incident, for example,
// "projects/{project_id}/incidents/{incident_id}".
string parent = 1;
// Number of annotations to return.
int32 page_size = 2;
// Page token from an earlier query, as returned in `next_page_token`.
string page_token = 3;
}
// Response for the ListAnnotations method.
message ListAnnotationsResponse {
// List of annotations.
repeated Annotation annotations = 1;
// Page token to fetch the next set of annotations.
string next_page_token = 2;
}
// Request for the CreateTag method.
message CreateTagRequest {
// Resource name of the incident, for example,
// "projects/{project_id}/incidents/{incident_id}".
string parent = 1;
// Tag to create. Only tag.display_name is an input argument.
Tag tag = 2;
}
// Request for the DeleteTag method.
message DeleteTagRequest {
// Resource name of the tag.
string name = 1;
}
// Request for the ListTagsForIncident method.
message ListTagsRequest {
// Resource name of the incident, for example,
// "projects/{project_id}/incidents/{incident_id}".
string parent = 1;
// Number of tags to return.
int32 page_size = 2;
// Page token from an earlier query, as returned in `next_page_token`.
string page_token = 3;
}
// Response for the ListTagsForIncident method.
message ListTagsResponse {
// Tags.
repeated Tag tags = 1;
// Page token to fetch the next set of tags.
string next_page_token = 2;
}
// Request for the CreateSignal method.
message CreateSignalRequest {
// The resource name of the hosting Stackdriver project which requested
// signal belongs to.
string parent = 1;
// The signal to create.
Signal signal = 2;
}
// Request for the SearchSignals method.
message SearchSignalsRequest {
// The resource name of the hosting Stackdriver project which requested
// incidents belong to.
string parent = 1;
// Query to specify which signals should be returned.
string query = 2;
// Maximum number of `signals` to return in the response.
int32 page_size = 3;
// Page token from an earlier query, as returned in `next_page_token`. All
// field values except for page_size and page_token should be the same as the
// original query (may return an error or unexpected data otherwise).
string page_token = 4;
}
// Response for the SearchSignals method.
message SearchSignalsResponse {
// Signals that matched the query in the request.
repeated Signal signals = 1;
// Page token to fetch the next set of signals.
string next_page_token = 2;
}
// Request for the GetSignal method.
message GetSignalRequest {
// Resource name of the Signal resource, for example,
// "projects/{project_id}/signals/{signal_id}".
string name = 1;
}
// Request for the UpdateSignal method.
message UpdateSignalRequest {
// The signal to update with the new values.
Signal signal = 1;
// List of fields that should be updated.
google.protobuf.FieldMask update_mask = 2;
}
// Request for the SearchIncidents method.
message SearchIncidentsRequest {
// The resource name of the hosting Stackdriver project which requested
// incidents belong to.
string parent = 1;
// An expression that defines which incidents to return.
//
// Search atoms can be used to match certain specific fields. Otherwise,
// plain text will match text fields in the incident.
//
// Search atoms:
// * `start` - (timestamp) The time the incident started.
// * `stage` - The stage of the incident, one of detected, triaged, mitigated,
// resolved, documented, or duplicate (which correspond to values in the
// Incident.Stage enum). These are ordered, so `stage<resolved` is
// equivalent to `stage:detected OR stage:triaged OR stage:mitigated`.
// * `severity` - (Incident.Severity) The severity of the incident.
// + Supports matching on a specific severity (for example,
// `severity:major`) or on a range (for example, `severity>medium`,
// `severity<=minor`, etc.).
//
// Timestamp formats:
// * yyyy-MM-dd - an absolute date, treated as a calendar-day-wide window.
// In other words, the "<" operator will match dates before that date, the
// ">" operator will match dates after that date, and the ":" or "="
// operators will match the entire day.
// * Nd (for example, 7d) - a relative number of days ago, treated as a moment
// in time (as opposed to a day-wide span). A multiple of 24 hours ago (as
// opposed to calendar days). In the case of daylight savings time, it will
// apply the current timezone to both ends of the range. Note that exact
// matching (for example, `start:7d`) is unlikely to be useful because that
// would only match incidents created precisely at a particular instant in
// time.
//
// Examples:
//
// * `foo` - matches incidents containing the word "foo"
// * `"foo bar"` - matches incidents containing the phrase "foo bar"
// * `foo bar` or `foo AND bar` - matches incidents containing the words "foo"
// and "bar"
// * `foo -bar` or `foo AND NOT bar` - matches incidents containing the word
// "foo" but not the word "bar"
// * `foo OR bar` - matches incidents containing the word "foo" or the word
// "bar"
// * `start>2018-11-28` - matches incidents which started after November 11,
// 2018.
// * `start<=2018-11-28` - matches incidents which started on or before
// November 11, 2018.
// * `start:2018-11-28` - matches incidents which started on November 11,
// 2018.
// * `start>7d` - matches incidents which started after the point in time 7*24
// hours ago
// * `start>180d` - similar to 7d, but likely to cross the daylight savings
// time boundary, so the end time will be 1 hour different from "now."
// * `foo AND start>90d AND stage<resolved` - unresolved incidents from the
// past 90 days containing the word "foo"
string query = 2;
// Number of incidents to return.
int32 page_size = 3;
// Page token from an earlier query, as returned in `next_page_token`.
string page_token = 4;
// The time zone name. It should be an IANA TZ name, such as
// "America/Los_Angeles". For more information,
// see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones.
// If no time zone is specified, the default is UTC.
string time_zone = 5;
}
// Response for the SearchIncidents method.
message SearchIncidentsResponse {
// Incidents.
repeated Incident incidents = 1;
// Page token to fetch the next set of incidents.
string next_page_token = 2;
}
// Request to escalate an incident.
message EscalateIncidentRequest {
// The incident to escalate with the new values.
Incident incident = 1;
// List of fields that should be updated.
google.protobuf.FieldMask update_mask = 2;
// Subscriptions to add or update. Existing subscriptions with the same
// channel and address as a subscription in the list will be updated.
repeated Subscription subscriptions = 3;
// Tags to add. Tags identical to existing tags will be ignored.
repeated Tag tags = 4;
// Roles to add or update. Existing roles with the same type (and title, for
// TYPE_OTHER roles) will be updated.
repeated IncidentRoleAssignment roles = 5;
// Artifacts to add. All artifacts are added without checking for duplicates.
repeated Artifact artifacts = 6;
}
// Response for EscalateIncident.
message EscalateIncidentResponse {
// The escalated incident.
Incident incident = 1;
// New or modified subscriptions.
repeated Subscription subscriptions = 2;
// New or modified tags.
repeated Tag tags = 3;
// New or modified roles.
repeated IncidentRole roles = 4;
// New or modified artifacts.
repeated Artifact artifacts = 5;
}
// Request for the CreateArtifact method.
message CreateArtifactRequest {
// Resource name of the incident, for example,
// "projects/{project_id}/incidents/{incident_id}".
string parent = 1;
// The artifact to create.
Artifact artifact = 2;
}
// Request for the ListArtifacts method.
message ListArtifactsRequest {
// Resource name of the incident, for example,
// "projects/{project_id}/incidents/{incident_id}".
string parent = 1;
// Number of artifacts to return.
int32 page_size = 2;
// Page token from an earlier query, as returned in `next_page_token`.
string page_token = 3;
}
// Response for the ListArtifacts method.
message ListArtifactsResponse {
// List of artifacts.
repeated Artifact artifacts = 1;
// Page token to fetch the next set of artifacts.
string next_page_token = 2;
}
// Request for the UpdateArtifact method.
message UpdateArtifactRequest {
// The artifact to update with the new values.
Artifact artifact = 1;
// List of fields that should be updated.
google.protobuf.FieldMask update_mask = 2;
}
// Request for deleting an artifact.
message DeleteArtifactRequest {
// Resource name of the artifact.
string name = 1;
}
// SendShiftHandoff and PreviewShiftHandoff RPC request.
message SendShiftHandoffRequest {
// Describes an incident for inclusion in the handoff.
// This is wrapped in a message to provide flexibility for potentially
// attaching additional data to each incident in the future.
message Incident {
// Resource name of the incident, for example,
// "projects/{project_id}/incidents/{incident_id}".
string name = 1;
}
// The resource name of the Stackdriver project that the handoff is being sent
// from. for example, `projects/{project_id}`
string parent = 1;
// Email addresses of the recipients of the handoff, for example,
// "user@example.com". Must contain at least one entry.
repeated string recipients = 2;
// Email addresses that should be CC'd on the handoff. Optional.
repeated string cc = 3;
// The subject of the email. Required.
string subject = 4;
// Content type string, for example, 'text/plain' or 'text/html'.
string notes_content_type = 5;
// Additional notes to be included in the handoff. Optional.
string notes_content = 6;
// The set of incidents that should be included in the handoff. Optional.
repeated Incident incidents = 7;
// If set to true a ShiftHandoffResponse will be returned but the handoff
// will not actually be sent.
bool preview_only = 8;
}
// SendShiftHandoff and PreviewShiftHandoff RPC response.
message SendShiftHandoffResponse {
// Content type string, for example, 'text/plain' or 'text/html'.
string content_type = 1;
// The contents of the handoff that was sent or would have been sent (if the
// request was preview_only).
// This will typically contain a full HTML document.
string content = 2;
}
// Request for the CreateSubscription method.
message CreateSubscriptionRequest {
// Resource name of the incident, for example,
// "projects/{project_id}/incidents/{incident_id}".
string parent = 1;
// The subscription to create.
Subscription subscription = 2;
}
// Request for the UpdateSubscription method.
message UpdateSubscriptionRequest {
// The subscription to update, with new values.
Subscription subscription = 1;
// List of fields that should be updated.
google.protobuf.FieldMask update_mask = 2;
}
// Request for the ListSubscriptions method.
message ListSubscriptionsRequest {
// Resource name of the incident, for example,
// "projects/{project_id}/incidents/{incident_id}".
string parent = 1;
// Number of subscriptions to return.
int32 page_size = 2;
// Page token from an earlier query, as returned in `next_page_token`.
string page_token = 3;
}
// Response for the ListSubscriptions method.
message ListSubscriptionsResponse {
// List of subscriptions.
repeated Subscription subscriptions = 1;
// Page token to fetch the next set of subscriptions.
string next_page_token = 2;
}
// Request for deleting a subscription.
message DeleteSubscriptionRequest {
// Resource name of the subscription.
string name = 1;
}
// Request for creating a role assignment.
message CreateIncidentRoleAssignmentRequest {
// Resource name of the incident, for example,
// "projects/{project_id}/incidents/{incident_id}".
string parent = 1;
// Role assignment to create.
IncidentRoleAssignment incident_role_assignment = 2;
}
// Request for deleting a role assignment.
message DeleteIncidentRoleAssignmentRequest {
// Resource name of the role assignment.
string name = 1;
}
// Request to list role assignments of an incident.
message ListIncidentRoleAssignmentsRequest {
// Resource name of the incident, for example,
// "projects/{project_id}/incidents/{incident_id}".
string parent = 1;
// Number of assignments to return.
int32 page_size = 2;
// Page token from an earlier query, as returned in `next_page_token`.
string page_token = 3;
}
// Response for the ListIncidentRoleAssignments method.
message ListIncidentRoleAssignmentsResponse {
// List of assignments.
repeated IncidentRoleAssignment incident_role_assignments = 1;
// Page token to fetch the next set of assignments.
string next_page_token = 2;
}
// Request to start a role handover.
message RequestIncidentRoleHandoverRequest {
// Resource name of the role assignment.
string name = 1;
// The proposed assignee.
User new_assignee = 2;
}
// Request to confirm a role handover.
message ConfirmIncidentRoleHandoverRequest {
// Resource name of the role assignment.
string name = 1;
// The proposed assignee, who will now be the assignee. This should be the
// current user; otherwise ForceRoleHandover should be called.
User new_assignee = 2;
}
// Request to force a role handover.
message ForceIncidentRoleHandoverRequest {
// Resource name of the role assignment.
string name = 1;
// The proposed assignee, who will now be the assignee. This should not be
// the current user; otherwise ConfirmRoleHandover should be called.
User new_assignee = 2;
}
// Request to cancel a role handover.
message CancelIncidentRoleHandoverRequest {
// Resource name of the role assignment.
string name = 1;
// Person who was proposed as the next assignee (i.e.
// IncidentRoleAssignment.proposed_assignee) and whose proposal is being
// cancelled.
User new_assignee = 2;
}