syntax = "proto3"; package containerd.services.events.v1; import weak "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto"; import weak "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; option go_package = "github.com/containerd/containerd/api/services/events/v1;events"; service Events { // Publish an event to a topic. // // The event will be packed into a timestamp envelope with the namespace // introspected from the context. The envelope will then be dispatched. rpc Publish(PublishRequest) returns (google.protobuf.Empty); // Forward sends an event that has already been packaged into an envelope // with a timestamp and namespace. // // This is useful if earlier timestamping is required or when fowarding on // behalf of another component, namespace or publisher. rpc Forward(ForwardRequest) returns (google.protobuf.Empty); // Subscribe to a stream of events, possibly returning only that match any // of the provided filters. // // Unlike many other methods in containerd, subscribers will get messages // from all namespaces unless otherwise specified. If this is not desired, // a filter can be provided in the format 'namespace==' to // restrict the received events. rpc Subscribe(SubscribeRequest) returns (stream Envelope); } message PublishRequest { string topic = 1; google.protobuf.Any event = 2; } message ForwardRequest { Envelope envelope = 1; } message SubscribeRequest { repeated string filters = 1; } message Envelope { option (containerd.plugin.fieldpath) = true; google.protobuf.Timestamp timestamp = 1 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; string namespace = 2; string topic = 3; google.protobuf.Any event = 4; }