| // Copyright 2017 Google Inc. |
| // |
| // 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.devtools.clouddebugger.v2; |
| |
| import "google/api/annotations.proto"; |
| import "google/devtools/clouddebugger/v2/data.proto"; |
| import "google/protobuf/empty.proto"; |
| |
| option go_package = "google.golang.org/genproto/googleapis/devtools/clouddebugger/v2;clouddebugger"; |
| option java_multiple_files = true; |
| option java_outer_classname = "ControllerProto"; |
| option java_package = "com.google.devtools.clouddebugger.v2"; |
| |
| |
| // The Controller service provides the API for orchestrating a collection of |
| // debugger agents to perform debugging tasks. These agents are each attached |
| // to a process of an application which may include one or more replicas. |
| // |
| // The debugger agents register with the Controller to identify the application |
| // being debugged, the Debuggee. All agents that register with the same data, |
| // represent the same Debuggee, and are assigned the same `debuggee_id`. |
| // |
| // The debugger agents call the Controller to retrieve the list of active |
| // Breakpoints. Agents with the same `debuggee_id` get the same breakpoints |
| // list. An agent that can fulfill the breakpoint request updates the |
| // Controller with the breakpoint result. The controller selects the first |
| // result received and discards the rest of the results. |
| // Agents that poll again for active breakpoints will no longer have |
| // the completed breakpoint in the list and should remove that breakpoint from |
| // their attached process. |
| // |
| // The Controller service does not provide a way to retrieve the results of |
| // a completed breakpoint. This functionality is available using the Debugger |
| // service. |
| service Controller2 { |
| // Registers the debuggee with the controller service. |
| // |
| // All agents attached to the same application should call this method with |
| // the same request content to get back the same stable `debuggee_id`. Agents |
| // should call this method again whenever `google.rpc.Code.NOT_FOUND` is |
| // returned from any controller method. |
| // |
| // This allows the controller service to disable the agent or recover from any |
| // data loss. If the debuggee is disabled by the server, the response will |
| // have `is_disabled` set to `true`. |
| rpc RegisterDebuggee(RegisterDebuggeeRequest) returns (RegisterDebuggeeResponse) { |
| option (google.api.http) = { post: "/v2/controller/debuggees/register" body: "*" }; |
| } |
| |
| // Returns the list of all active breakpoints for the debuggee. |
| // |
| // The breakpoint specification (location, condition, and expression |
| // fields) is semantically immutable, although the field values may |
| // change. For example, an agent may update the location line number |
| // to reflect the actual line where the breakpoint was set, but this |
| // doesn't change the breakpoint semantics. |
| // |
| // This means that an agent does not need to check if a breakpoint has changed |
| // when it encounters the same breakpoint on a successive call. |
| // Moreover, an agent should remember the breakpoints that are completed |
| // until the controller removes them from the active list to avoid |
| // setting those breakpoints again. |
| rpc ListActiveBreakpoints(ListActiveBreakpointsRequest) returns (ListActiveBreakpointsResponse) { |
| option (google.api.http) = { get: "/v2/controller/debuggees/{debuggee_id}/breakpoints" }; |
| } |
| |
| // Updates the breakpoint state or mutable fields. |
| // The entire Breakpoint message must be sent back to the controller |
| // service. |
| // |
| // Updates to active breakpoint fields are only allowed if the new value |
| // does not change the breakpoint specification. Updates to the `location`, |
| // `condition` and `expression` fields should not alter the breakpoint |
| // semantics. These may only make changes such as canonicalizing a value |
| // or snapping the location to the correct line of code. |
| rpc UpdateActiveBreakpoint(UpdateActiveBreakpointRequest) returns (UpdateActiveBreakpointResponse) { |
| option (google.api.http) = { put: "/v2/controller/debuggees/{debuggee_id}/breakpoints/{breakpoint.id}" body: "*" }; |
| } |
| } |
| |
| // Request to register a debuggee. |
| message RegisterDebuggeeRequest { |
| // Debuggee information to register. |
| // The fields `project`, `uniquifier`, `description` and `agent_version` |
| // of the debuggee must be set. |
| Debuggee debuggee = 1; |
| } |
| |
| // Response for registering a debuggee. |
| message RegisterDebuggeeResponse { |
| // Debuggee resource. |
| // The field `id` is guranteed to be set (in addition to the echoed fields). |
| Debuggee debuggee = 1; |
| } |
| |
| // Request to list active breakpoints. |
| message ListActiveBreakpointsRequest { |
| // Identifies the debuggee. |
| string debuggee_id = 1; |
| |
| // A wait token that, if specified, blocks the method call until the list |
| // of active breakpoints has changed, or a server selected timeout has |
| // expired. The value should be set from the last returned response. |
| string wait_token = 2; |
| |
| // If set to `true`, returns `google.rpc.Code.OK` status and sets the |
| // `wait_expired` response field to `true` when the server-selected timeout |
| // has expired (recommended). |
| // |
| // If set to `false`, returns `google.rpc.Code.ABORTED` status when the |
| // server-selected timeout has expired (deprecated). |
| bool success_on_timeout = 3; |
| } |
| |
| // Response for listing active breakpoints. |
| message ListActiveBreakpointsResponse { |
| // List of all active breakpoints. |
| // The fields `id` and `location` are guaranteed to be set on each breakpoint. |
| repeated Breakpoint breakpoints = 1; |
| |
| // A wait token that can be used in the next method call to block until |
| // the list of breakpoints changes. |
| string next_wait_token = 2; |
| |
| // The `wait_expired` field is set to true by the server when the |
| // request times out and the field `success_on_timeout` is set to true. |
| bool wait_expired = 3; |
| } |
| |
| // Request to update an active breakpoint. |
| message UpdateActiveBreakpointRequest { |
| // Identifies the debuggee being debugged. |
| string debuggee_id = 1; |
| |
| // Updated breakpoint information. |
| // The field 'id' must be set. |
| Breakpoint breakpoint = 2; |
| } |
| |
| // Response for updating an active breakpoint. |
| // The message is defined to allow future extensions. |
| message UpdateActiveBreakpointResponse { |
| |
| } |