diff --git a/google/devtools/clouderrorreporting/README.md b/google/devtools/clouderrorreporting/README.md
new file mode 100644
index 000000000..3edcebe6f
--- /dev/null
+++ b/google/devtools/clouderrorreporting/README.md
@@ -0,0 +1 @@
+Read more about the Stackdriver Error Reporting API [here](https://cloud.google.com/error-reporting/reference/)
diff --git a/google/devtools/clouderrorreporting/v1beta1/common.proto b/google/devtools/clouderrorreporting/v1beta1/common.proto
new file mode 100644
index 000000000..0dca1cc62
--- /dev/null
+++ b/google/devtools/clouderrorreporting/v1beta1/common.proto
@@ -0,0 +1,154 @@
+// Copyright 2016 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.clouderrorreporting.v1beta1;
+
+import "google/api/annotations.proto";
+import "google/protobuf/timestamp.proto";
+
+option java_multiple_files = true;
+option java_outer_classname = "CommonProto";
+option java_package = "com.google.devtools.clouderrorreporting.v1beta1";
+
+
+// Description of a group of similar error events.
+message ErrorGroup {
+ // The group resource name.
+ // Example: projects/my-project-123/groups/my-groupid
+ string name = 1;
+
+ // Group IDs are unique for a given project. If the same kind of error
+ // occurs in different service contexts, it will receive the same group ID.
+ string group_id = 2;
+
+ // Associated tracking issues.
+ repeated TrackingIssue tracking_issues = 3;
+}
+
+// Information related to tracking the progress on resolving the error.
+message TrackingIssue {
+ // A URL pointing to a related entry in an issue tracking system.
+ // Example: https://github.com/user/project/issues/4
+ string url = 1;
+}
+
+// An error event which is returned by the Error Reporting system.
+message ErrorEvent {
+ // Time when the event occurred as provided in the error report.
+ // If the report did not contain a timestamp, the time the error was received
+ // by the Error Reporting system is used.
+ google.protobuf.Timestamp event_time = 1;
+
+ // The `ServiceContext` for which this error was reported.
+ ServiceContext service_context = 2;
+
+ // The stack trace that was reported or logged by the service.
+ string message = 3;
+
+ // Data about the context in which the error occurred.
+ ErrorContext context = 5;
+}
+
+// Describes a running service that sends errors.
+// Its version changes over time and multiple versions can run in parallel.
+message ServiceContext {
+ // An identifier of the service, such as the name of the
+ // executable, job, or Google App Engine service name. This field is expected
+ // to have a low number of values that are relatively stable over time, as
+ // opposed to `version`, which can be changed whenever new code is deployed.
+ //
+ // Contains the service name for error reports extracted from Google
+ // App Engine logs or `default` if the App Engine default service is used.
+ string service = 2;
+
+ // Represents the source code version that the developer provided,
+ // which could represent a version label or a Git SHA-1 hash, for example.
+ string version = 3;
+}
+
+// A description of the context in which an error occurred.
+// This data should be provided by the application when reporting an error,
+// unless the
+// error report has been generated automatically from Google App Engine logs.
+message ErrorContext {
+ // The HTTP request which was processed when the error was
+ // triggered.
+ HttpRequestContext http_request = 1;
+
+ // The user who caused or was affected by the crash.
+ // This can be a user ID, an email address, or an arbitrary token that
+ // uniquely identifies the user.
+ // When sending an error report, leave this field empty if the user was not
+ // logged in. In this case the
+ // Error Reporting system will use other data, such as remote IP address, to
+ // distinguish affected users. See `affected_users_count` in
+ // `ErrorGroupStats`.
+ string user = 2;
+
+ // The location in the source code where the decision was made to
+ // report the error, usually the place where it was logged.
+ // For a logged exception this would be the source line where the
+ // exception is logged, usually close to the place where it was
+ // caught. This value is in contrast to `Exception.cause_location`,
+ // which describes the source line where the exception was thrown.
+ SourceLocation report_location = 3;
+}
+
+// HTTP request data that is related to a reported error.
+// This data should be provided by the application when reporting an error,
+// unless the
+// error report has been generated automatically from Google App Engine logs.
+message HttpRequestContext {
+ // The type of HTTP request, such as `GET`, `POST`, etc.
+ string method = 1;
+
+ // The URL of the request.
+ string url = 2;
+
+ // The user agent information that is provided with the request.
+ string user_agent = 3;
+
+ // The referrer information that is provided with the request.
+ string referrer = 4;
+
+ // The HTTP response status code for the request.
+ int32 response_status_code = 5;
+
+ // The IP address from which the request originated.
+ // This can be IPv4, IPv6, or a token which is derived from the
+ // IP address, depending on the data that has been provided
+ // in the error report.
+ string remote_ip = 6;
+}
+
+// Indicates a location in the source code of the service for which
+// errors are reported.
+// This data should be provided by the application when reporting an error,
+// unless the error report has been generated automatically from Google App
+// Engine logs. All fields are optional.
+message SourceLocation {
+ // The source code filename, which can include a truncated relative
+ // path, or a full path from a production machine.
+ string file_path = 1;
+
+ // 1-based. 0 indicates that the line number is unknown.
+ int32 line_number = 2;
+
+ // Human-readable name of a function or method.
+ // The value can include optional context like the class or package name.
+ // For example, `my.package.MyClass.method` in case of Java.
+ string function_name = 4;
+}
diff --git a/google/devtools/clouderrorreporting/v1beta1/error_group_service.proto b/google/devtools/clouderrorreporting/v1beta1/error_group_service.proto
new file mode 100644
index 000000000..6501ed8c8
--- /dev/null
+++ b/google/devtools/clouderrorreporting/v1beta1/error_group_service.proto
@@ -0,0 +1,58 @@
+// Copyright 2016 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.clouderrorreporting.v1beta1;
+
+import "google/api/annotations.proto";
+import "google/devtools/clouderrorreporting/v1beta1/common.proto";
+
+option java_multiple_files = true;
+option java_outer_classname = "ErrorGroupServiceProto";
+option java_package = "com.google.devtools.clouderrorreporting.v1beta1";
+
+
+// Service for retrieving and updating individual error groups.
+service ErrorGroupService {
+ // Get the specified group.
+ rpc GetGroup(GetGroupRequest) returns (ErrorGroup) {
+ option (google.api.http) = { get: "/v1beta1/{group_name=projects/*/groups/*}" };
+ }
+
+ // Replace the data for the specified group.
+ // Fails if the group does not exist.
+ rpc UpdateGroup(UpdateGroupRequest) returns (ErrorGroup) {
+ option (google.api.http) = { put: "/v1beta1/{group.name=projects/*/groups/*}" body: "group" };
+ }
+}
+
+// A request to return an individual group.
+message GetGroupRequest {
+ // [Required] The group resource name. Written as
+ // projects/projectID/groups/group_name
.
+ // Call
+ //
+ // groupStats.list
to return a list of groups belonging to
+ // this project.
+ //
+ // Example: projects/my-project-123/groups/my-group
+ string group_name = 1;
+}
+
+// A request to replace the existing data for the given group.
+message UpdateGroupRequest {
+ // [Required] The group which replaces the resource on the server.
+ ErrorGroup group = 1;
+}
diff --git a/google/devtools/clouderrorreporting/v1beta1/error_stats_service.proto b/google/devtools/clouderrorreporting/v1beta1/error_stats_service.proto
new file mode 100644
index 000000000..b58836f48
--- /dev/null
+++ b/google/devtools/clouderrorreporting/v1beta1/error_stats_service.proto
@@ -0,0 +1,323 @@
+// Copyright 2016 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.clouderrorreporting.v1beta1;
+
+import "google/api/annotations.proto";
+import "google/devtools/clouderrorreporting/v1beta1/common.proto";
+import "google/protobuf/duration.proto";
+import "google/protobuf/timestamp.proto";
+
+option java_multiple_files = true;
+option java_outer_classname = "ErrorStatsServiceProto";
+option java_package = "com.google.devtools.clouderrorreporting.v1beta1";
+
+
+// An API for retrieving and managing error statistics as well as data for
+// individual events.
+service ErrorStatsService {
+ // Lists the specified groups.
+ rpc ListGroupStats(ListGroupStatsRequest) returns (ListGroupStatsResponse) {
+ option (google.api.http) = { get: "/v1beta1/{project_name=projects/*}/groupStats" };
+ }
+
+ // Lists the specified events.
+ rpc ListEvents(ListEventsRequest) returns (ListEventsResponse) {
+ option (google.api.http) = { get: "/v1beta1/{project_name=projects/*}/events" };
+ }
+
+ // Deletes all error events of a given project.
+ rpc DeleteEvents(DeleteEventsRequest) returns (DeleteEventsResponse) {
+ option (google.api.http) = { delete: "/v1beta1/{project_name=projects/*}/events" };
+ }
+}
+
+// Specifies a set of `ErrorGroupStats` to return.
+message ListGroupStatsRequest {
+ // [Required] The resource name of the Google Cloud Platform project. Written
+ // as projects/
plus the
+ // Google Cloud
+ // Platform project ID.
+ //
+ // Example: projects/my-project-123
.
+ string project_name = 1;
+
+ // [Optional] List all ErrorGroupStats
with these IDs.
+ // If not specified, all error group stats with a non-zero error count
+ // for the given selection criteria are returned.
+ repeated string group_id = 2;
+
+ // [Optional] List only ErrorGroupStats
which belong to a service
+ // context that matches the filter.
+ // Data for all service contexts is returned if this field is not specified.
+ ServiceContextFilter service_filter = 3;
+
+ // [Required] List data for the given time range.
+ // The service is tuned for retrieving data up to (approximately) 'now'.
+ // Retrieving data for arbitrary time periods in the past can result in
+ // higher response times or in returning incomplete results.
+ QueryTimeRange time_range = 5;
+
+ // [Optional] The preferred duration for a single returned `TimedCount`.
+ // If not set, no timed counts are returned.
+ google.protobuf.Duration timed_count_duration = 6;
+
+ // [Optional] The alignment of the timed counts to be returned.
+ // Default is `ALIGNMENT_EQUAL_AT_END`.
+ TimedCountAlignment alignment = 7;
+
+ // [Optional] Time where the timed counts shall be aligned if rounded
+ // alignment is chosen. Default is 00:00 UTC.
+ google.protobuf.Timestamp alignment_time = 8;
+
+ // [Optional] The sort order in which the results are returned.
+ // Default is `COUNT_DESC`.
+ ErrorGroupOrder order = 9;
+
+ // [Optional] The maximum number of results to return per response.
+ // Default is 20.
+ int32 page_size = 11;
+
+ // [Optional] A `next_page_token` provided by a previous response. To view
+ // additional results, pass this token along with the identical query
+ // parameters as the first request.
+ string page_token = 12;
+}
+
+// Contains a set of requested error group stats.
+message ListGroupStatsResponse {
+ // The error group stats which match the given request.
+ repeated ErrorGroupStats error_group_stats = 1;
+
+ // If non-empty, more results are available.
+ // Pass this token, along with the same query parameters as the first
+ // request, to view the next page of results.
+ string next_page_token = 2;
+}
+
+// Data extracted for a specific group based on certain selection criteria,
+// such as a given time period and/or service filter.
+message ErrorGroupStats {
+ // Group data that is independent of the selection criteria.
+ ErrorGroup group = 1;
+
+ // Approximate total number of events in the given group that match
+ // the selection criteria.
+ int64 count = 2;
+
+ // Approximate number of affected users in the given group that
+ // match the selection criteria.
+ // Users are distinguished by data in the `ErrorContext` of the
+ // individual error events, such as their login name or their remote
+ // IP address in case of HTTP requests.
+ // The number of affected users can be zero even if the number of
+ // errors is non-zero if no data was provided from which the
+ // affected user could be deduced.
+ // Users are counted based on data in the request
+ // context that was provided in the error report. If more users are
+ // implicitly affected, such as due to a crash of the whole service,
+ // this is not reflected here.
+ int64 affected_users_count = 3;
+
+ // Approximate number of occurrences over time.
+ // Timed counts returned by ListGroups are guaranteed to be:
+ //
+ // - Inside the requested time interval
+ // - Non-overlapping, and
+ // - Ordered by ascending time.
+ repeated TimedCount timed_counts = 4;
+
+ // Approximate first occurrence that was seen for this group and
+ // which matches the given selection criteria.
+ google.protobuf.Timestamp first_seen_time = 5;
+
+ // Approximate last occurrence that was seen for this group
+ // and which matches the given selection criteria.
+ google.protobuf.Timestamp last_seen_time = 6;
+
+ // Service contexts with a non-zero error count for the given selection
+ // criteria. This list can be truncated if multiple services are affected.
+ // Refer to `num_affected_services` for the total count.
+ repeated ServiceContext affected_services = 7;
+
+ // The total number of services with a non-zero error count for the given
+ // selection criteria.
+ int32 num_affected_services = 8;
+
+ // An arbitrary event that is chosen as representative for the whole group.
+ // The representative event is intended to be used as a quick preview for
+ // the whole group. Events in the group are usually sufficiently similar
+ // to each other such that showing an arbitrary representative provides
+ // insight into the characteristics of the group as a whole.
+ ErrorEvent representative = 9;
+}
+
+// The number of errors in a given time period.
+// All numbers are approximate since the error events are sampled
+// before counting them.
+message TimedCount {
+ // Approximate number of occurrences in the given time period.
+ int64 count = 1;
+
+ // Start of the time period to which `count` refers (included).
+ google.protobuf.Timestamp start_time = 2;
+
+ // End of the time period to which `count` refers (excluded).
+ google.protobuf.Timestamp end_time = 3;
+}
+
+// Specifies a set of error events to return.
+message ListEventsRequest {
+ // [Required] The resource name of the Google Cloud Platform project. Written
+ // as `projects/` plus the
+ // [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840).
+ // Example: `projects/my-project-123`.
+ string project_name = 1;
+
+ // [Required] The group for which events shall be returned.
+ string group_id = 2;
+
+ // [Optional] List only ErrorGroups which belong to a service context that
+ // matches the filter.
+ // Data for all service contexts is returned if this field is not specified.
+ ServiceContextFilter service_filter = 3;
+
+ // [Optional] List only data for the given time range.
+ // The service is tuned for retrieving data up to (approximately) 'now'.
+ // Retrieving data for arbitrary time periods in the past can result in
+ // higher response times or in returning incomplete results.
+ // Data for the last hour until now is returned if not specified.
+ QueryTimeRange time_range = 4;
+
+ // [Optional] The maximum number of results to return per response.
+ int32 page_size = 6;
+
+ // [Optional] A `next_page_token` provided by a previous response.
+ string page_token = 7;
+}
+
+// Contains a set of requested error events.
+message ListEventsResponse {
+ // The error events which match the given request.
+ repeated ErrorEvent error_events = 1;
+
+ // If non-empty, more results are available.
+ // Pass this token, along with the same query parameters as the first
+ // request, to view the next page of results.
+ string next_page_token = 2;
+}
+
+// Requests might be rejected or the resulting timed count durations might be
+// adjusted for lower durations.
+message QueryTimeRange {
+ // The supported time ranges.
+ enum Period {
+ // Do not use.
+ PERIOD_UNSPECIFIED = 0;
+
+ // Retrieve data for the last hour.
+ // Recommended minimum timed count duration: 1 min.
+ PERIOD_1_HOUR = 1;
+
+ // Retrieve data for the last 6 hours.
+ // Recommended minimum timed count duration: 10 min.
+ PERIOD_6_HOURS = 2;
+
+ // Retrieve data for the last day.
+ // Recommended minimum timed count duration: 1 hour.
+ PERIOD_1_DAY = 3;
+
+ // Retrieve data for the last week.
+ // Recommended minimum timed count duration: 6 hours.
+ PERIOD_1_WEEK = 4;
+
+ // Retrieve data for the last 30 days.
+ // Recommended minimum timed count duration: 1 day.
+ PERIOD_30_DAYS = 5;
+ }
+
+ // Restricts the query to the specified time range.
+ Period period = 1;
+}
+
+// Specifies criteria for filtering a subset of service contexts.
+// The fields in the filter correspond to the fields in `ServiceContext`.
+// Only exact, case-sensitive matches are supported.
+// If a field is unset or empty, it matches arbitrary values.
+message ServiceContextFilter {
+ // [Optional] The exact value to match against
+ // [`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service).
+ string service = 2;
+
+ // [Optional] The exact value to match against
+ // [`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version).
+ string version = 3;
+}
+
+// Deletes all events in the project.
+message DeleteEventsRequest {
+ // [Required] The resource name of the Google Cloud Platform project. Written
+ // as `projects/` plus the
+ // [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840).
+ // Example: `projects/my-project-123`.
+ string project_name = 1;
+}
+
+// Response message for deleting error events.
+message DeleteEventsResponse {
+
+}
+
+// Specifies how the time periods of error group counts are aligned.
+enum TimedCountAlignment {
+ // No alignment specified.
+ ERROR_COUNT_ALIGNMENT_UNSPECIFIED = 0;
+
+ // The time periods shall be consecutive, have width equal to the
+ // requested duration, and be aligned at the `alignment_time` provided in
+ // the request.
+ // The `alignment_time` does not have to be inside the query period but
+ // even if it is outside, only time periods are returned which overlap
+ // with the query period.
+ // A rounded alignment will typically result in a
+ // different size of the first or the last time period.
+ ALIGNMENT_EQUAL_ROUNDED = 1;
+
+ // The time periods shall be consecutive, have width equal to the
+ // requested duration, and be aligned at the end of the requested time
+ // period. This can result in a different size of the
+ // first time period.
+ ALIGNMENT_EQUAL_AT_END = 2;
+}
+
+// A sorting order of error groups.
+enum ErrorGroupOrder {
+ // No group order specified.
+ GROUP_ORDER_UNSPECIFIED = 0;
+
+ // Total count of errors in the given time window in descending order.
+ COUNT_DESC = 1;
+
+ // Timestamp when the group was last seen in the given time window
+ // in descending order.
+ LAST_SEEN_DESC = 2;
+
+ // Timestamp when the group was created in descending order.
+ CREATED_DESC = 3;
+
+ // Number of affected users in the given time window in descending order.
+ AFFECTED_USERS_DESC = 4;
+}
diff --git a/google/devtools/clouderrorreporting/v1beta1/report_errors_service.proto b/google/devtools/clouderrorreporting/v1beta1/report_errors_service.proto
new file mode 100644
index 000000000..025360d31
--- /dev/null
+++ b/google/devtools/clouderrorreporting/v1beta1/report_errors_service.proto
@@ -0,0 +1,79 @@
+// Copyright 2016 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.clouderrorreporting.v1beta1;
+
+import "google/api/annotations.proto";
+import "google/devtools/clouderrorreporting/v1beta1/common.proto";
+import "google/protobuf/timestamp.proto";
+
+option java_multiple_files = true;
+option java_outer_classname = "ReportErrorsServiceProto";
+option java_package = "com.google.devtools.clouderrorreporting.v1beta1";
+
+
+// An API for reporting error events.
+service ReportErrorsService {
+ // Report an individual error event.
+ //
+ // This endpoint accepts either an OAuth token,
+ // or an
+ // API key
+ // for authentication. To use an API key, append it to the URL as the value of
+ // a `key` parameter. For example:
+ //
POST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456+ rpc ReportErrorEvent(ReportErrorEventRequest) returns (ReportErrorEventResponse) { + option (google.api.http) = { post: "/v1beta1/{project_name=projects/*}/events:report" body: "event" }; + } +} + +// A request for reporting an individual error event. +message ReportErrorEventRequest { + // [Required] The resource name of the Google Cloud Platform project. Written + // as `projects/` plus the + // [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). + // Example: `projects/my-project-123`. + string project_name = 1; + + // [Required] The error event to be reported. + ReportedErrorEvent event = 2; +} + +// Response for reporting an individual error event. +// Data may be added to this message in the future. +message ReportErrorEventResponse { + +} + +// An error event which is reported to the Error Reporting system. +message ReportedErrorEvent { + // [Optional] Time when the event occurred. + // If not provided, the time when the event was received by the + // Error Reporting system will be used. + google.protobuf.Timestamp event_time = 1; + + // [Required] The service context in which this error has occurred. + ServiceContext service_context = 2; + + // [Required] A message describing the error. The message can contain an + // exception stack in one of the supported programming languages and formats. + // In that case, the message is parsed and detailed exception information + // is returned when retrieving the error event again. + string message = 3; + + // [Optional] A description of the context in which the error occurred. + ErrorContext context = 4; +}