mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 19:07:30 +00:00
chore: service ping api design (#9984)
# Which Problems Are Solved Add the possibility to report information and analytical data from (self-hosted) ZITADEL systems to a central endpoint. To be able to do so an API has to be designed to receive the different reports and information. # How the Problems Are Solved - Telemetry service definition added, which currently has two endpoints: - ReportBaseInformation: To gather the zitadel version and instance information such as id and creation date - ReportResourceCounts: Dynamically report (based on #9979) different resources (orgs, users per org, ...) - To be able to paginate and send multiple pages to the endpoint a `report_id` is returned on the first page / request from the server, which needs to be passed by the client on the following pages. - Base error handling is described in the proto and is based on gRPC standards and best practices. # Additional Changes none # Additional Context Public documentation of the behaviour / error handling and what data is collected, resp. how to configure will be provided in https://github.com/zitadel/zitadel/issues/9869. Closes https://github.com/zitadel/zitadel/issues/9872
This commit is contained in:
48
proto/zitadel/analytics/v2beta/telemetry.proto
Normal file
48
proto/zitadel/analytics/v2beta/telemetry.proto
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package zitadel.analytics.v2beta;
|
||||||
|
|
||||||
|
import "google/protobuf/timestamp.proto";
|
||||||
|
|
||||||
|
option go_package = "github.com/zitadel/zitadel/pkg/grpc/analytics/v2beta;analytics";
|
||||||
|
|
||||||
|
|
||||||
|
message InstanceInformation {
|
||||||
|
// The unique identifier of the instance.
|
||||||
|
string id = 1;
|
||||||
|
// The custom domains (incl. generated ones) of the instance.
|
||||||
|
repeated string domains = 2;
|
||||||
|
// The creation date of the instance.
|
||||||
|
google.protobuf.Timestamp created_at = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ResourceCount {
|
||||||
|
// The ID of the instance for which the resource counts are reported.
|
||||||
|
string instance_id = 3;
|
||||||
|
// The parent type of the resource counts (e.g. organization or instance).
|
||||||
|
// For example, reporting the amount of users per organization would use
|
||||||
|
// `COUNT_PARENT_TYPE_ORGANIZATION` as parent type and the organization ID as parent ID.
|
||||||
|
CountParentType parent_type = 4;
|
||||||
|
// The parent ID of the resource counts (e.g. organization or instance ID).
|
||||||
|
// For example, reporting the amount of users per organization would use
|
||||||
|
// `COUNT_PARENT_TYPE_ORGANIZATION` as parent type and the organization ID as parent ID.
|
||||||
|
string parent_id = 5;
|
||||||
|
// The resource counts to report, e.g. amount of `users`, `organizations`, etc.
|
||||||
|
string resource_name = 6;
|
||||||
|
// The name of the table in the database, which was used to calculate the counts.
|
||||||
|
// This can be used to deduplicate counts in case of multiple reports.
|
||||||
|
// For example, if the counts were calculated from the `users14` table,
|
||||||
|
// the table name would be `users14`, where there could also be a `users15` table
|
||||||
|
// reported at the same time as the system is rolling out a new version.
|
||||||
|
string table_name = 7;
|
||||||
|
// The timestamp when the count was last updated.
|
||||||
|
google.protobuf.Timestamp updated_at = 8;
|
||||||
|
// The actual amount of the resource.
|
||||||
|
uint32 amount = 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum CountParentType {
|
||||||
|
COUNT_PARENT_TYPE_UNSPECIFIED = 0;
|
||||||
|
COUNT_PARENT_TYPE_INSTANCE = 1;
|
||||||
|
COUNT_PARENT_TYPE_ORGANIZATION = 2;
|
||||||
|
}
|
79
proto/zitadel/analytics/v2beta/telemetry_service.proto
Normal file
79
proto/zitadel/analytics/v2beta/telemetry_service.proto
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package zitadel.analytics.v2beta;
|
||||||
|
|
||||||
|
import "google/protobuf/timestamp.proto";
|
||||||
|
import "zitadel/analytics/v2beta/telemetry.proto";
|
||||||
|
|
||||||
|
option go_package = "github.com/zitadel/zitadel/pkg/grpc/analytics/v2beta;analytics";
|
||||||
|
|
||||||
|
// The TelemetryService is used to report telemetry such as usage statistics of the ZITADEL instance(s).
|
||||||
|
// back to a central storage.
|
||||||
|
// It is used to collect anonymized data about the usage of ZITADEL features, capabilities, and configurations.
|
||||||
|
// ZITADEL acts as a client of the TelemetryService.
|
||||||
|
//
|
||||||
|
// Reports are sent periodically based on the system's runtime configuration.
|
||||||
|
// The content of the reports, respectively the data collected, can be configured in the system's runtime configuration.
|
||||||
|
//
|
||||||
|
// All endpoints follow the same error and retry handling:
|
||||||
|
// In case of a failure to report the usage, ZITADEL will retry to report the usage
|
||||||
|
// based on the configured retry policy and error type:
|
||||||
|
// - Client side errors will not be retried, as they indicate a misconfiguration or an invalid request:
|
||||||
|
// - `INVALID_ARGUMENT`: The request was malformed.
|
||||||
|
// - `NOT_FOUND`: The TelemetryService's endpoint is likely misconfigured.
|
||||||
|
// - Connection / transfer errors will be retried based on the retry policy configured in the system's runtime configuration:
|
||||||
|
// - `DEADLINE_EXCEEDED`: The request took too long to complete, it will be retried.
|
||||||
|
// - `RESOURCE_EXHAUSTED`: The request was rejected due to resource exhaustion, it will be retried after a backoff period.
|
||||||
|
// - `UNAVAILABLE`: The TelemetryService is currently unavailable, it will be retried after a backoff period.
|
||||||
|
// Server side errors will also be retried based on the information provided by the server:
|
||||||
|
// - `FAILED_PRECONDITION`: The request failed due to a precondition, e.g. the report ID does not exists,
|
||||||
|
// does not correspond to the same system ID or previous reporting is too old, do not retry.
|
||||||
|
// - `INTERNAL`: An internal error occurred. Check details and logs.
|
||||||
|
service TelemetryService {
|
||||||
|
|
||||||
|
// ReportBaseInformation is used to report the base information of the ZITADEL system,
|
||||||
|
// including the version, instances, their creation date and domains.
|
||||||
|
// The response contains a report ID to link it to the resource counts or other reports.
|
||||||
|
// The report ID is only valid for the same system ID.
|
||||||
|
rpc ReportBaseInformation (ReportBaseInformationRequest) returns (ReportBaseInformationResponse) {}
|
||||||
|
|
||||||
|
// ReportResourceCounts is used to report the resource counts such as amount of organizations
|
||||||
|
// or users per organization and much more.
|
||||||
|
// Since the resource counts can be reported in multiple batches,
|
||||||
|
// the response contains a report ID to continue reporting.
|
||||||
|
// The report ID is only valid for the same system ID.
|
||||||
|
rpc ReportResourceCounts (ReportResourceCountsRequest) returns (ReportResourceCountsResponse) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
message ReportBaseInformationRequest {
|
||||||
|
// The system ID is a unique identifier for the ZITADEL system.
|
||||||
|
string system_id = 1;
|
||||||
|
// The current version of the ZITADEL system.
|
||||||
|
string version = 2;
|
||||||
|
// A list of instances in the ZITADEL system and their information.
|
||||||
|
repeated InstanceInformation instances = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ReportBaseInformationResponse {
|
||||||
|
// The report ID is a unique identifier for the report.
|
||||||
|
// It is used to identify the report to be able to link it to the resource counts or other reports.
|
||||||
|
// Note that the report ID is only valid for the same system ID.
|
||||||
|
string report_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ReportResourceCountsRequest {
|
||||||
|
// The system ID is a unique identifier for the ZITADEL system.
|
||||||
|
string system_id = 1;
|
||||||
|
// The previously returned report ID from the server to continue reporting.
|
||||||
|
// Note that the report ID is only valid for the same system ID.
|
||||||
|
optional string report_id = 2;
|
||||||
|
// A list of resource counts to report.
|
||||||
|
repeated ResourceCount resource_counts = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ReportResourceCountsResponse {
|
||||||
|
// The report ID is a unique identifier for the report.
|
||||||
|
// It is used to identify the report in case of additional data / pagination.
|
||||||
|
// Note that the report ID is only valid for the same system ID.
|
||||||
|
string report_id = 1;
|
||||||
|
}
|
Reference in New Issue
Block a user