From 7e9f9d6cbf41f7170c6610d864a02a148f78b6a0 Mon Sep 17 00:00:00 2001 From: Matt Toohey Date: Fri, 6 Dec 2024 14:52:53 +1100 Subject: [PATCH] feat: console and `ftl replay` use timeline service (#3652) closes https://github.com/TBD54566975/ftl/issues/3623 closes https://github.com/TBD54566975/ftl/issues/3624 Controller acts as a proxy for web console for the timeline service --- backend/controller/console/console.go | 447 +--- backend/controller/controller.go | 7 +- backend/controller/timeline/events_async.go | 49 - backend/controller/timeline/events_call.go | 127 -- backend/controller/timeline/events_cron.go | 43 - .../controller/timeline/events_deployment.go | 43 - backend/controller/timeline/events_ingress.go | 98 - backend/controller/timeline/events_log.go | 35 - .../timeline/events_pubsub_consume.go | 41 - .../timeline/events_pubsub_publish.go | 46 - .../timeline/internal/sql/models.go | 77 - backend/controller/timeline/query.go | 490 ----- backend/controller/timeline/timeline.go | 52 - .../xyz/block/ftl/console/v1/console.pb.go | 1839 ++++------------- .../xyz/block/ftl/console/v1/console.proto | 94 - .../v1/pbconsoleconnect/console.connect.go | 54 - .../xyz/block/ftl/timeline/v1/timeline.pb.go | 692 ++++--- .../xyz/block/ftl/timeline/v1/timeline.proto | 38 +- .../v1/timelinev1connect/timeline.connect.go | 33 +- backend/timeline/filters.go | 11 +- backend/timeline/service.go | 73 +- backend/timeline/service_test.go | 12 +- frontend/cli/cmd_replay.go | 25 +- .../src/api/timeline/timeline-filters.ts | 70 +- .../api/timeline/use-module-trace-events.ts | 4 +- .../api/timeline/use-request-trace-events.ts | 4 +- .../src/api/timeline/use-timeline-calls.ts | 4 +- .../console/src/api/timeline/use-timeline.ts | 14 +- .../src/features/timeline/Timeline.tsx | 4 +- .../src/features/timeline/TimelinePage.tsx | 6 +- .../timeline/filters/TimelineFilterPanel.tsx | 6 +- .../block/ftl/console/v1/console_connect.ts | 20 +- .../xyz/block/ftl/console/v1/console_pb.ts | 689 +----- .../block/ftl/timeline/v1/timeline_connect.ts | 15 +- .../xyz/block/ftl/timeline/v1/timeline_pb.ts | 168 +- .../xyz/block/ftl/console/v1/console_pb2.py | 131 +- .../xyz/block/ftl/console/v1/console_pb2.pyi | 120 -- .../xyz/block/ftl/timeline/v1/timeline_pb2.py | 77 +- .../block/ftl/timeline/v1/timeline_pb2.pyi | 28 +- 39 files changed, 1215 insertions(+), 4571 deletions(-) delete mode 100644 backend/controller/timeline/events_async.go delete mode 100644 backend/controller/timeline/events_call.go delete mode 100644 backend/controller/timeline/events_cron.go delete mode 100644 backend/controller/timeline/events_deployment.go delete mode 100644 backend/controller/timeline/events_ingress.go delete mode 100644 backend/controller/timeline/events_log.go delete mode 100644 backend/controller/timeline/events_pubsub_consume.go delete mode 100644 backend/controller/timeline/events_pubsub_publish.go delete mode 100644 backend/controller/timeline/internal/sql/models.go delete mode 100644 backend/controller/timeline/query.go delete mode 100644 backend/controller/timeline/timeline.go diff --git a/backend/controller/console/console.go b/backend/controller/console/console.go index aec15d7357..1b046f2010 100644 --- a/backend/controller/console/console.go +++ b/backend/controller/console/console.go @@ -3,44 +3,37 @@ package console import ( "context" "encoding/json" - "errors" "fmt" - "time" "connectrpc.com/connect" - "github.com/alecthomas/types/optional" - "google.golang.org/protobuf/types/known/durationpb" - "google.golang.org/protobuf/types/known/timestamppb" "github.com/TBD54566975/ftl/backend/controller/admin" "github.com/TBD54566975/ftl/backend/controller/dal" dalmodel "github.com/TBD54566975/ftl/backend/controller/dal/model" - "github.com/TBD54566975/ftl/backend/controller/timeline" pbconsole "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/console/v1" "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/console/v1/pbconsoleconnect" schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/schema/v1" - pbtimeline "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/timeline/v1" + timelinepb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/timeline/v1" + "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/timeline/v1/timelinev1connect" ftlv1 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" "github.com/TBD54566975/ftl/internal/buildengine" - "github.com/TBD54566975/ftl/internal/log" - "github.com/TBD54566975/ftl/internal/model" + "github.com/TBD54566975/ftl/internal/rpc" "github.com/TBD54566975/ftl/internal/schema" "github.com/TBD54566975/ftl/internal/slices" ) type ConsoleService struct { - dal *dal.DAL - timeline *timeline.Service - admin *admin.AdminService + dal *dal.DAL + admin *admin.AdminService } var _ pbconsoleconnect.ConsoleServiceHandler = (*ConsoleService)(nil) +var _ timelinev1connect.TimelineServiceHandler = (*ConsoleService)(nil) -func NewService(dal *dal.DAL, timeline *timeline.Service, admin *admin.AdminService) *ConsoleService { +func NewService(dal *dal.DAL, admin *admin.AdminService) *ConsoleService { return &ConsoleService{ - dal: dal, - timeline: timeline, - admin: admin, + dal: dal, + admin: admin, } } @@ -472,392 +465,6 @@ func addRefToSetMap(m map[schema.RefKey]map[schema.RefKey]bool, key schema.RefKe m[key][value.ToRefKey()] = true } -func (c *ConsoleService) GetEvents(ctx context.Context, req *connect.Request[pbconsole.GetEventsRequest]) (*connect.Response[pbconsole.GetEventsResponse], error) { - query, err := eventsQueryProtoToDAL(req.Msg) - if err != nil { - return nil, err - } - - if req.Msg.Limit == 0 { - return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("limit must be > 0")) - } - limit := int(req.Msg.Limit) - - // Get 1 more than the requested limit to determine if there are more results. - limitPlusOne := limit + 1 - - results, err := c.timeline.QueryTimeline(ctx, limitPlusOne, query...) - if err != nil { - return nil, err - } - - var cursor *int64 - // Return only the requested number of results. - if len(results) > limit { - results = results[:limit] - id := results[len(results)-1].GetID() - cursor = &id - } - - response := &pbconsole.GetEventsResponse{ - Events: slices.Map(results, eventDALToProto), - Cursor: cursor, - } - return connect.NewResponse(response), nil -} - -func (c *ConsoleService) StreamEvents(ctx context.Context, req *connect.Request[pbconsole.StreamEventsRequest], stream *connect.ServerStream[pbconsole.StreamEventsResponse]) error { - // Default to 1 second interval if not specified. - updateInterval := 1 * time.Second - if req.Msg.UpdateInterval != nil && req.Msg.UpdateInterval.AsDuration() > time.Second { // Minimum 1s interval. - updateInterval = req.Msg.UpdateInterval.AsDuration() - } - - if req.Msg.Query.Limit == 0 { - return connect.NewError(connect.CodeInvalidArgument, errors.New("limit must be > 0")) - } - - query, err := eventsQueryProtoToDAL(req.Msg.Query) - if err != nil { - return err - } - - // Default to last 1 day of events - var lastEventTime time.Time - for { - thisRequestTime := time.Now() - newQuery := query - - if !lastEventTime.IsZero() { - newQuery = append(newQuery, timeline.FilterTimeRange(thisRequestTime, lastEventTime)) - } - - events, err := c.timeline.QueryTimeline(ctx, int(req.Msg.Query.Limit), newQuery...) - if err != nil { - return err - } - - if len(events) > 0 { - err = stream.Send(&pbconsole.StreamEventsResponse{ - Events: slices.Map(events, eventDALToProto), - }) - if err != nil { - return err - } - } - - lastEventTime = thisRequestTime - select { - case <-time.After(updateInterval): - case <-ctx.Done(): - return nil - } - } -} - -//nolint:maintidx -func eventsQueryProtoToDAL(query *pbconsole.GetEventsRequest) ([]timeline.TimelineFilter, error) { - var result []timeline.TimelineFilter - - if query.Order == pbconsole.GetEventsRequest_ORDER_DESC { - result = append(result, timeline.FilterDescending()) - } - - for _, filter := range query.Filters { - switch f := filter.Filter.(type) { - case *pbconsole.GetEventsRequest_Filter_Deployments: - deploymentKeys := make([]model.DeploymentKey, 0, len(f.Deployments.Deployments)) - for _, deployment := range f.Deployments.Deployments { - deploymentKey, err := model.ParseDeploymentKey(deployment) - if err != nil { - return nil, connect.NewError(connect.CodeInvalidArgument, err) - } - deploymentKeys = append(deploymentKeys, deploymentKey) - } - result = append(result, timeline.FilterDeployments(deploymentKeys...)) - - case *pbconsole.GetEventsRequest_Filter_Requests: - requestKeys := make([]model.RequestKey, 0, len(f.Requests.Requests)) - for _, request := range f.Requests.Requests { - requestKey, err := model.ParseRequestKey(request) - if err != nil { - return nil, connect.NewError(connect.CodeInvalidArgument, err) - } - requestKeys = append(requestKeys, requestKey) - } - result = append(result, timeline.FilterRequests(requestKeys...)) - - case *pbconsole.GetEventsRequest_Filter_EventTypes: - var types []timeline.EventType - for _, t := range f.EventTypes.EventTypes { - types = append(types, timeline.EventType(t)) - } - result = append(result, timeline.FilterTypes(types...)) - - case *pbconsole.GetEventsRequest_Filter_LogLevel: - level := log.Level(f.LogLevel.LogLevel) - if level < log.Trace || level > log.Error { - return nil, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("unknown log level %v", f.LogLevel.LogLevel)) - } - result = append(result, timeline.FilterLogLevel(level)) - - case *pbconsole.GetEventsRequest_Filter_Time: - newerThan := f.Time.GetNewerThan().AsTime() - olderThan := f.Time.GetOlderThan().AsTime() - result = append(result, timeline.FilterTimeRange(olderThan, newerThan)) - - case *pbconsole.GetEventsRequest_Filter_Id: - lowerThan := f.Id.GetLowerThan() - higherThan := f.Id.GetHigherThan() - result = append(result, timeline.FilterIDRange(lowerThan, higherThan)) - - case *pbconsole.GetEventsRequest_Filter_Call: - sourceModule := optional.Zero(f.Call.GetSourceModule()) - destVerb := optional.Zero(f.Call.GetDestVerb()) - result = append(result, timeline.FilterCall(sourceModule, f.Call.DestModule, destVerb)) - - default: - return nil, fmt.Errorf("unknown filter type %T", f) - } - } - - return result, nil -} - -//nolint:maintidx -func eventDALToProto(event timeline.Event) *pbtimeline.Event { - switch event := event.(type) { - case *timeline.CallEvent: - var requestKey *string - if r, ok := event.RequestKey.Get(); ok { - rstr := r.String() - requestKey = &rstr - } - var sourceVerbRef *schemapb.Ref - if sourceVerb, ok := event.SourceVerb.Get(); ok { - sourceVerbRef = sourceVerb.ToProto().(*schemapb.Ref) //nolint:forcetypeassert - } - return &pbtimeline.Event{ - Timestamp: timestamppb.New(event.Time), - Id: event.ID, - Entry: &pbtimeline.Event_Call{ - Call: &pbtimeline.CallEvent{ - RequestKey: requestKey, - DeploymentKey: event.DeploymentKey.String(), - Timestamp: timestamppb.New(event.Time), - SourceVerbRef: sourceVerbRef, - DestinationVerbRef: &schemapb.Ref{ - Module: event.DestVerb.Module, - Name: event.DestVerb.Name, - }, - Duration: durationpb.New(event.Duration), - Request: string(event.Request), - Response: string(event.Response), - Error: event.Error.Ptr(), - Stack: event.Stack.Ptr(), - }, - }, - } - - case *timeline.LogEvent: - var requestKey *string - if r, ok := event.RequestKey.Get(); ok { - rstr := r.String() - requestKey = &rstr - } - return &pbtimeline.Event{ - Timestamp: timestamppb.New(event.Time), - Id: event.ID, - Entry: &pbtimeline.Event_Log{ - Log: &pbtimeline.LogEvent{ - DeploymentKey: event.DeploymentKey.String(), - RequestKey: requestKey, - Timestamp: timestamppb.New(event.Time), - LogLevel: event.Level, - Attributes: event.Attributes, - Message: event.Message, - Error: event.Error.Ptr(), - }, - }, - } - - case *timeline.DeploymentCreatedEvent: - var replaced *string - if r, ok := event.ReplacedDeployment.Get(); ok { - rstr := r.String() - replaced = &rstr - } - return &pbtimeline.Event{ - Timestamp: timestamppb.New(event.Time), - Id: event.ID, - Entry: &pbtimeline.Event_DeploymentCreated{ - DeploymentCreated: &pbtimeline.DeploymentCreatedEvent{ - Key: event.DeploymentKey.String(), - Language: event.Language, - ModuleName: event.ModuleName, - MinReplicas: int32(event.MinReplicas), - Replaced: replaced, - }, - }, - } - case *timeline.DeploymentUpdatedEvent: - return &pbtimeline.Event{ - Timestamp: timestamppb.New(event.Time), - Id: event.ID, - Entry: &pbtimeline.Event_DeploymentUpdated{ - DeploymentUpdated: &pbtimeline.DeploymentUpdatedEvent{ - Key: event.DeploymentKey.String(), - MinReplicas: int32(event.MinReplicas), - PrevMinReplicas: int32(event.PrevMinReplicas), - }, - }, - } - - case *timeline.IngressEvent: - var requestKey *string - if r, ok := event.RequestKey.Get(); ok { - rstr := r.String() - requestKey = &rstr - } - - return &pbtimeline.Event{ - Timestamp: timestamppb.New(event.Time), - Id: event.ID, - Entry: &pbtimeline.Event_Ingress{ - Ingress: &pbtimeline.IngressEvent{ - DeploymentKey: event.DeploymentKey.String(), - RequestKey: requestKey, - VerbRef: &schemapb.Ref{ - Module: event.Verb.Module, - Name: event.Verb.Name, - }, - Method: event.Method, - Path: event.Path, - StatusCode: int32(event.StatusCode), - Timestamp: timestamppb.New(event.Time), - Duration: durationpb.New(event.Duration), - Request: string(event.Request), - RequestHeader: string(event.RequestHeader), - Response: string(event.Response), - ResponseHeader: string(event.ResponseHeader), - Error: event.Error.Ptr(), - }, - }, - } - - case *timeline.CronScheduledEvent: - return &pbtimeline.Event{ - Timestamp: timestamppb.New(event.Time), - Id: event.ID, - Entry: &pbtimeline.Event_CronScheduled{ - CronScheduled: &pbtimeline.CronScheduledEvent{ - DeploymentKey: event.DeploymentKey.String(), - VerbRef: &schemapb.Ref{ - Module: event.Verb.Module, - Name: event.Verb.Name, - }, - Timestamp: timestamppb.New(event.Time), - Duration: durationpb.New(event.Duration), - ScheduledAt: timestamppb.New(event.ScheduledAt), - Schedule: event.Schedule, - Error: event.Error.Ptr(), - }, - }, - } - - case *timeline.AsyncExecuteEvent: - var requestKey *string - if rstr, ok := event.RequestKey.Get(); ok { - requestKey = &rstr - } - - var asyncEventType pbtimeline.AsyncExecuteEventType - switch event.EventType { - case timeline.AsyncExecuteEventTypeUnkown: - asyncEventType = pbtimeline.AsyncExecuteEventType_ASYNC_EXECUTE_EVENT_TYPE_UNSPECIFIED - case timeline.AsyncExecuteEventTypeCron: - asyncEventType = pbtimeline.AsyncExecuteEventType_ASYNC_EXECUTE_EVENT_TYPE_CRON - case timeline.AsyncExecuteEventTypePubSub: - asyncEventType = pbtimeline.AsyncExecuteEventType_ASYNC_EXECUTE_EVENT_TYPE_PUBSUB - } - - return &pbtimeline.Event{ - Timestamp: timestamppb.New(event.Time), - Id: event.ID, - Entry: &pbtimeline.Event_AsyncExecute{ - AsyncExecute: &pbtimeline.AsyncExecuteEvent{ - DeploymentKey: event.DeploymentKey.String(), - RequestKey: requestKey, - Timestamp: timestamppb.New(event.Time), - AsyncEventType: asyncEventType, - VerbRef: &schemapb.Ref{ - Module: event.Verb.Module, - Name: event.Verb.Name, - }, - Duration: durationpb.New(event.Duration), - Error: event.Error.Ptr(), - }, - }, - } - - case *timeline.PubSubPublishEvent: - var requestKey *string - if r, ok := event.RequestKey.Get(); ok { - requestKey = &r - } - - return &pbtimeline.Event{ - Timestamp: timestamppb.New(event.Time), - Id: event.ID, - Entry: &pbtimeline.Event_PubsubPublish{ - PubsubPublish: &pbtimeline.PubSubPublishEvent{ - DeploymentKey: event.DeploymentKey.String(), - RequestKey: requestKey, - VerbRef: event.SourceVerb.ToProto().(*schemapb.Ref), //nolint:forcetypeassert - Timestamp: timestamppb.New(event.Time), - Duration: durationpb.New(event.Duration), - Topic: event.Topic, - Request: string(event.Request), - Error: event.Error.Ptr(), - }, - }, - } - - case *timeline.PubSubConsumeEvent: - var requestKey *string - if r, ok := event.RequestKey.Get(); ok { - requestKey = &r - } - - var destVerbModule string - var destVerbName string - if destVerb, ok := event.DestVerb.Get(); ok { - destVerbModule = destVerb.Module - destVerbName = destVerb.Name - } - - return &pbtimeline.Event{ - Timestamp: timestamppb.New(event.Time), - Id: event.ID, - Entry: &pbtimeline.Event_PubsubConsume{ - PubsubConsume: &pbtimeline.PubSubConsumeEvent{ - DeploymentKey: event.DeploymentKey.String(), - RequestKey: requestKey, - DestVerbModule: &destVerbModule, - DestVerbName: &destVerbName, - Timestamp: timestamppb.New(event.Time), - Duration: durationpb.New(event.Duration), - Topic: event.Topic, - Error: event.Error.Ptr(), - }, - }, - } - - default: - panic(fmt.Errorf("unknown event type %T", event)) - } -} - func (c *ConsoleService) GetConfig(ctx context.Context, req *connect.Request[pbconsole.GetConfigRequest]) (*connect.Response[pbconsole.GetConfigResponse], error) { resp, err := c.admin.ConfigGet(ctx, connect.NewRequest(&ftlv1.ConfigGetRequest{ Ref: &ftlv1.ConfigRef{ @@ -940,3 +547,39 @@ func buildGraph(sch *schema.Schema, module *schema.Module, out map[string][]stri } } } + +func (c *ConsoleService) GetTimeline(ctx context.Context, req *connect.Request[timelinepb.GetTimelineRequest]) (*connect.Response[timelinepb.GetTimelineResponse], error) { + client := rpc.ClientFromContext[timelinev1connect.TimelineServiceClient](ctx) + resp, err := client.GetTimeline(ctx, connect.NewRequest(req.Msg)) + if err != nil { + return nil, fmt.Errorf("failed to get timeline from service: %w", err) + } + return connect.NewResponse(resp.Msg), nil +} + +func (c *ConsoleService) StreamTimeline(ctx context.Context, req *connect.Request[timelinepb.StreamTimelineRequest], out *connect.ServerStream[timelinepb.StreamTimelineResponse]) error { + client := rpc.ClientFromContext[timelinev1connect.TimelineServiceClient](ctx) + stream, err := client.StreamTimeline(ctx, req) + if err != nil { + return fmt.Errorf("failed to stream timeline from service: %w", err) + } + defer stream.Close() + for stream.Receive() { + msg := stream.Msg() + err = out.Send(msg) + if err != nil { + return fmt.Errorf("failed to send message: %w", err) + } + } + if stream.Err() != nil { + return fmt.Errorf("error streaming timeline from service: %w", stream.Err()) + } + return nil +} +func (c *ConsoleService) CreateEvent(ctx context.Context, req *connect.Request[timelinepb.CreateEventRequest]) (*connect.Response[timelinepb.CreateEventResponse], error) { + return nil, fmt.Errorf("not implemented") +} + +func (c *ConsoleService) DeleteOldEvents(ctx context.Context, req *connect.Request[timelinepb.DeleteOldEventsRequest]) (*connect.Response[timelinepb.DeleteOldEventsResponse], error) { + return nil, fmt.Errorf("not implemented") +} diff --git a/backend/controller/controller.go b/backend/controller/controller.go index cfe856046a..49eefc1662 100644 --- a/backend/controller/controller.go +++ b/backend/controller/controller.go @@ -44,7 +44,6 @@ import ( "github.com/TBD54566975/ftl/backend/controller/observability" "github.com/TBD54566975/ftl/backend/controller/pubsub" "github.com/TBD54566975/ftl/backend/controller/scheduledtask" - oldtimeline "github.com/TBD54566975/ftl/backend/controller/timeline" "github.com/TBD54566975/ftl/backend/libdal" "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/console/v1/pbconsoleconnect" ftldeployment "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/deployment/v1" @@ -160,7 +159,7 @@ func Start( logger.Debugf("Advertising as %s", config.Advertise) admin := admin.NewAdminService(cm, sm, svc.dal) - console := console.NewService(svc.dal, svc.timeline, admin) + console := console.NewService(svc.dal, admin) g, ctx := errgroup.WithContext(ctx) @@ -173,6 +172,7 @@ func Start( rpc.GRPC(ftlv1connect.NewSchemaServiceHandler, svc), rpc.GRPC(ftlv1connect.NewAdminServiceHandler, admin), rpc.GRPC(pbconsoleconnect.NewConsoleServiceHandler, console), + rpc.GRPC(timelinev1connect.NewTimelineServiceHandler, console), rpc.HTTP("/", consoleHandler), rpc.PProf(), ) @@ -209,7 +209,6 @@ type Service struct { tasks *scheduledtask.Scheduler pubSub *pubsub.Service registry artefacts.Service - timeline *oldtimeline.Service controllerListListeners []ControllerListListener // Map from runnerKey.String() to client. @@ -275,8 +274,6 @@ func New( } svc.registry = storage - timelineSvc := oldtimeline.New(ctx, conn, encryption) - svc.timeline = timelineSvc pubSub := pubsub.New(ctx, conn, encryption, optional.Some[pubsub.AsyncCallListener](svc)) svc.pubSub = pubSub svc.dal = dal.New(ctx, conn, encryption, pubSub, svc.registry) diff --git a/backend/controller/timeline/events_async.go b/backend/controller/timeline/events_async.go deleted file mode 100644 index 698438aaf6..0000000000 --- a/backend/controller/timeline/events_async.go +++ /dev/null @@ -1,49 +0,0 @@ -package timeline - -import ( - "time" - - "github.com/alecthomas/types/optional" - - "github.com/TBD54566975/ftl/internal/model" - "github.com/TBD54566975/ftl/internal/schema" -) - -type AsyncExecuteEvent struct { - ID int64 - Duration time.Duration - AsyncExecute -} - -func (e *AsyncExecuteEvent) GetID() int64 { return e.ID } -func (e *AsyncExecuteEvent) event() {} - -type AsyncExecuteEventType string - -const ( - AsyncExecuteEventTypeUnkown AsyncExecuteEventType = "unknown" - AsyncExecuteEventTypeCron AsyncExecuteEventType = "cron" - AsyncExecuteEventTypePubSub AsyncExecuteEventType = "pubsub" -) - -type AsyncExecute struct { - DeploymentKey model.DeploymentKey - RequestKey optional.Option[string] - EventType AsyncExecuteEventType - Verb schema.Ref - Time time.Time - Error optional.Option[string] -} - -func (e *AsyncExecute) toEvent() (Event, error) { //nolint:unparam - return &AsyncExecuteEvent{ - AsyncExecute: *e, - Duration: time.Since(e.Time), - }, nil -} - -type eventAsyncExecuteJSON struct { - DurationMS int64 `json:"duration_ms"` - EventType AsyncExecuteEventType `json:"event_type"` - Error optional.Option[string] `json:"error,omitempty"` -} diff --git a/backend/controller/timeline/events_call.go b/backend/controller/timeline/events_call.go deleted file mode 100644 index 9fe5095994..0000000000 --- a/backend/controller/timeline/events_call.go +++ /dev/null @@ -1,127 +0,0 @@ -package timeline - -import ( - "encoding/json" - "errors" - "time" - - "github.com/alecthomas/types/either" - "github.com/alecthomas/types/optional" - - ftlv1 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" - "github.com/TBD54566975/ftl/internal/model" - "github.com/TBD54566975/ftl/internal/schema" -) - -type CallEvent struct { - ID int64 - DeploymentKey model.DeploymentKey - RequestKey optional.Option[model.RequestKey] - ParentRequestKey optional.Option[model.RequestKey] - Time time.Time - SourceVerb optional.Option[schema.Ref] - DestVerb schema.Ref - Duration time.Duration - Request json.RawMessage - Response json.RawMessage - Error optional.Option[string] - Stack optional.Option[string] -} - -func (e *CallEvent) GetID() int64 { return e.ID } -func (e *CallEvent) event() {} - -type eventCallJSON struct { - DurationMS int64 `json:"duration_ms"` - Request json.RawMessage `json:"request"` - Response json.RawMessage `json:"response"` - Error optional.Option[string] `json:"error,omitempty"` - Stack optional.Option[string] `json:"stack,omitempty"` -} - -type Call struct { - DeploymentKey model.DeploymentKey - RequestKey model.RequestKey - ParentRequestKey optional.Option[model.RequestKey] - StartTime time.Time - DestVerb *schema.Ref - Callers []*schema.Ref - Request *ftlv1.CallRequest - Response either.Either[*ftlv1.CallResponse, error] -} - -func (c *Call) toEvent() (Event, error) { return callToCallEvent(c), nil } //nolint:unparam - -func callToCallEvent(call *Call) *CallEvent { - var sourceVerb optional.Option[schema.Ref] - if len(call.Callers) > 0 { - sourceVerb = optional.Some(*call.Callers[0]) - } - - var errorStr optional.Option[string] - var stack optional.Option[string] - var responseBody []byte - - switch response := call.Response.(type) { - case either.Left[*ftlv1.CallResponse, error]: - resp := response.Get() - responseBody = resp.GetBody() - if callError := resp.GetError(); callError != nil { - errorStr = optional.Some(callError.Message) - stack = optional.Ptr(callError.Stack) - } - case either.Right[*ftlv1.CallResponse, error]: - callError := response.Get() - errorStr = optional.Some(callError.Error()) - } - - return &CallEvent{ - Time: call.StartTime, - DeploymentKey: call.DeploymentKey, - RequestKey: optional.Some(call.RequestKey), - ParentRequestKey: call.ParentRequestKey, - Duration: time.Since(call.StartTime), - SourceVerb: sourceVerb, - DestVerb: *call.DestVerb, - Request: call.Request.GetBody(), - Response: responseBody, - Error: errorStr, - Stack: stack, - } -} - -func CallEventToCallForTesting(event *CallEvent) *Call { - var response either.Either[*ftlv1.CallResponse, error] - if eventErr, ok := event.Error.Get(); ok { - response = either.RightOf[*ftlv1.CallResponse](errors.New(eventErr)) - } else { - response = either.LeftOf[error](&ftlv1.CallResponse{ - Response: &ftlv1.CallResponse_Body{ - Body: event.Response, - }, - }) - } - - var requestKey model.RequestKey - if key, ok := event.RequestKey.Get(); ok { - requestKey = key - } else { - requestKey = model.RequestKey{} - } - - callers := []*schema.Ref{} - if ref, ok := event.SourceVerb.Get(); ok { - callers = []*schema.Ref{&ref} - } - - return &Call{ - DeploymentKey: event.DeploymentKey, - RequestKey: requestKey, - ParentRequestKey: event.ParentRequestKey, - StartTime: event.Time, - DestVerb: &event.DestVerb, - Callers: callers, - Request: &ftlv1.CallRequest{Body: event.Request}, - Response: response, - } -} diff --git a/backend/controller/timeline/events_cron.go b/backend/controller/timeline/events_cron.go deleted file mode 100644 index c0ba05293d..0000000000 --- a/backend/controller/timeline/events_cron.go +++ /dev/null @@ -1,43 +0,0 @@ -package timeline - -import ( - "time" - - "github.com/alecthomas/types/optional" - - "github.com/TBD54566975/ftl/internal/model" - "github.com/TBD54566975/ftl/internal/schema" -) - -type CronScheduledEvent struct { - ID int64 - Duration time.Duration - CronScheduled -} - -func (e *CronScheduledEvent) GetID() int64 { return e.ID } -func (e *CronScheduledEvent) event() {} - -type CronScheduled struct { - DeploymentKey model.DeploymentKey - Verb schema.Ref - - Time time.Time - ScheduledAt time.Time - Schedule string - Error optional.Option[string] -} - -func (e *CronScheduled) toEvent() (Event, error) { //nolint:unparam - return &CronScheduledEvent{ - CronScheduled: *e, - Duration: time.Since(e.Time), - }, nil -} - -type eventCronScheduledJSON struct { - DurationMS int64 `json:"duration_ms"` - ScheduledAt time.Time `json:"scheduled_at"` - Schedule string `json:"schedule"` - Error optional.Option[string] `json:"error,omitempty"` -} diff --git a/backend/controller/timeline/events_deployment.go b/backend/controller/timeline/events_deployment.go deleted file mode 100644 index 723da92858..0000000000 --- a/backend/controller/timeline/events_deployment.go +++ /dev/null @@ -1,43 +0,0 @@ -package timeline - -import ( - "time" - - "github.com/alecthomas/types/optional" - - "github.com/TBD54566975/ftl/internal/model" -) - -type DeploymentCreatedEvent struct { - ID int64 - DeploymentKey model.DeploymentKey - Time time.Time - Language string - ModuleName string - MinReplicas int - ReplacedDeployment optional.Option[model.DeploymentKey] -} - -func (e *DeploymentCreatedEvent) GetID() int64 { return e.ID } -func (e *DeploymentCreatedEvent) event() {} - -type eventDeploymentUpdatedJSON struct { - MinReplicas int `json:"min_replicas"` - PrevMinReplicas int `json:"prev_min_replicas"` -} - -type DeploymentUpdatedEvent struct { - ID int64 - DeploymentKey model.DeploymentKey - Time time.Time - MinReplicas int - PrevMinReplicas int -} - -func (e *DeploymentUpdatedEvent) GetID() int64 { return e.ID } -func (e *DeploymentUpdatedEvent) event() {} - -type eventDeploymentCreatedJSON struct { - MinReplicas int `json:"min_replicas"` - ReplacedDeployment optional.Option[model.DeploymentKey] `json:"replaced,omitempty"` -} diff --git a/backend/controller/timeline/events_ingress.go b/backend/controller/timeline/events_ingress.go deleted file mode 100644 index 313c43b4a3..0000000000 --- a/backend/controller/timeline/events_ingress.go +++ /dev/null @@ -1,98 +0,0 @@ -package timeline - -import ( - "encoding/json" - "fmt" - "net/http" - "time" - - "github.com/alecthomas/types/optional" - - "github.com/TBD54566975/ftl/internal/model" - "github.com/TBD54566975/ftl/internal/schema" -) - -type IngressEvent struct { - ID int64 - DeploymentKey model.DeploymentKey - RequestKey optional.Option[model.RequestKey] - Verb schema.Ref - Method string - Path string - - StatusCode int - Time time.Time - Duration time.Duration - Request json.RawMessage - RequestHeader json.RawMessage - Response json.RawMessage - ResponseHeader json.RawMessage - Error optional.Option[string] -} - -func (e *IngressEvent) GetID() int64 { return e.ID } -func (e *IngressEvent) event() {} - -type eventIngressJSON struct { - DurationMS int64 `json:"duration_ms"` - Method string `json:"method"` - Path string `json:"path"` - StatusCode int `json:"status_code"` - Request json.RawMessage `json:"request"` - RequestHeader json.RawMessage `json:"req_header"` - Response json.RawMessage `json:"response"` - ResponseHeader json.RawMessage `json:"resp_header"` - Error optional.Option[string] `json:"error,omitempty"` -} - -type Ingress struct { - DeploymentKey model.DeploymentKey - RequestKey model.RequestKey - StartTime time.Time - Verb *schema.Ref - RequestMethod string - RequestPath string - RequestHeaders http.Header - ResponseStatus int - ResponseHeaders http.Header - RequestBody []byte - ResponseBody []byte - Error optional.Option[string] -} - -func (ingress *Ingress) toEvent() (Event, error) { - requestBody := ingress.RequestBody - if len(requestBody) == 0 { - requestBody = []byte("{}") - } - - responseBody := ingress.ResponseBody - if len(responseBody) == 0 { - responseBody = []byte("{}") - } - - reqHeaderBytes, err := json.Marshal(ingress.RequestHeaders) - if err != nil { - return nil, fmt.Errorf("failed to marshal request header: %w", err) - } - - respHeaderBytes, err := json.Marshal(ingress.ResponseHeaders) - if err != nil { - return nil, fmt.Errorf("failed to marshal response header: %w", err) - } - return &IngressEvent{ - DeploymentKey: ingress.DeploymentKey, - RequestKey: optional.Some(ingress.RequestKey), - Verb: *ingress.Verb, - Method: ingress.RequestMethod, - Path: ingress.RequestPath, - StatusCode: ingress.ResponseStatus, - Time: ingress.StartTime, - Duration: time.Since(ingress.StartTime), - Request: requestBody, - RequestHeader: reqHeaderBytes, - Response: responseBody, - ResponseHeader: respHeaderBytes, - Error: ingress.Error, - }, nil -} diff --git a/backend/controller/timeline/events_log.go b/backend/controller/timeline/events_log.go deleted file mode 100644 index c6b8496f7a..0000000000 --- a/backend/controller/timeline/events_log.go +++ /dev/null @@ -1,35 +0,0 @@ -package timeline - -import ( - "time" - - "github.com/alecthomas/types/optional" - - "github.com/TBD54566975/ftl/internal/model" -) - -type Log struct { - DeploymentKey model.DeploymentKey - RequestKey optional.Option[model.RequestKey] - Time time.Time - Level int32 - Attributes map[string]string - Message string - Error optional.Option[string] -} - -func (l *Log) toEvent() (Event, error) { return &LogEvent{Log: *l}, nil } //nolint:unparam - -type LogEvent struct { - ID int64 - Log -} - -func (e *LogEvent) GetID() int64 { return e.ID } -func (e *LogEvent) event() {} - -type eventLogJSON struct { - Message string `json:"message"` - Attributes map[string]string `json:"attributes"` - Error optional.Option[string] `json:"error,omitempty"` -} diff --git a/backend/controller/timeline/events_pubsub_consume.go b/backend/controller/timeline/events_pubsub_consume.go deleted file mode 100644 index 005e65a04c..0000000000 --- a/backend/controller/timeline/events_pubsub_consume.go +++ /dev/null @@ -1,41 +0,0 @@ -package timeline - -import ( - "time" - - "github.com/alecthomas/types/optional" - - "github.com/TBD54566975/ftl/internal/model" - "github.com/TBD54566975/ftl/internal/schema" -) - -type PubSubConsumeEvent struct { - ID int64 - Duration time.Duration - PubSubConsume -} - -func (e *PubSubConsumeEvent) GetID() int64 { return e.ID } -func (e *PubSubConsumeEvent) event() {} - -type PubSubConsume struct { - DeploymentKey model.DeploymentKey - RequestKey optional.Option[string] - Time time.Time - DestVerb optional.Option[schema.RefKey] - Topic string - Error optional.Option[string] -} - -func (e *PubSubConsume) toEvent() (Event, error) { //nolint:unparam - return &PubSubConsumeEvent{ - PubSubConsume: *e, - Duration: time.Since(e.Time), - }, nil -} - -type eventPubSubConsumeJSON struct { - DurationMS int64 `json:"duration_ms"` - Topic string `json:"topic"` - Error optional.Option[string] `json:"error,omitempty"` -} diff --git a/backend/controller/timeline/events_pubsub_publish.go b/backend/controller/timeline/events_pubsub_publish.go deleted file mode 100644 index ff44560bbd..0000000000 --- a/backend/controller/timeline/events_pubsub_publish.go +++ /dev/null @@ -1,46 +0,0 @@ -package timeline - -import ( - "encoding/json" - "time" - - "github.com/alecthomas/types/optional" - - deployment "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/deployment/v1" - "github.com/TBD54566975/ftl/internal/model" - "github.com/TBD54566975/ftl/internal/schema" -) - -type PubSubPublishEvent struct { - ID int64 - Duration time.Duration - Request json.RawMessage - PubSubPublish -} - -func (e *PubSubPublishEvent) GetID() int64 { return e.ID } -func (e *PubSubPublishEvent) event() {} - -type PubSubPublish struct { - DeploymentKey model.DeploymentKey - RequestKey optional.Option[string] - Time time.Time - SourceVerb schema.Ref - Topic string - Request *deployment.PublishEventRequest - Error optional.Option[string] -} - -func (e *PubSubPublish) toEvent() (Event, error) { //nolint:unparam - return &PubSubPublishEvent{ - PubSubPublish: *e, - Duration: time.Since(e.Time), - }, nil -} - -type eventPubSubPublishJSON struct { - DurationMS int64 `json:"duration_ms"` - Topic string `json:"topic"` - Request json.RawMessage `json:"request"` - Error optional.Option[string] `json:"error,omitempty"` -} diff --git a/backend/controller/timeline/internal/sql/models.go b/backend/controller/timeline/internal/sql/models.go deleted file mode 100644 index 90b3f40fb4..0000000000 --- a/backend/controller/timeline/internal/sql/models.go +++ /dev/null @@ -1,77 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.27.0 - -package sql - -import ( - "database/sql/driver" - "fmt" - "time" - - "github.com/TBD54566975/ftl/backend/controller/encryption/api" - "github.com/alecthomas/types/optional" -) - -type EventType string - -const ( - EventTypeCall EventType = "call" - EventTypeLog EventType = "log" - EventTypeDeploymentCreated EventType = "deployment_created" - EventTypeDeploymentUpdated EventType = "deployment_updated" - EventTypeIngress EventType = "ingress" - EventTypeCronScheduled EventType = "cron_scheduled" - EventTypeAsyncExecute EventType = "async_execute" - EventTypePubsubPublish EventType = "pubsub_publish" - EventTypePubsubConsume EventType = "pubsub_consume" -) - -func (e *EventType) Scan(src interface{}) error { - switch s := src.(type) { - case []byte: - *e = EventType(s) - case string: - *e = EventType(s) - default: - return fmt.Errorf("unsupported scan type for EventType: %T", src) - } - return nil -} - -type NullEventType struct { - EventType EventType - Valid bool // Valid is true if EventType is not NULL -} - -// Scan implements the Scanner interface. -func (ns *NullEventType) Scan(value interface{}) error { - if value == nil { - ns.EventType, ns.Valid = "", false - return nil - } - ns.Valid = true - return ns.EventType.Scan(value) -} - -// Value implements the driver Valuer interface. -func (ns NullEventType) Value() (driver.Value, error) { - if !ns.Valid { - return nil, nil - } - return string(ns.EventType), nil -} - -type Timeline struct { - ID int64 - TimeStamp time.Time - DeploymentID int64 - RequestID optional.Option[int64] - Type EventType - CustomKey1 optional.Option[string] - CustomKey2 optional.Option[string] - CustomKey3 optional.Option[string] - CustomKey4 optional.Option[string] - Payload api.EncryptedTimelineColumn - ParentRequestID optional.Option[string] -} diff --git a/backend/controller/timeline/query.go b/backend/controller/timeline/query.go deleted file mode 100644 index d24a8afef1..0000000000 --- a/backend/controller/timeline/query.go +++ /dev/null @@ -1,490 +0,0 @@ -package timeline - -import ( - "context" - stdsql "database/sql" - "fmt" - "strconv" - "time" - - "github.com/alecthomas/types/optional" - - "github.com/TBD54566975/ftl/backend/controller/timeline/internal/sql" - "github.com/TBD54566975/ftl/backend/libdal" - "github.com/TBD54566975/ftl/internal/log" - "github.com/TBD54566975/ftl/internal/model" - "github.com/TBD54566975/ftl/internal/schema" -) - -type eventFilterCall struct { - sourceModule optional.Option[string] - destModule string - destVerb optional.Option[string] -} - -type eventFilterModule struct { - module string - verb optional.Option[string] -} - -type eventFilter struct { - level *log.Level - calls []*eventFilterCall - module []*eventFilterModule - types []EventType - deployments []model.DeploymentKey - requests []string - newerThan time.Time - olderThan time.Time - idHigherThan int64 - idLowerThan int64 - descending bool -} - -type eventRow struct { - sql.Timeline - DeploymentKey model.DeploymentKey - RequestKey optional.Option[model.RequestKey] -} - -type TimelineFilter func(query *eventFilter) - -func FilterLogLevel(level log.Level) TimelineFilter { - return func(query *eventFilter) { - query.level = &level - } -} - -// FilterCall filters call events between the given modules. -// -// May be called multiple times. -func FilterCall(sourceModule optional.Option[string], destModule string, destVerb optional.Option[string]) TimelineFilter { - return func(query *eventFilter) { - query.calls = append(query.calls, &eventFilterCall{sourceModule: sourceModule, destModule: destModule, destVerb: destVerb}) - } -} - -func FilterModule(module string, verb optional.Option[string]) TimelineFilter { - return func(query *eventFilter) { - query.module = append(query.module, &eventFilterModule{module: module, verb: verb}) - } -} - -func FilterDeployments(deploymentKeys ...model.DeploymentKey) TimelineFilter { - return func(query *eventFilter) { - query.deployments = append(query.deployments, deploymentKeys...) - } -} - -func FilterRequests(requestKeys ...model.RequestKey) TimelineFilter { - return func(query *eventFilter) { - for _, request := range requestKeys { - query.requests = append(query.requests, request.String()) - } - } -} - -func FilterTypes(types ...sql.EventType) TimelineFilter { - return func(query *eventFilter) { - query.types = append(query.types, types...) - } -} - -// FilterTimeRange filters events between the given times, inclusive. -// -// Either maybe be zero to indicate no upper or lower bound. -func FilterTimeRange(olderThan, newerThan time.Time) TimelineFilter { - return func(query *eventFilter) { - query.newerThan = newerThan - query.olderThan = olderThan - } -} - -// FilterIDRange filters events between the given IDs, inclusive. -func FilterIDRange(higherThan, lowerThan int64) TimelineFilter { - return func(query *eventFilter) { - query.idHigherThan = higherThan - query.idLowerThan = lowerThan - } -} - -// FilterDescending returns events in descending order. -func FilterDescending() TimelineFilter { - return func(query *eventFilter) { - query.descending = true - } -} - -func (s *Service) QueryTimeline(ctx context.Context, limit int, filters ...TimelineFilter) ([]Event, error) { - if limit < 1 { - return nil, fmt.Errorf("limit must be >= 1, got %d", limit) - } - - // Build query. - q := `SELECT e.id AS id, - e.deployment_id, - ir.key AS request_key, - e.time_stamp, - e.custom_key_1, - e.custom_key_2, - e.custom_key_3, - e.custom_key_4, - e.type, - e.payload - FROM timeline e - LEFT JOIN requests ir on e.request_id = ir.id - WHERE true -- The "true" is to simplify the ANDs below. - ` - - filter := eventFilter{} - for _, f := range filters { - f(&filter) - } - var args []any - index := 1 - param := func(v any) int { - args = append(args, v) - index++ - return index - 1 - } - if !filter.olderThan.IsZero() { - q += fmt.Sprintf(" AND e.time_stamp <= $%d::TIMESTAMPTZ", param(filter.olderThan)) - } - if !filter.newerThan.IsZero() { - q += fmt.Sprintf(" AND e.time_stamp >= $%d::TIMESTAMPTZ", param(filter.newerThan)) - } - if filter.idHigherThan != 0 { - q += fmt.Sprintf(" AND e.id >= $%d::BIGINT", param(filter.idHigherThan)) - } - if filter.idLowerThan != 0 { - q += fmt.Sprintf(" AND e.id <= $%d::BIGINT", param(filter.idLowerThan)) - } - deploymentKeys := map[int64]model.DeploymentKey{} - // TODO: We should probably make it mandatory to provide at least one deployment. - deploymentQuery := `SELECT id, key FROM deployments` - deploymentArgs := []any{} - if len(filter.deployments) != 0 { - // Unfortunately, if we use a join here, PG will do a sequential scan on - // timeline and deployments, making a 7ms query into a 700ms query. - // https://www.pgexplain.dev/plan/ecd44488-6060-4ad1-a9b4-49d092c3de81 - deploymentQuery += ` WHERE key = ANY($1::TEXT[])` - deploymentArgs = append(deploymentArgs, filter.deployments) - } - rows, err := s.conn.QueryContext(ctx, deploymentQuery, deploymentArgs...) - if err != nil { - return nil, libdal.TranslatePGError(err) - } - defer rows.Close() // nolint:errcheck - deploymentIDs := []int64{} - for rows.Next() { - var id int64 - var key model.DeploymentKey - if err := rows.Scan(&id, &key); err != nil { - return nil, err - } - - deploymentIDs = append(deploymentIDs, id) - deploymentKeys[id] = key - } - - q += fmt.Sprintf(` AND e.deployment_id = ANY($%d::BIGINT[])`, param(deploymentIDs)) - - if filter.requests != nil { - q += fmt.Sprintf(` AND ir.key = ANY($%d::TEXT[])`, param(filter.requests)) - } - if filter.types != nil { - // Why are we double casting? Because I hit "cannot find encode plan" and - // this works around it: https://github.com/jackc/pgx/issues/338#issuecomment-333399112 - q += fmt.Sprintf(` AND e.type = ANY($%d::text[]::event_type[])`, param(filter.types)) - } - if filter.level != nil { - q += fmt.Sprintf(" AND (e.type != 'log' OR (e.type = 'log' AND e.custom_key_1::INT >= $%d::INT))\n", param(*filter.level)) - } - if len(filter.calls) > 0 { - q += " AND (" - for i, call := range filter.calls { - if i > 0 { - q += " OR " - } - if sourceModule, ok := call.sourceModule.Get(); ok { - q += fmt.Sprintf("(e.type != 'call' OR (e.type = 'call' AND e.custom_key_1 = $%d AND e.custom_key_3 = $%d))", param(sourceModule), param(call.destModule)) - } else if destVerb, ok := call.destVerb.Get(); ok { - q += fmt.Sprintf("(e.type != 'call' OR (e.type = 'call' AND e.custom_key_3 = $%d AND e.custom_key_4 = $%d))", param(call.destModule), param(destVerb)) - } else { - q += fmt.Sprintf("(e.type != 'call' OR (e.type = 'call' AND e.custom_key_3 = $%d))", param(call.destModule)) - } - } - q += ")\n" - } - - if len(filter.module) > 0 { - q += " AND (" - for i, module := range filter.module { - if i > 0 { - q += " OR " - } - if verb, ok := module.verb.Get(); ok { - q += fmt.Sprintf( - "((e.type = 'call' AND e.custom_key_3 = $%d AND e.custom_key_4 = $%d) OR "+ - "(e.type = 'ingress' AND e.custom_key_1 = $%d AND e.custom_key_2 = $%d) OR "+ - "(e.type = 'async_execute' AND e.custom_key_1 = $%d AND e.custom_key_2 = $%d) OR "+ - "(e.type = 'pubsub_publish' AND e.custom_key_1 = $%d AND e.custom_key_2 = $%d) OR "+ - "(e.type = 'pubsub_consume' AND e.custom_key_1 = $%d AND e.custom_key_2 = $%d))", - param(module.module), param(verb), - param(module.module), param(verb), - param(module.module), param(verb), - param(module.module), param(verb), - param(module.module), param(verb), - ) - } else { - q += fmt.Sprintf( - "((e.type = 'call' AND e.custom_key_3 = $%d) OR "+ - "(e.type = 'ingress' AND e.custom_key_1 = $%d) OR "+ - "(e.type = 'async_execute' AND e.custom_key_1 = $%d) OR "+ - "(e.type = 'pubsub_publish' AND e.custom_key_1 = $%d) OR "+ - "(e.type = 'pubsub_consume' AND e.custom_key_1 = $%d))", - param(module.module), param(module.module), param(module.module), - param(module.module), param(module.module), - ) - } - } - q += ")\n" - } - - if filter.descending { - q += " ORDER BY e.time_stamp DESC, e.id DESC" - } else { - q += " ORDER BY e.time_stamp ASC, e.id ASC" - } - - q += fmt.Sprintf(" LIMIT %d", limit) - - // Issue query. - rows, err = s.conn.QueryContext(ctx, q, args...) - if err != nil { - return nil, fmt.Errorf("%s: %w", q, libdal.TranslatePGError(err)) - } - defer rows.Close() - - events, err := s.transformRowsToTimelineEvents(deploymentKeys, rows) - if err != nil { - return nil, err - } - return events, nil -} - -func (s *Service) transformRowsToTimelineEvents(deploymentKeys map[int64]model.DeploymentKey, rows *stdsql.Rows) ([]Event, error) { - var out []Event - for rows.Next() { - row := eventRow{} - var deploymentID int64 - err := rows.Scan( - &row.ID, &deploymentID, &row.RequestKey, &row.TimeStamp, - &row.CustomKey1, &row.CustomKey2, &row.CustomKey3, &row.CustomKey4, - &row.Type, &row.Payload, - ) - if err != nil { - return nil, err - } - - row.DeploymentKey = deploymentKeys[deploymentID] - - switch row.Type { - case sql.EventTypeLog: - var jsonPayload eventLogJSON - if err := s.encryption.DecryptJSON(&row.Payload, &jsonPayload); err != nil { - return nil, fmt.Errorf("failed to decrypt log event: %w", err) - } - - level, err := strconv.ParseInt(row.CustomKey1.MustGet(), 10, 32) - if err != nil { - return nil, fmt.Errorf("invalid log level: %q: %w", row.CustomKey1.MustGet(), err) - } - out = append(out, &LogEvent{ - ID: row.ID, - Log: Log{ - DeploymentKey: row.DeploymentKey, - RequestKey: row.RequestKey, - Time: row.TimeStamp, - Level: int32(level), - Attributes: jsonPayload.Attributes, - Message: jsonPayload.Message, - Error: jsonPayload.Error, - }, - }) - - case sql.EventTypeCall: - var jsonPayload eventCallJSON - if err := s.encryption.DecryptJSON(&row.Payload, &jsonPayload); err != nil { - return nil, fmt.Errorf("failed to decrypt call event: %w", err) - } - var sourceVerb optional.Option[schema.Ref] - sourceModule, smok := row.CustomKey1.Get() - sourceName, snok := row.CustomKey2.Get() - if smok && snok { - sourceVerb = optional.Some(schema.Ref{Module: sourceModule, Name: sourceName}) - } - out = append(out, &CallEvent{ - ID: row.ID, - DeploymentKey: row.DeploymentKey, - RequestKey: row.RequestKey, - Time: row.TimeStamp, - SourceVerb: sourceVerb, - DestVerb: schema.Ref{Module: row.CustomKey3.MustGet(), Name: row.CustomKey4.MustGet()}, - Duration: time.Duration(jsonPayload.DurationMS) * time.Millisecond, - Request: jsonPayload.Request, - Response: jsonPayload.Response, - Error: jsonPayload.Error, - Stack: jsonPayload.Stack, - }) - - case sql.EventTypeDeploymentCreated: - var jsonPayload eventDeploymentCreatedJSON - if err := s.encryption.DecryptJSON(&row.Payload, &jsonPayload); err != nil { - return nil, fmt.Errorf("failed to decrypt deployment created event: %w", err) - } - out = append(out, &DeploymentCreatedEvent{ - ID: row.ID, - DeploymentKey: row.DeploymentKey, - Time: row.TimeStamp, - Language: row.CustomKey1.MustGet(), - ModuleName: row.CustomKey2.MustGet(), - MinReplicas: jsonPayload.MinReplicas, - ReplacedDeployment: jsonPayload.ReplacedDeployment, - }) - - case sql.EventTypeDeploymentUpdated: - var jsonPayload eventDeploymentUpdatedJSON - if err := s.encryption.DecryptJSON(&row.Payload, &jsonPayload); err != nil { - return nil, fmt.Errorf("failed to decrypt deployment updated event: %w", err) - } - out = append(out, &DeploymentUpdatedEvent{ - ID: row.ID, - DeploymentKey: row.DeploymentKey, - Time: row.TimeStamp, - MinReplicas: jsonPayload.MinReplicas, - PrevMinReplicas: jsonPayload.PrevMinReplicas, - }) - - case sql.EventTypeIngress: - var jsonPayload eventIngressJSON - if err := s.encryption.DecryptJSON(&row.Payload, &jsonPayload); err != nil { - return nil, fmt.Errorf("failed to decrypt ingress event: %w", err) - } - out = append(out, &IngressEvent{ - ID: row.ID, - DeploymentKey: row.DeploymentKey, - RequestKey: row.RequestKey, - Verb: schema.Ref{Module: row.CustomKey1.MustGet(), Name: row.CustomKey2.MustGet()}, - Method: jsonPayload.Method, - Path: jsonPayload.Path, - StatusCode: jsonPayload.StatusCode, - Time: row.TimeStamp, - Duration: time.Duration(jsonPayload.DurationMS) * time.Millisecond, - Request: jsonPayload.Request, - RequestHeader: jsonPayload.RequestHeader, - Response: jsonPayload.Response, - ResponseHeader: jsonPayload.ResponseHeader, - Error: jsonPayload.Error, - }) - - case sql.EventTypeCronScheduled: - var jsonPayload eventCronScheduledJSON - if err := s.encryption.DecryptJSON(&row.Payload, &jsonPayload); err != nil { - return nil, fmt.Errorf("failed to decrypt cron scheduled event: %w", err) - } - out = append(out, &CronScheduledEvent{ - ID: row.ID, - Duration: time.Duration(jsonPayload.DurationMS) * time.Millisecond, - CronScheduled: CronScheduled{ - DeploymentKey: row.DeploymentKey, - Verb: schema.Ref{Module: row.CustomKey1.MustGet(), Name: row.CustomKey2.MustGet()}, - Time: row.TimeStamp, - ScheduledAt: jsonPayload.ScheduledAt, - Schedule: jsonPayload.Schedule, - Error: jsonPayload.Error, - }, - }) - - case sql.EventTypeAsyncExecute: - var jsonPayload eventAsyncExecuteJSON - if err := s.encryption.DecryptJSON(&row.Payload, &jsonPayload); err != nil { - return nil, fmt.Errorf("failed to decrypt async execute event: %w", err) - } - requestKey := optional.None[string]() - if rk, ok := row.RequestKey.Get(); ok { - requestKey = optional.Some(rk.String()) - } - out = append(out, &AsyncExecuteEvent{ - ID: row.ID, - Duration: time.Duration(jsonPayload.DurationMS) * time.Millisecond, - AsyncExecute: AsyncExecute{ - DeploymentKey: row.DeploymentKey, - RequestKey: requestKey, - EventType: jsonPayload.EventType, - Verb: schema.Ref{Module: row.CustomKey1.MustGet(), Name: row.CustomKey2.MustGet()}, - Time: row.TimeStamp, - Error: jsonPayload.Error, - }, - }) - - case sql.EventTypePubsubPublish: - var jsonPayload eventPubSubPublishJSON - if err := s.encryption.DecryptJSON(&row.Payload, &jsonPayload); err != nil { - return nil, fmt.Errorf("failed to decrypt pubsub publish event: %w", err) - } - requestKey := optional.None[string]() - if rk, ok := row.RequestKey.Get(); ok { - requestKey = optional.Some(rk.String()) - } - out = append(out, &PubSubPublishEvent{ - ID: row.ID, - Duration: time.Duration(jsonPayload.DurationMS) * time.Millisecond, - Request: jsonPayload.Request, - PubSubPublish: PubSubPublish{ - DeploymentKey: row.DeploymentKey, - RequestKey: requestKey, - Time: row.TimeStamp, - SourceVerb: schema.Ref{Module: row.CustomKey1.MustGet(), Name: row.CustomKey2.MustGet()}, - Topic: jsonPayload.Topic, - Error: jsonPayload.Error, - }, - }) - - case sql.EventTypePubsubConsume: - var jsonPayload eventPubSubConsumeJSON - if err := s.encryption.DecryptJSON(&row.Payload, &jsonPayload); err != nil { - return nil, fmt.Errorf("failed to decrypt pubsub consume event: %w", err) - } - requestKey := optional.None[string]() - if rk, ok := row.RequestKey.Get(); ok { - requestKey = optional.Some(rk.String()) - } - destVerb := optional.None[schema.RefKey]() - if dv, ok := row.CustomKey2.Get(); ok { - dvr := schema.RefKey{Name: dv} - dm, ok := row.CustomKey1.Get() - if ok { - dvr.Module = dm - } - destVerb = optional.Some(dvr) - } - out = append(out, &PubSubConsumeEvent{ - ID: row.ID, - Duration: time.Duration(jsonPayload.DurationMS) * time.Millisecond, - PubSubConsume: PubSubConsume{ - DeploymentKey: row.DeploymentKey, - RequestKey: requestKey, - Time: row.TimeStamp, - DestVerb: destVerb, - Topic: jsonPayload.Topic, - Error: jsonPayload.Error, - }, - }) - - default: - panic("unknown event type: " + row.Type) - } - } - return out, nil -} diff --git a/backend/controller/timeline/timeline.go b/backend/controller/timeline/timeline.go deleted file mode 100644 index f437436e47..0000000000 --- a/backend/controller/timeline/timeline.go +++ /dev/null @@ -1,52 +0,0 @@ -package timeline - -import ( - "context" - stdsql "database/sql" - - "github.com/TBD54566975/ftl/backend/controller/encryption" - "github.com/TBD54566975/ftl/backend/controller/timeline/internal/sql" -) - -type EventType = sql.EventType - -// Supported event types. -const ( - EventTypeLog = sql.EventTypeLog - EventTypeCall = sql.EventTypeCall - EventTypeDeploymentCreated = sql.EventTypeDeploymentCreated - EventTypeDeploymentUpdated = sql.EventTypeDeploymentUpdated - EventTypeIngress = sql.EventTypeIngress - EventTypeCronScheduled = sql.EventTypeCronScheduled - EventTypeAsyncExecute = sql.EventTypeAsyncExecute - EventTypePubSubPublish = sql.EventTypePubsubPublish - EventTypePubSubConsume = sql.EventTypePubsubConsume -) - -// Event types. -// -//sumtype:decl -type Event interface { - GetID() int64 - event() -} - -// InEvent is a marker interface for events that are inserted into the timeline. -type InEvent interface { - toEvent() (Event, error) -} - -type Service struct { - ctx context.Context - conn *stdsql.DB - encryption *encryption.Service -} - -func New(ctx context.Context, conn *stdsql.DB, encryption *encryption.Service) *Service { - s := &Service{ - ctx: ctx, - conn: conn, - encryption: encryption, - } - return s -} diff --git a/backend/protos/xyz/block/ftl/console/v1/console.pb.go b/backend/protos/xyz/block/ftl/console/v1/console.pb.go index 513123c628..4cd39a4cef 100644 --- a/backend/protos/xyz/block/ftl/console/v1/console.pb.go +++ b/backend/protos/xyz/block/ftl/console/v1/console.pb.go @@ -8,12 +8,9 @@ package pbconsole import ( v1 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/schema/v1" - v11 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/timeline/v1" - v12 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" + v11 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -25,55 +22,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type GetEventsRequest_Order int32 - -const ( - GetEventsRequest_ORDER_UNSPECIFIED GetEventsRequest_Order = 0 - GetEventsRequest_ORDER_ASC GetEventsRequest_Order = 1 - GetEventsRequest_ORDER_DESC GetEventsRequest_Order = 2 -) - -// Enum value maps for GetEventsRequest_Order. -var ( - GetEventsRequest_Order_name = map[int32]string{ - 0: "ORDER_UNSPECIFIED", - 1: "ORDER_ASC", - 2: "ORDER_DESC", - } - GetEventsRequest_Order_value = map[string]int32{ - "ORDER_UNSPECIFIED": 0, - "ORDER_ASC": 1, - "ORDER_DESC": 2, - } -) - -func (x GetEventsRequest_Order) Enum() *GetEventsRequest_Order { - p := new(GetEventsRequest_Order) - *p = x - return p -} - -func (x GetEventsRequest_Order) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (GetEventsRequest_Order) Descriptor() protoreflect.EnumDescriptor { - return file_xyz_block_ftl_console_v1_console_proto_enumTypes[0].Descriptor() -} - -func (GetEventsRequest_Order) Type() protoreflect.EnumType { - return &file_xyz_block_ftl_console_v1_console_proto_enumTypes[0] -} - -func (x GetEventsRequest_Order) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use GetEventsRequest_Order.Descriptor instead. -func (GetEventsRequest_Order) EnumDescriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15, 0} -} - type Config struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -923,122 +871,6 @@ func (x *StreamModulesResponse) GetTopology() *Topology { return nil } -// Query for events. -type GetEventsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Filters []*GetEventsRequest_Filter `protobuf:"bytes,1,rep,name=filters,proto3" json:"filters,omitempty"` - Limit int32 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` - Order GetEventsRequest_Order `protobuf:"varint,3,opt,name=order,proto3,enum=xyz.block.ftl.console.v1.GetEventsRequest_Order" json:"order,omitempty"` -} - -func (x *GetEventsRequest) Reset() { - *x = GetEventsRequest{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetEventsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEventsRequest) ProtoMessage() {} - -func (x *GetEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[15] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEventsRequest.ProtoReflect.Descriptor instead. -func (*GetEventsRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15} -} - -func (x *GetEventsRequest) GetFilters() []*GetEventsRequest_Filter { - if x != nil { - return x.Filters - } - return nil -} - -func (x *GetEventsRequest) GetLimit() int32 { - if x != nil { - return x.Limit - } - return 0 -} - -func (x *GetEventsRequest) GetOrder() GetEventsRequest_Order { - if x != nil { - return x.Order - } - return GetEventsRequest_ORDER_UNSPECIFIED -} - -type GetEventsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Events []*v11.Event `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` - // For pagination, this cursor is where we should start our next query - Cursor *int64 `protobuf:"varint,2,opt,name=cursor,proto3,oneof" json:"cursor,omitempty"` -} - -func (x *GetEventsResponse) Reset() { - *x = GetEventsResponse{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetEventsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEventsResponse) ProtoMessage() {} - -func (x *GetEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[16] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEventsResponse.ProtoReflect.Descriptor instead. -func (*GetEventsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{16} -} - -func (x *GetEventsResponse) GetEvents() []*v11.Event { - if x != nil { - return x.Events - } - return nil -} - -func (x *GetEventsResponse) GetCursor() int64 { - if x != nil && x.Cursor != nil { - return *x.Cursor - } - return 0 -} - type GetConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1050,7 +882,7 @@ type GetConfigRequest struct { func (x *GetConfigRequest) Reset() { *x = GetConfigRequest{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[17] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1062,7 +894,7 @@ func (x *GetConfigRequest) String() string { func (*GetConfigRequest) ProtoMessage() {} func (x *GetConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[17] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1075,7 +907,7 @@ func (x *GetConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConfigRequest.ProtoReflect.Descriptor instead. func (*GetConfigRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{17} + return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15} } func (x *GetConfigRequest) GetName() string { @@ -1102,7 +934,7 @@ type GetConfigResponse struct { func (x *GetConfigResponse) Reset() { *x = GetConfigResponse{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[18] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1114,7 +946,7 @@ func (x *GetConfigResponse) String() string { func (*GetConfigResponse) ProtoMessage() {} func (x *GetConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[18] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1127,7 +959,7 @@ func (x *GetConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConfigResponse.ProtoReflect.Descriptor instead. func (*GetConfigResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{18} + return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{16} } func (x *GetConfigResponse) GetValue() []byte { @@ -1149,7 +981,7 @@ type SetConfigRequest struct { func (x *SetConfigRequest) Reset() { *x = SetConfigRequest{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[19] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1161,7 +993,7 @@ func (x *SetConfigRequest) String() string { func (*SetConfigRequest) ProtoMessage() {} func (x *SetConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[19] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1174,7 +1006,7 @@ func (x *SetConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetConfigRequest.ProtoReflect.Descriptor instead. func (*SetConfigRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{19} + return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{17} } func (x *SetConfigRequest) GetName() string { @@ -1208,7 +1040,7 @@ type SetConfigResponse struct { func (x *SetConfigResponse) Reset() { *x = SetConfigResponse{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[20] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1220,7 +1052,7 @@ func (x *SetConfigResponse) String() string { func (*SetConfigResponse) ProtoMessage() {} func (x *SetConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[20] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1233,7 +1065,7 @@ func (x *SetConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetConfigResponse.ProtoReflect.Descriptor instead. func (*SetConfigResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{20} + return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{18} } func (x *SetConfigResponse) GetValue() []byte { @@ -1254,7 +1086,7 @@ type GetSecretRequest struct { func (x *GetSecretRequest) Reset() { *x = GetSecretRequest{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[21] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1266,7 +1098,7 @@ func (x *GetSecretRequest) String() string { func (*GetSecretRequest) ProtoMessage() {} func (x *GetSecretRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[21] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1279,7 +1111,7 @@ func (x *GetSecretRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSecretRequest.ProtoReflect.Descriptor instead. func (*GetSecretRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{21} + return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{19} } func (x *GetSecretRequest) GetName() string { @@ -1306,7 +1138,7 @@ type GetSecretResponse struct { func (x *GetSecretResponse) Reset() { *x = GetSecretResponse{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[22] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1318,7 +1150,7 @@ func (x *GetSecretResponse) String() string { func (*GetSecretResponse) ProtoMessage() {} func (x *GetSecretResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[22] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1331,7 +1163,7 @@ func (x *GetSecretResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSecretResponse.ProtoReflect.Descriptor instead. func (*GetSecretResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{22} + return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{20} } func (x *GetSecretResponse) GetValue() []byte { @@ -1353,7 +1185,7 @@ type SetSecretRequest struct { func (x *SetSecretRequest) Reset() { *x = SetSecretRequest{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[23] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1365,7 +1197,7 @@ func (x *SetSecretRequest) String() string { func (*SetSecretRequest) ProtoMessage() {} func (x *SetSecretRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[23] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1378,7 +1210,7 @@ func (x *SetSecretRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetSecretRequest.ProtoReflect.Descriptor instead. func (*SetSecretRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{23} + return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{21} } func (x *SetSecretRequest) GetName() string { @@ -1412,7 +1244,7 @@ type SetSecretResponse struct { func (x *SetSecretResponse) Reset() { *x = SetSecretResponse{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[24] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1424,7 +1256,7 @@ func (x *SetSecretResponse) String() string { func (*SetSecretResponse) ProtoMessage() {} func (x *SetSecretResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[24] + mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1437,7 +1269,7 @@ func (x *SetSecretResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetSecretResponse.ProtoReflect.Descriptor instead. func (*SetSecretResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{24} + return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{22} } func (x *SetSecretResponse) GetValue() []byte { @@ -1447,1318 +1279,361 @@ func (x *SetSecretResponse) GetValue() []byte { return nil } -type StreamEventsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UpdateInterval *durationpb.Duration `protobuf:"bytes,1,opt,name=update_interval,json=updateInterval,proto3,oneof" json:"update_interval,omitempty"` - Query *GetEventsRequest `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` -} - -func (x *StreamEventsRequest) Reset() { - *x = StreamEventsRequest{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *StreamEventsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StreamEventsRequest) ProtoMessage() {} - -func (x *StreamEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[25] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StreamEventsRequest.ProtoReflect.Descriptor instead. -func (*StreamEventsRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{25} -} - -func (x *StreamEventsRequest) GetUpdateInterval() *durationpb.Duration { - if x != nil { - return x.UpdateInterval - } - return nil -} +var File_xyz_block_ftl_console_v1_console_proto protoreflect.FileDescriptor -func (x *StreamEventsRequest) GetQuery() *GetEventsRequest { - if x != nil { - return x.Query - } - return nil +var file_xyz_block_ftl_console_v1_console_proto_rawDesc = []byte{ + 0x0a, 0x26, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x76, 0x31, 0x1a, 0x24, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, + 0x6c, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x74, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7f, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, + 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x31, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x87, 0x01, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x22, 0x77, 0x0a, 0x04, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x31, 0x0a, 0x04, 0x65, 0x6e, 0x75, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x0a, 0x0a, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x0a, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x7b, 0x0a, 0x05, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x12, 0x34, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, + 0x69, 0x63, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x09, 0x54, 0x79, 0x70, 0x65, + 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x40, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x61, 0x6c, 0x69, + 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x09, 0x74, 0x79, + 0x70, 0x65, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x7f, 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, + 0x37, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xbf, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, + 0x31, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x04, 0x76, 0x65, + 0x72, 0x62, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x2e, 0x0a, 0x13, 0x6a, 0x73, + 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6a, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xd1, 0x04, 0x0a, 0x06, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1a, + 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x65, 0x72, 0x62, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, + 0x62, 0x52, 0x05, 0x76, 0x65, 0x72, 0x62, 0x73, 0x12, 0x32, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x07, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, + 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x12, 0x40, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x05, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x18, + 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x12, 0x37, 0x0a, 0x06, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, + 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x06, 0x74, + 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x61, 0x6c, 0x69, + 0x61, 0x73, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, + 0x0b, 0x74, 0x79, 0x70, 0x65, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x22, 0x29, 0x0a, 0x0d, + 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x4b, 0x0a, 0x08, 0x54, 0x6f, 0x70, 0x6f, 0x6c, + 0x6f, 0x67, 0x79, 0x12, 0x3f, 0x0a, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, + 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x73, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x90, 0x01, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x08, + 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, + 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, + 0x67, 0x79, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x22, 0x16, 0x0a, 0x14, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x93, 0x01, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, + 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x74, 0x6f, + 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, + 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, + 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x22, 0x4e, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x42, + 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x29, 0x0a, 0x11, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x64, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, + 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x29, 0x0a, 0x11, 0x53, + 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4e, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, + 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x29, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x64, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x09, 0x0a, 0x07, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x29, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x32, 0xd1, 0x05, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, + 0x01, 0x12, 0x67, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, + 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, + 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0d, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x64, + 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x09, 0x47, 0x65, + 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x64, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x2a, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x50, 0x50, 0x01, 0x5a, 0x4c, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x42, 0x44, 0x35, 0x34, 0x35, 0x36, 0x36, 0x39, + 0x37, 0x35, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, + 0x66, 0x74, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, + 0x62, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } -type StreamEventsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +var ( + file_xyz_block_ftl_console_v1_console_proto_rawDescOnce sync.Once + file_xyz_block_ftl_console_v1_console_proto_rawDescData = file_xyz_block_ftl_console_v1_console_proto_rawDesc +) - Events []*v11.Event `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` +func file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP() []byte { + file_xyz_block_ftl_console_v1_console_proto_rawDescOnce.Do(func() { + file_xyz_block_ftl_console_v1_console_proto_rawDescData = protoimpl.X.CompressGZIP(file_xyz_block_ftl_console_v1_console_proto_rawDescData) + }) + return file_xyz_block_ftl_console_v1_console_proto_rawDescData } -func (x *StreamEventsResponse) Reset() { - *x = StreamEventsResponse{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +var file_xyz_block_ftl_console_v1_console_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_xyz_block_ftl_console_v1_console_proto_goTypes = []any{ + (*Config)(nil), // 0: xyz.block.ftl.console.v1.Config + (*Data)(nil), // 1: xyz.block.ftl.console.v1.Data + (*Database)(nil), // 2: xyz.block.ftl.console.v1.Database + (*Enum)(nil), // 3: xyz.block.ftl.console.v1.Enum + (*Topic)(nil), // 4: xyz.block.ftl.console.v1.Topic + (*TypeAlias)(nil), // 5: xyz.block.ftl.console.v1.TypeAlias + (*Secret)(nil), // 6: xyz.block.ftl.console.v1.Secret + (*Verb)(nil), // 7: xyz.block.ftl.console.v1.Verb + (*Module)(nil), // 8: xyz.block.ftl.console.v1.Module + (*TopologyGroup)(nil), // 9: xyz.block.ftl.console.v1.TopologyGroup + (*Topology)(nil), // 10: xyz.block.ftl.console.v1.Topology + (*GetModulesRequest)(nil), // 11: xyz.block.ftl.console.v1.GetModulesRequest + (*GetModulesResponse)(nil), // 12: xyz.block.ftl.console.v1.GetModulesResponse + (*StreamModulesRequest)(nil), // 13: xyz.block.ftl.console.v1.StreamModulesRequest + (*StreamModulesResponse)(nil), // 14: xyz.block.ftl.console.v1.StreamModulesResponse + (*GetConfigRequest)(nil), // 15: xyz.block.ftl.console.v1.GetConfigRequest + (*GetConfigResponse)(nil), // 16: xyz.block.ftl.console.v1.GetConfigResponse + (*SetConfigRequest)(nil), // 17: xyz.block.ftl.console.v1.SetConfigRequest + (*SetConfigResponse)(nil), // 18: xyz.block.ftl.console.v1.SetConfigResponse + (*GetSecretRequest)(nil), // 19: xyz.block.ftl.console.v1.GetSecretRequest + (*GetSecretResponse)(nil), // 20: xyz.block.ftl.console.v1.GetSecretResponse + (*SetSecretRequest)(nil), // 21: xyz.block.ftl.console.v1.SetSecretRequest + (*SetSecretResponse)(nil), // 22: xyz.block.ftl.console.v1.SetSecretResponse + (*v1.Config)(nil), // 23: xyz.block.ftl.schema.v1.Config + (*v1.Ref)(nil), // 24: xyz.block.ftl.schema.v1.Ref + (*v1.Data)(nil), // 25: xyz.block.ftl.schema.v1.Data + (*v1.Database)(nil), // 26: xyz.block.ftl.schema.v1.Database + (*v1.Enum)(nil), // 27: xyz.block.ftl.schema.v1.Enum + (*v1.Topic)(nil), // 28: xyz.block.ftl.schema.v1.Topic + (*v1.TypeAlias)(nil), // 29: xyz.block.ftl.schema.v1.TypeAlias + (*v1.Secret)(nil), // 30: xyz.block.ftl.schema.v1.Secret + (*v1.Verb)(nil), // 31: xyz.block.ftl.schema.v1.Verb + (*v11.PingRequest)(nil), // 32: xyz.block.ftl.v1.PingRequest + (*v11.PingResponse)(nil), // 33: xyz.block.ftl.v1.PingResponse } - -func (x *StreamEventsResponse) String() string { - return protoimpl.X.MessageStringOf(x) +var file_xyz_block_ftl_console_v1_console_proto_depIdxs = []int32{ + 23, // 0: xyz.block.ftl.console.v1.Config.config:type_name -> xyz.block.ftl.schema.v1.Config + 24, // 1: xyz.block.ftl.console.v1.Config.references:type_name -> xyz.block.ftl.schema.v1.Ref + 25, // 2: xyz.block.ftl.console.v1.Data.data:type_name -> xyz.block.ftl.schema.v1.Data + 24, // 3: xyz.block.ftl.console.v1.Data.references:type_name -> xyz.block.ftl.schema.v1.Ref + 26, // 4: xyz.block.ftl.console.v1.Database.database:type_name -> xyz.block.ftl.schema.v1.Database + 24, // 5: xyz.block.ftl.console.v1.Database.references:type_name -> xyz.block.ftl.schema.v1.Ref + 27, // 6: xyz.block.ftl.console.v1.Enum.enum:type_name -> xyz.block.ftl.schema.v1.Enum + 24, // 7: xyz.block.ftl.console.v1.Enum.references:type_name -> xyz.block.ftl.schema.v1.Ref + 28, // 8: xyz.block.ftl.console.v1.Topic.topic:type_name -> xyz.block.ftl.schema.v1.Topic + 24, // 9: xyz.block.ftl.console.v1.Topic.references:type_name -> xyz.block.ftl.schema.v1.Ref + 29, // 10: xyz.block.ftl.console.v1.TypeAlias.typealias:type_name -> xyz.block.ftl.schema.v1.TypeAlias + 24, // 11: xyz.block.ftl.console.v1.TypeAlias.references:type_name -> xyz.block.ftl.schema.v1.Ref + 30, // 12: xyz.block.ftl.console.v1.Secret.secret:type_name -> xyz.block.ftl.schema.v1.Secret + 24, // 13: xyz.block.ftl.console.v1.Secret.references:type_name -> xyz.block.ftl.schema.v1.Ref + 31, // 14: xyz.block.ftl.console.v1.Verb.verb:type_name -> xyz.block.ftl.schema.v1.Verb + 24, // 15: xyz.block.ftl.console.v1.Verb.references:type_name -> xyz.block.ftl.schema.v1.Ref + 7, // 16: xyz.block.ftl.console.v1.Module.verbs:type_name -> xyz.block.ftl.console.v1.Verb + 1, // 17: xyz.block.ftl.console.v1.Module.data:type_name -> xyz.block.ftl.console.v1.Data + 6, // 18: xyz.block.ftl.console.v1.Module.secrets:type_name -> xyz.block.ftl.console.v1.Secret + 0, // 19: xyz.block.ftl.console.v1.Module.configs:type_name -> xyz.block.ftl.console.v1.Config + 2, // 20: xyz.block.ftl.console.v1.Module.databases:type_name -> xyz.block.ftl.console.v1.Database + 3, // 21: xyz.block.ftl.console.v1.Module.enums:type_name -> xyz.block.ftl.console.v1.Enum + 4, // 22: xyz.block.ftl.console.v1.Module.topics:type_name -> xyz.block.ftl.console.v1.Topic + 5, // 23: xyz.block.ftl.console.v1.Module.typealiases:type_name -> xyz.block.ftl.console.v1.TypeAlias + 9, // 24: xyz.block.ftl.console.v1.Topology.levels:type_name -> xyz.block.ftl.console.v1.TopologyGroup + 8, // 25: xyz.block.ftl.console.v1.GetModulesResponse.modules:type_name -> xyz.block.ftl.console.v1.Module + 10, // 26: xyz.block.ftl.console.v1.GetModulesResponse.topology:type_name -> xyz.block.ftl.console.v1.Topology + 8, // 27: xyz.block.ftl.console.v1.StreamModulesResponse.modules:type_name -> xyz.block.ftl.console.v1.Module + 10, // 28: xyz.block.ftl.console.v1.StreamModulesResponse.topology:type_name -> xyz.block.ftl.console.v1.Topology + 32, // 29: xyz.block.ftl.console.v1.ConsoleService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 11, // 30: xyz.block.ftl.console.v1.ConsoleService.GetModules:input_type -> xyz.block.ftl.console.v1.GetModulesRequest + 13, // 31: xyz.block.ftl.console.v1.ConsoleService.StreamModules:input_type -> xyz.block.ftl.console.v1.StreamModulesRequest + 15, // 32: xyz.block.ftl.console.v1.ConsoleService.GetConfig:input_type -> xyz.block.ftl.console.v1.GetConfigRequest + 17, // 33: xyz.block.ftl.console.v1.ConsoleService.SetConfig:input_type -> xyz.block.ftl.console.v1.SetConfigRequest + 19, // 34: xyz.block.ftl.console.v1.ConsoleService.GetSecret:input_type -> xyz.block.ftl.console.v1.GetSecretRequest + 21, // 35: xyz.block.ftl.console.v1.ConsoleService.SetSecret:input_type -> xyz.block.ftl.console.v1.SetSecretRequest + 33, // 36: xyz.block.ftl.console.v1.ConsoleService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 12, // 37: xyz.block.ftl.console.v1.ConsoleService.GetModules:output_type -> xyz.block.ftl.console.v1.GetModulesResponse + 14, // 38: xyz.block.ftl.console.v1.ConsoleService.StreamModules:output_type -> xyz.block.ftl.console.v1.StreamModulesResponse + 16, // 39: xyz.block.ftl.console.v1.ConsoleService.GetConfig:output_type -> xyz.block.ftl.console.v1.GetConfigResponse + 18, // 40: xyz.block.ftl.console.v1.ConsoleService.SetConfig:output_type -> xyz.block.ftl.console.v1.SetConfigResponse + 20, // 41: xyz.block.ftl.console.v1.ConsoleService.GetSecret:output_type -> xyz.block.ftl.console.v1.GetSecretResponse + 22, // 42: xyz.block.ftl.console.v1.ConsoleService.SetSecret:output_type -> xyz.block.ftl.console.v1.SetSecretResponse + 36, // [36:43] is the sub-list for method output_type + 29, // [29:36] is the sub-list for method input_type + 29, // [29:29] is the sub-list for extension type_name + 29, // [29:29] is the sub-list for extension extendee + 0, // [0:29] is the sub-list for field type_name } -func (*StreamEventsResponse) ProtoMessage() {} - -func (x *StreamEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[26] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func init() { file_xyz_block_ftl_console_v1_console_proto_init() } +func file_xyz_block_ftl_console_v1_console_proto_init() { + if File_xyz_block_ftl_console_v1_console_proto != nil { + return } - return mi.MessageOf(x) -} - -// Deprecated: Use StreamEventsResponse.ProtoReflect.Descriptor instead. -func (*StreamEventsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{26} -} - -func (x *StreamEventsResponse) GetEvents() []*v11.Event { - if x != nil { - return x.Events - } - return nil -} - -// Limit the number of events returned. -type GetEventsRequest_LimitFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Limit int32 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"` -} - -func (x *GetEventsRequest_LimitFilter) Reset() { - *x = GetEventsRequest_LimitFilter{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetEventsRequest_LimitFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEventsRequest_LimitFilter) ProtoMessage() {} - -func (x *GetEventsRequest_LimitFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[27] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEventsRequest_LimitFilter.ProtoReflect.Descriptor instead. -func (*GetEventsRequest_LimitFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15, 0} -} - -func (x *GetEventsRequest_LimitFilter) GetLimit() int32 { - if x != nil { - return x.Limit - } - return 0 -} - -// Filters events by log level. -type GetEventsRequest_LogLevelFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LogLevel v11.LogLevel `protobuf:"varint,1,opt,name=log_level,json=logLevel,proto3,enum=xyz.block.ftl.timeline.v1.LogLevel" json:"log_level,omitempty"` -} - -func (x *GetEventsRequest_LogLevelFilter) Reset() { - *x = GetEventsRequest_LogLevelFilter{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetEventsRequest_LogLevelFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEventsRequest_LogLevelFilter) ProtoMessage() {} - -func (x *GetEventsRequest_LogLevelFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[28] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEventsRequest_LogLevelFilter.ProtoReflect.Descriptor instead. -func (*GetEventsRequest_LogLevelFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15, 1} -} - -func (x *GetEventsRequest_LogLevelFilter) GetLogLevel() v11.LogLevel { - if x != nil { - return x.LogLevel - } - return v11.LogLevel(0) -} - -// Filters events by deployment key. -type GetEventsRequest_DeploymentFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Deployments []string `protobuf:"bytes,1,rep,name=deployments,proto3" json:"deployments,omitempty"` -} - -func (x *GetEventsRequest_DeploymentFilter) Reset() { - *x = GetEventsRequest_DeploymentFilter{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetEventsRequest_DeploymentFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEventsRequest_DeploymentFilter) ProtoMessage() {} - -func (x *GetEventsRequest_DeploymentFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[29] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEventsRequest_DeploymentFilter.ProtoReflect.Descriptor instead. -func (*GetEventsRequest_DeploymentFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15, 2} -} - -func (x *GetEventsRequest_DeploymentFilter) GetDeployments() []string { - if x != nil { - return x.Deployments - } - return nil -} - -// Filters events by request key. -type GetEventsRequest_RequestFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Requests []string `protobuf:"bytes,1,rep,name=requests,proto3" json:"requests,omitempty"` -} - -func (x *GetEventsRequest_RequestFilter) Reset() { - *x = GetEventsRequest_RequestFilter{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetEventsRequest_RequestFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEventsRequest_RequestFilter) ProtoMessage() {} - -func (x *GetEventsRequest_RequestFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[30] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEventsRequest_RequestFilter.ProtoReflect.Descriptor instead. -func (*GetEventsRequest_RequestFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15, 3} -} - -func (x *GetEventsRequest_RequestFilter) GetRequests() []string { - if x != nil { - return x.Requests - } - return nil -} - -// Filters events by event type. -type GetEventsRequest_EventTypeFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventTypes []v11.EventType `protobuf:"varint,1,rep,packed,name=event_types,json=eventTypes,proto3,enum=xyz.block.ftl.timeline.v1.EventType" json:"event_types,omitempty"` -} - -func (x *GetEventsRequest_EventTypeFilter) Reset() { - *x = GetEventsRequest_EventTypeFilter{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetEventsRequest_EventTypeFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEventsRequest_EventTypeFilter) ProtoMessage() {} - -func (x *GetEventsRequest_EventTypeFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[31] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEventsRequest_EventTypeFilter.ProtoReflect.Descriptor instead. -func (*GetEventsRequest_EventTypeFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15, 4} -} - -func (x *GetEventsRequest_EventTypeFilter) GetEventTypes() []v11.EventType { - if x != nil { - return x.EventTypes - } - return nil -} - -// Filters events by time. -// -// Either end of the time range can be omitted to indicate no bound. -type GetEventsRequest_TimeFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OlderThan *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=older_than,json=olderThan,proto3,oneof" json:"older_than,omitempty"` - NewerThan *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=newer_than,json=newerThan,proto3,oneof" json:"newer_than,omitempty"` -} - -func (x *GetEventsRequest_TimeFilter) Reset() { - *x = GetEventsRequest_TimeFilter{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetEventsRequest_TimeFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEventsRequest_TimeFilter) ProtoMessage() {} - -func (x *GetEventsRequest_TimeFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[32] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEventsRequest_TimeFilter.ProtoReflect.Descriptor instead. -func (*GetEventsRequest_TimeFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15, 5} -} - -func (x *GetEventsRequest_TimeFilter) GetOlderThan() *timestamppb.Timestamp { - if x != nil { - return x.OlderThan - } - return nil -} - -func (x *GetEventsRequest_TimeFilter) GetNewerThan() *timestamppb.Timestamp { - if x != nil { - return x.NewerThan - } - return nil -} - -// Filters events by ID. -// -// Either end of the ID range can be omitted to indicate no bound. -type GetEventsRequest_IDFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LowerThan *int64 `protobuf:"varint,1,opt,name=lower_than,json=lowerThan,proto3,oneof" json:"lower_than,omitempty"` - HigherThan *int64 `protobuf:"varint,2,opt,name=higher_than,json=higherThan,proto3,oneof" json:"higher_than,omitempty"` -} - -func (x *GetEventsRequest_IDFilter) Reset() { - *x = GetEventsRequest_IDFilter{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetEventsRequest_IDFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEventsRequest_IDFilter) ProtoMessage() {} - -func (x *GetEventsRequest_IDFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[33] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEventsRequest_IDFilter.ProtoReflect.Descriptor instead. -func (*GetEventsRequest_IDFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15, 6} -} - -func (x *GetEventsRequest_IDFilter) GetLowerThan() int64 { - if x != nil && x.LowerThan != nil { - return *x.LowerThan - } - return 0 -} - -func (x *GetEventsRequest_IDFilter) GetHigherThan() int64 { - if x != nil && x.HigherThan != nil { - return *x.HigherThan - } - return 0 -} - -// Filters events by call. -type GetEventsRequest_CallFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DestModule string `protobuf:"bytes,1,opt,name=dest_module,json=destModule,proto3" json:"dest_module,omitempty"` - DestVerb *string `protobuf:"bytes,2,opt,name=dest_verb,json=destVerb,proto3,oneof" json:"dest_verb,omitempty"` - SourceModule *string `protobuf:"bytes,3,opt,name=source_module,json=sourceModule,proto3,oneof" json:"source_module,omitempty"` -} - -func (x *GetEventsRequest_CallFilter) Reset() { - *x = GetEventsRequest_CallFilter{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetEventsRequest_CallFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEventsRequest_CallFilter) ProtoMessage() {} - -func (x *GetEventsRequest_CallFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[34] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEventsRequest_CallFilter.ProtoReflect.Descriptor instead. -func (*GetEventsRequest_CallFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15, 7} -} - -func (x *GetEventsRequest_CallFilter) GetDestModule() string { - if x != nil { - return x.DestModule - } - return "" -} - -func (x *GetEventsRequest_CallFilter) GetDestVerb() string { - if x != nil && x.DestVerb != nil { - return *x.DestVerb - } - return "" -} - -func (x *GetEventsRequest_CallFilter) GetSourceModule() string { - if x != nil && x.SourceModule != nil { - return *x.SourceModule - } - return "" -} - -type GetEventsRequest_ModuleFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` - Verb *string `protobuf:"bytes,2,opt,name=verb,proto3,oneof" json:"verb,omitempty"` -} - -func (x *GetEventsRequest_ModuleFilter) Reset() { - *x = GetEventsRequest_ModuleFilter{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetEventsRequest_ModuleFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEventsRequest_ModuleFilter) ProtoMessage() {} - -func (x *GetEventsRequest_ModuleFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[35] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEventsRequest_ModuleFilter.ProtoReflect.Descriptor instead. -func (*GetEventsRequest_ModuleFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15, 8} -} - -func (x *GetEventsRequest_ModuleFilter) GetModule() string { - if x != nil { - return x.Module - } - return "" -} - -func (x *GetEventsRequest_ModuleFilter) GetVerb() string { - if x != nil && x.Verb != nil { - return *x.Verb - } - return "" -} - -type GetEventsRequest_Filter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // These map 1:1 with filters in backend/controller/internal/dal/events.go - // - // Types that are assignable to Filter: - // - // *GetEventsRequest_Filter_Limit - // *GetEventsRequest_Filter_LogLevel - // *GetEventsRequest_Filter_Deployments - // *GetEventsRequest_Filter_Requests - // *GetEventsRequest_Filter_EventTypes - // *GetEventsRequest_Filter_Time - // *GetEventsRequest_Filter_Id - // *GetEventsRequest_Filter_Call - // *GetEventsRequest_Filter_Module - Filter isGetEventsRequest_Filter_Filter `protobuf_oneof:"filter"` -} - -func (x *GetEventsRequest_Filter) Reset() { - *x = GetEventsRequest_Filter{} - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetEventsRequest_Filter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEventsRequest_Filter) ProtoMessage() {} - -func (x *GetEventsRequest_Filter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_console_v1_console_proto_msgTypes[36] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEventsRequest_Filter.ProtoReflect.Descriptor instead. -func (*GetEventsRequest_Filter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP(), []int{15, 9} -} - -func (m *GetEventsRequest_Filter) GetFilter() isGetEventsRequest_Filter_Filter { - if m != nil { - return m.Filter - } - return nil -} - -func (x *GetEventsRequest_Filter) GetLimit() *GetEventsRequest_LimitFilter { - if x, ok := x.GetFilter().(*GetEventsRequest_Filter_Limit); ok { - return x.Limit - } - return nil -} - -func (x *GetEventsRequest_Filter) GetLogLevel() *GetEventsRequest_LogLevelFilter { - if x, ok := x.GetFilter().(*GetEventsRequest_Filter_LogLevel); ok { - return x.LogLevel - } - return nil -} - -func (x *GetEventsRequest_Filter) GetDeployments() *GetEventsRequest_DeploymentFilter { - if x, ok := x.GetFilter().(*GetEventsRequest_Filter_Deployments); ok { - return x.Deployments - } - return nil -} - -func (x *GetEventsRequest_Filter) GetRequests() *GetEventsRequest_RequestFilter { - if x, ok := x.GetFilter().(*GetEventsRequest_Filter_Requests); ok { - return x.Requests - } - return nil -} - -func (x *GetEventsRequest_Filter) GetEventTypes() *GetEventsRequest_EventTypeFilter { - if x, ok := x.GetFilter().(*GetEventsRequest_Filter_EventTypes); ok { - return x.EventTypes - } - return nil -} - -func (x *GetEventsRequest_Filter) GetTime() *GetEventsRequest_TimeFilter { - if x, ok := x.GetFilter().(*GetEventsRequest_Filter_Time); ok { - return x.Time - } - return nil -} - -func (x *GetEventsRequest_Filter) GetId() *GetEventsRequest_IDFilter { - if x, ok := x.GetFilter().(*GetEventsRequest_Filter_Id); ok { - return x.Id - } - return nil -} - -func (x *GetEventsRequest_Filter) GetCall() *GetEventsRequest_CallFilter { - if x, ok := x.GetFilter().(*GetEventsRequest_Filter_Call); ok { - return x.Call - } - return nil -} - -func (x *GetEventsRequest_Filter) GetModule() *GetEventsRequest_ModuleFilter { - if x, ok := x.GetFilter().(*GetEventsRequest_Filter_Module); ok { - return x.Module - } - return nil -} - -type isGetEventsRequest_Filter_Filter interface { - isGetEventsRequest_Filter_Filter() -} - -type GetEventsRequest_Filter_Limit struct { - Limit *GetEventsRequest_LimitFilter `protobuf:"bytes,1,opt,name=limit,proto3,oneof"` -} - -type GetEventsRequest_Filter_LogLevel struct { - LogLevel *GetEventsRequest_LogLevelFilter `protobuf:"bytes,2,opt,name=log_level,json=logLevel,proto3,oneof"` -} - -type GetEventsRequest_Filter_Deployments struct { - Deployments *GetEventsRequest_DeploymentFilter `protobuf:"bytes,3,opt,name=deployments,proto3,oneof"` -} - -type GetEventsRequest_Filter_Requests struct { - Requests *GetEventsRequest_RequestFilter `protobuf:"bytes,4,opt,name=requests,proto3,oneof"` -} - -type GetEventsRequest_Filter_EventTypes struct { - EventTypes *GetEventsRequest_EventTypeFilter `protobuf:"bytes,5,opt,name=event_types,json=eventTypes,proto3,oneof"` -} - -type GetEventsRequest_Filter_Time struct { - Time *GetEventsRequest_TimeFilter `protobuf:"bytes,6,opt,name=time,proto3,oneof"` -} - -type GetEventsRequest_Filter_Id struct { - Id *GetEventsRequest_IDFilter `protobuf:"bytes,7,opt,name=id,proto3,oneof"` -} - -type GetEventsRequest_Filter_Call struct { - Call *GetEventsRequest_CallFilter `protobuf:"bytes,8,opt,name=call,proto3,oneof"` -} - -type GetEventsRequest_Filter_Module struct { - Module *GetEventsRequest_ModuleFilter `protobuf:"bytes,9,opt,name=module,proto3,oneof"` -} - -func (*GetEventsRequest_Filter_Limit) isGetEventsRequest_Filter_Filter() {} - -func (*GetEventsRequest_Filter_LogLevel) isGetEventsRequest_Filter_Filter() {} - -func (*GetEventsRequest_Filter_Deployments) isGetEventsRequest_Filter_Filter() {} - -func (*GetEventsRequest_Filter_Requests) isGetEventsRequest_Filter_Filter() {} - -func (*GetEventsRequest_Filter_EventTypes) isGetEventsRequest_Filter_Filter() {} - -func (*GetEventsRequest_Filter_Time) isGetEventsRequest_Filter_Filter() {} - -func (*GetEventsRequest_Filter_Id) isGetEventsRequest_Filter_Filter() {} - -func (*GetEventsRequest_Filter_Call) isGetEventsRequest_Filter_Filter() {} - -func (*GetEventsRequest_Filter_Module) isGetEventsRequest_Filter_Filter() {} - -var File_xyz_block_ftl_console_v1_console_proto protoreflect.FileDescriptor - -var file_xyz_block_ftl_console_v1_console_proto_rawDesc = []byte{ - 0x0a, 0x26, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, - 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, - 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, - 0x74, 0x6c, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x78, 0x79, 0x7a, 0x2f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x1a, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, - 0x76, 0x31, 0x2f, 0x66, 0x74, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7f, 0x0a, 0x06, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x8f, 0x01, - 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, - 0x87, 0x01, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, - 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x77, 0x0a, 0x04, 0x45, 0x6e, 0x75, - 0x6d, 0x12, 0x31, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, - 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x22, 0x7b, 0x0a, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x34, 0x0a, 0x05, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, - 0x8b, 0x01, 0x0a, 0x09, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x40, 0x0a, - 0x09, 0x74, 0x79, 0x70, 0x65, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x52, 0x09, 0x74, 0x79, 0x70, 0x65, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, - 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x7f, 0x0a, - 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xbf, - 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x31, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x65, 0x72, 0x62, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x2e, 0x0a, 0x13, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x11, 0x6a, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x3c, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x22, 0xd1, 0x04, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, - 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, - 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x65, - 0x72, 0x62, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x05, 0x76, 0x65, 0x72, 0x62, 0x73, - 0x12, 0x32, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, - 0x12, 0x3a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x40, 0x0a, 0x09, - 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x34, - 0x0a, 0x05, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, - 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x65, - 0x6e, 0x75, 0x6d, 0x73, 0x12, 0x37, 0x0a, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x18, 0x0b, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x45, 0x0a, - 0x0b, 0x74, 0x79, 0x70, 0x65, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, - 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x61, 0x6c, 0x69, - 0x61, 0x73, 0x65, 0x73, 0x22, 0x29, 0x0a, 0x0d, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, - 0x4b, 0x0a, 0x08, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, 0x3f, 0x0a, 0x06, 0x6c, - 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x22, 0x13, 0x0a, 0x11, - 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x90, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, - 0x6c, 0x6f, 0x67, 0x79, 0x22, 0x16, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x93, 0x01, 0x0a, - 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, - 0x67, 0x79, 0x22, 0xc5, 0x0e, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x46, 0x0a, 0x05, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x1a, 0x23, 0x0a, 0x0b, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x1a, 0x52, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x09, 0x6c, 0x6f, 0x67, - 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x1a, 0x34, 0x0a, 0x10, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x1a, 0x2b, 0x0a, 0x0d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x1a, 0x58, - 0x0a, 0x0f, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x12, 0x45, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x1a, 0xaa, 0x01, 0x0a, 0x0a, 0x54, 0x69, 0x6d, - 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x0a, 0x6f, 0x6c, 0x64, 0x65, 0x72, - 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x09, 0x6f, 0x6c, 0x64, 0x65, 0x72, - 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x65, 0x72, - 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x01, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x65, 0x72, - 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6f, 0x6c, 0x64, 0x65, - 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6e, 0x65, 0x77, 0x65, 0x72, - 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x1a, 0x73, 0x0a, 0x08, 0x49, 0x44, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x12, 0x22, 0x0a, 0x0a, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x54, 0x68, - 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x5f, - 0x74, 0x68, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x0a, 0x68, 0x69, - 0x67, 0x68, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, - 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x68, - 0x69, 0x67, 0x68, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x1a, 0x99, 0x01, 0x0a, 0x0a, 0x43, - 0x61, 0x6c, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x64, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x64, 0x65, - 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x08, 0x64, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x62, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x5f, - 0x76, 0x65, 0x72, 0x62, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x1a, 0x48, 0x0a, 0x0c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x17, - 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, - 0x76, 0x65, 0x72, 0x62, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x76, 0x65, 0x72, 0x62, - 0x1a, 0x88, 0x06, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4e, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x58, 0x0a, 0x09, 0x6c, - 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x6f, 0x67, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x5f, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x56, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x5d, - 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, - 0x00, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4b, 0x0a, - 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x49, 0x44, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x4b, 0x0a, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x61, 0x6c, 0x6c, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x51, - 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x3d, 0x0a, 0x05, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4f, - 0x52, 0x44, 0x45, 0x52, 0x5f, 0x41, 0x53, 0x43, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x52, - 0x44, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x10, 0x02, 0x22, 0x75, 0x0a, 0x11, 0x47, 0x65, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x38, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x06, 0x63, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x22, 0x4e, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x22, 0x29, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x64, 0x0a, 0x10, - 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, - 0x01, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x22, 0x29, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4e, 0x0a, - 0x10, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, - 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x29, 0x0a, - 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x64, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x29, - 0x0a, 0x11, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x13, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x47, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x05, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x42, 0x12, 0x0a, 0x10, - 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x22, 0x50, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x32, 0xa8, 0x07, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, - 0x01, 0x12, 0x67, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, - 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0d, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6f, - 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2d, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, - 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x64, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x09, 0x53, - 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x64, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x2a, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x12, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x50, 0x50, - 0x01, 0x5a, 0x4c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x42, - 0x44, 0x35, 0x34, 0x35, 0x36, 0x36, 0x39, 0x37, 0x35, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x62, 0x61, - 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, - 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_xyz_block_ftl_console_v1_console_proto_rawDescOnce sync.Once - file_xyz_block_ftl_console_v1_console_proto_rawDescData = file_xyz_block_ftl_console_v1_console_proto_rawDesc -) - -func file_xyz_block_ftl_console_v1_console_proto_rawDescGZIP() []byte { - file_xyz_block_ftl_console_v1_console_proto_rawDescOnce.Do(func() { - file_xyz_block_ftl_console_v1_console_proto_rawDescData = protoimpl.X.CompressGZIP(file_xyz_block_ftl_console_v1_console_proto_rawDescData) - }) - return file_xyz_block_ftl_console_v1_console_proto_rawDescData -} - -var file_xyz_block_ftl_console_v1_console_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_xyz_block_ftl_console_v1_console_proto_msgTypes = make([]protoimpl.MessageInfo, 37) -var file_xyz_block_ftl_console_v1_console_proto_goTypes = []any{ - (GetEventsRequest_Order)(0), // 0: xyz.block.ftl.console.v1.GetEventsRequest.Order - (*Config)(nil), // 1: xyz.block.ftl.console.v1.Config - (*Data)(nil), // 2: xyz.block.ftl.console.v1.Data - (*Database)(nil), // 3: xyz.block.ftl.console.v1.Database - (*Enum)(nil), // 4: xyz.block.ftl.console.v1.Enum - (*Topic)(nil), // 5: xyz.block.ftl.console.v1.Topic - (*TypeAlias)(nil), // 6: xyz.block.ftl.console.v1.TypeAlias - (*Secret)(nil), // 7: xyz.block.ftl.console.v1.Secret - (*Verb)(nil), // 8: xyz.block.ftl.console.v1.Verb - (*Module)(nil), // 9: xyz.block.ftl.console.v1.Module - (*TopologyGroup)(nil), // 10: xyz.block.ftl.console.v1.TopologyGroup - (*Topology)(nil), // 11: xyz.block.ftl.console.v1.Topology - (*GetModulesRequest)(nil), // 12: xyz.block.ftl.console.v1.GetModulesRequest - (*GetModulesResponse)(nil), // 13: xyz.block.ftl.console.v1.GetModulesResponse - (*StreamModulesRequest)(nil), // 14: xyz.block.ftl.console.v1.StreamModulesRequest - (*StreamModulesResponse)(nil), // 15: xyz.block.ftl.console.v1.StreamModulesResponse - (*GetEventsRequest)(nil), // 16: xyz.block.ftl.console.v1.GetEventsRequest - (*GetEventsResponse)(nil), // 17: xyz.block.ftl.console.v1.GetEventsResponse - (*GetConfigRequest)(nil), // 18: xyz.block.ftl.console.v1.GetConfigRequest - (*GetConfigResponse)(nil), // 19: xyz.block.ftl.console.v1.GetConfigResponse - (*SetConfigRequest)(nil), // 20: xyz.block.ftl.console.v1.SetConfigRequest - (*SetConfigResponse)(nil), // 21: xyz.block.ftl.console.v1.SetConfigResponse - (*GetSecretRequest)(nil), // 22: xyz.block.ftl.console.v1.GetSecretRequest - (*GetSecretResponse)(nil), // 23: xyz.block.ftl.console.v1.GetSecretResponse - (*SetSecretRequest)(nil), // 24: xyz.block.ftl.console.v1.SetSecretRequest - (*SetSecretResponse)(nil), // 25: xyz.block.ftl.console.v1.SetSecretResponse - (*StreamEventsRequest)(nil), // 26: xyz.block.ftl.console.v1.StreamEventsRequest - (*StreamEventsResponse)(nil), // 27: xyz.block.ftl.console.v1.StreamEventsResponse - (*GetEventsRequest_LimitFilter)(nil), // 28: xyz.block.ftl.console.v1.GetEventsRequest.LimitFilter - (*GetEventsRequest_LogLevelFilter)(nil), // 29: xyz.block.ftl.console.v1.GetEventsRequest.LogLevelFilter - (*GetEventsRequest_DeploymentFilter)(nil), // 30: xyz.block.ftl.console.v1.GetEventsRequest.DeploymentFilter - (*GetEventsRequest_RequestFilter)(nil), // 31: xyz.block.ftl.console.v1.GetEventsRequest.RequestFilter - (*GetEventsRequest_EventTypeFilter)(nil), // 32: xyz.block.ftl.console.v1.GetEventsRequest.EventTypeFilter - (*GetEventsRequest_TimeFilter)(nil), // 33: xyz.block.ftl.console.v1.GetEventsRequest.TimeFilter - (*GetEventsRequest_IDFilter)(nil), // 34: xyz.block.ftl.console.v1.GetEventsRequest.IDFilter - (*GetEventsRequest_CallFilter)(nil), // 35: xyz.block.ftl.console.v1.GetEventsRequest.CallFilter - (*GetEventsRequest_ModuleFilter)(nil), // 36: xyz.block.ftl.console.v1.GetEventsRequest.ModuleFilter - (*GetEventsRequest_Filter)(nil), // 37: xyz.block.ftl.console.v1.GetEventsRequest.Filter - (*v1.Config)(nil), // 38: xyz.block.ftl.schema.v1.Config - (*v1.Ref)(nil), // 39: xyz.block.ftl.schema.v1.Ref - (*v1.Data)(nil), // 40: xyz.block.ftl.schema.v1.Data - (*v1.Database)(nil), // 41: xyz.block.ftl.schema.v1.Database - (*v1.Enum)(nil), // 42: xyz.block.ftl.schema.v1.Enum - (*v1.Topic)(nil), // 43: xyz.block.ftl.schema.v1.Topic - (*v1.TypeAlias)(nil), // 44: xyz.block.ftl.schema.v1.TypeAlias - (*v1.Secret)(nil), // 45: xyz.block.ftl.schema.v1.Secret - (*v1.Verb)(nil), // 46: xyz.block.ftl.schema.v1.Verb - (*v11.Event)(nil), // 47: xyz.block.ftl.timeline.v1.Event - (*durationpb.Duration)(nil), // 48: google.protobuf.Duration - (v11.LogLevel)(0), // 49: xyz.block.ftl.timeline.v1.LogLevel - (v11.EventType)(0), // 50: xyz.block.ftl.timeline.v1.EventType - (*timestamppb.Timestamp)(nil), // 51: google.protobuf.Timestamp - (*v12.PingRequest)(nil), // 52: xyz.block.ftl.v1.PingRequest - (*v12.PingResponse)(nil), // 53: xyz.block.ftl.v1.PingResponse -} -var file_xyz_block_ftl_console_v1_console_proto_depIdxs = []int32{ - 38, // 0: xyz.block.ftl.console.v1.Config.config:type_name -> xyz.block.ftl.schema.v1.Config - 39, // 1: xyz.block.ftl.console.v1.Config.references:type_name -> xyz.block.ftl.schema.v1.Ref - 40, // 2: xyz.block.ftl.console.v1.Data.data:type_name -> xyz.block.ftl.schema.v1.Data - 39, // 3: xyz.block.ftl.console.v1.Data.references:type_name -> xyz.block.ftl.schema.v1.Ref - 41, // 4: xyz.block.ftl.console.v1.Database.database:type_name -> xyz.block.ftl.schema.v1.Database - 39, // 5: xyz.block.ftl.console.v1.Database.references:type_name -> xyz.block.ftl.schema.v1.Ref - 42, // 6: xyz.block.ftl.console.v1.Enum.enum:type_name -> xyz.block.ftl.schema.v1.Enum - 39, // 7: xyz.block.ftl.console.v1.Enum.references:type_name -> xyz.block.ftl.schema.v1.Ref - 43, // 8: xyz.block.ftl.console.v1.Topic.topic:type_name -> xyz.block.ftl.schema.v1.Topic - 39, // 9: xyz.block.ftl.console.v1.Topic.references:type_name -> xyz.block.ftl.schema.v1.Ref - 44, // 10: xyz.block.ftl.console.v1.TypeAlias.typealias:type_name -> xyz.block.ftl.schema.v1.TypeAlias - 39, // 11: xyz.block.ftl.console.v1.TypeAlias.references:type_name -> xyz.block.ftl.schema.v1.Ref - 45, // 12: xyz.block.ftl.console.v1.Secret.secret:type_name -> xyz.block.ftl.schema.v1.Secret - 39, // 13: xyz.block.ftl.console.v1.Secret.references:type_name -> xyz.block.ftl.schema.v1.Ref - 46, // 14: xyz.block.ftl.console.v1.Verb.verb:type_name -> xyz.block.ftl.schema.v1.Verb - 39, // 15: xyz.block.ftl.console.v1.Verb.references:type_name -> xyz.block.ftl.schema.v1.Ref - 8, // 16: xyz.block.ftl.console.v1.Module.verbs:type_name -> xyz.block.ftl.console.v1.Verb - 2, // 17: xyz.block.ftl.console.v1.Module.data:type_name -> xyz.block.ftl.console.v1.Data - 7, // 18: xyz.block.ftl.console.v1.Module.secrets:type_name -> xyz.block.ftl.console.v1.Secret - 1, // 19: xyz.block.ftl.console.v1.Module.configs:type_name -> xyz.block.ftl.console.v1.Config - 3, // 20: xyz.block.ftl.console.v1.Module.databases:type_name -> xyz.block.ftl.console.v1.Database - 4, // 21: xyz.block.ftl.console.v1.Module.enums:type_name -> xyz.block.ftl.console.v1.Enum - 5, // 22: xyz.block.ftl.console.v1.Module.topics:type_name -> xyz.block.ftl.console.v1.Topic - 6, // 23: xyz.block.ftl.console.v1.Module.typealiases:type_name -> xyz.block.ftl.console.v1.TypeAlias - 10, // 24: xyz.block.ftl.console.v1.Topology.levels:type_name -> xyz.block.ftl.console.v1.TopologyGroup - 9, // 25: xyz.block.ftl.console.v1.GetModulesResponse.modules:type_name -> xyz.block.ftl.console.v1.Module - 11, // 26: xyz.block.ftl.console.v1.GetModulesResponse.topology:type_name -> xyz.block.ftl.console.v1.Topology - 9, // 27: xyz.block.ftl.console.v1.StreamModulesResponse.modules:type_name -> xyz.block.ftl.console.v1.Module - 11, // 28: xyz.block.ftl.console.v1.StreamModulesResponse.topology:type_name -> xyz.block.ftl.console.v1.Topology - 37, // 29: xyz.block.ftl.console.v1.GetEventsRequest.filters:type_name -> xyz.block.ftl.console.v1.GetEventsRequest.Filter - 0, // 30: xyz.block.ftl.console.v1.GetEventsRequest.order:type_name -> xyz.block.ftl.console.v1.GetEventsRequest.Order - 47, // 31: xyz.block.ftl.console.v1.GetEventsResponse.events:type_name -> xyz.block.ftl.timeline.v1.Event - 48, // 32: xyz.block.ftl.console.v1.StreamEventsRequest.update_interval:type_name -> google.protobuf.Duration - 16, // 33: xyz.block.ftl.console.v1.StreamEventsRequest.query:type_name -> xyz.block.ftl.console.v1.GetEventsRequest - 47, // 34: xyz.block.ftl.console.v1.StreamEventsResponse.events:type_name -> xyz.block.ftl.timeline.v1.Event - 49, // 35: xyz.block.ftl.console.v1.GetEventsRequest.LogLevelFilter.log_level:type_name -> xyz.block.ftl.timeline.v1.LogLevel - 50, // 36: xyz.block.ftl.console.v1.GetEventsRequest.EventTypeFilter.event_types:type_name -> xyz.block.ftl.timeline.v1.EventType - 51, // 37: xyz.block.ftl.console.v1.GetEventsRequest.TimeFilter.older_than:type_name -> google.protobuf.Timestamp - 51, // 38: xyz.block.ftl.console.v1.GetEventsRequest.TimeFilter.newer_than:type_name -> google.protobuf.Timestamp - 28, // 39: xyz.block.ftl.console.v1.GetEventsRequest.Filter.limit:type_name -> xyz.block.ftl.console.v1.GetEventsRequest.LimitFilter - 29, // 40: xyz.block.ftl.console.v1.GetEventsRequest.Filter.log_level:type_name -> xyz.block.ftl.console.v1.GetEventsRequest.LogLevelFilter - 30, // 41: xyz.block.ftl.console.v1.GetEventsRequest.Filter.deployments:type_name -> xyz.block.ftl.console.v1.GetEventsRequest.DeploymentFilter - 31, // 42: xyz.block.ftl.console.v1.GetEventsRequest.Filter.requests:type_name -> xyz.block.ftl.console.v1.GetEventsRequest.RequestFilter - 32, // 43: xyz.block.ftl.console.v1.GetEventsRequest.Filter.event_types:type_name -> xyz.block.ftl.console.v1.GetEventsRequest.EventTypeFilter - 33, // 44: xyz.block.ftl.console.v1.GetEventsRequest.Filter.time:type_name -> xyz.block.ftl.console.v1.GetEventsRequest.TimeFilter - 34, // 45: xyz.block.ftl.console.v1.GetEventsRequest.Filter.id:type_name -> xyz.block.ftl.console.v1.GetEventsRequest.IDFilter - 35, // 46: xyz.block.ftl.console.v1.GetEventsRequest.Filter.call:type_name -> xyz.block.ftl.console.v1.GetEventsRequest.CallFilter - 36, // 47: xyz.block.ftl.console.v1.GetEventsRequest.Filter.module:type_name -> xyz.block.ftl.console.v1.GetEventsRequest.ModuleFilter - 52, // 48: xyz.block.ftl.console.v1.ConsoleService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 12, // 49: xyz.block.ftl.console.v1.ConsoleService.GetModules:input_type -> xyz.block.ftl.console.v1.GetModulesRequest - 14, // 50: xyz.block.ftl.console.v1.ConsoleService.StreamModules:input_type -> xyz.block.ftl.console.v1.StreamModulesRequest - 26, // 51: xyz.block.ftl.console.v1.ConsoleService.StreamEvents:input_type -> xyz.block.ftl.console.v1.StreamEventsRequest - 16, // 52: xyz.block.ftl.console.v1.ConsoleService.GetEvents:input_type -> xyz.block.ftl.console.v1.GetEventsRequest - 18, // 53: xyz.block.ftl.console.v1.ConsoleService.GetConfig:input_type -> xyz.block.ftl.console.v1.GetConfigRequest - 20, // 54: xyz.block.ftl.console.v1.ConsoleService.SetConfig:input_type -> xyz.block.ftl.console.v1.SetConfigRequest - 22, // 55: xyz.block.ftl.console.v1.ConsoleService.GetSecret:input_type -> xyz.block.ftl.console.v1.GetSecretRequest - 24, // 56: xyz.block.ftl.console.v1.ConsoleService.SetSecret:input_type -> xyz.block.ftl.console.v1.SetSecretRequest - 53, // 57: xyz.block.ftl.console.v1.ConsoleService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 13, // 58: xyz.block.ftl.console.v1.ConsoleService.GetModules:output_type -> xyz.block.ftl.console.v1.GetModulesResponse - 15, // 59: xyz.block.ftl.console.v1.ConsoleService.StreamModules:output_type -> xyz.block.ftl.console.v1.StreamModulesResponse - 27, // 60: xyz.block.ftl.console.v1.ConsoleService.StreamEvents:output_type -> xyz.block.ftl.console.v1.StreamEventsResponse - 17, // 61: xyz.block.ftl.console.v1.ConsoleService.GetEvents:output_type -> xyz.block.ftl.console.v1.GetEventsResponse - 19, // 62: xyz.block.ftl.console.v1.ConsoleService.GetConfig:output_type -> xyz.block.ftl.console.v1.GetConfigResponse - 21, // 63: xyz.block.ftl.console.v1.ConsoleService.SetConfig:output_type -> xyz.block.ftl.console.v1.SetConfigResponse - 23, // 64: xyz.block.ftl.console.v1.ConsoleService.GetSecret:output_type -> xyz.block.ftl.console.v1.GetSecretResponse - 25, // 65: xyz.block.ftl.console.v1.ConsoleService.SetSecret:output_type -> xyz.block.ftl.console.v1.SetSecretResponse - 57, // [57:66] is the sub-list for method output_type - 48, // [48:57] is the sub-list for method input_type - 48, // [48:48] is the sub-list for extension type_name - 48, // [48:48] is the sub-list for extension extendee - 0, // [0:48] is the sub-list for field type_name -} - -func init() { file_xyz_block_ftl_console_v1_console_proto_init() } -func file_xyz_block_ftl_console_v1_console_proto_init() { - if File_xyz_block_ftl_console_v1_console_proto != nil { - return - } - file_xyz_block_ftl_console_v1_console_proto_msgTypes[16].OneofWrappers = []any{} + file_xyz_block_ftl_console_v1_console_proto_msgTypes[15].OneofWrappers = []any{} file_xyz_block_ftl_console_v1_console_proto_msgTypes[17].OneofWrappers = []any{} file_xyz_block_ftl_console_v1_console_proto_msgTypes[19].OneofWrappers = []any{} file_xyz_block_ftl_console_v1_console_proto_msgTypes[21].OneofWrappers = []any{} - file_xyz_block_ftl_console_v1_console_proto_msgTypes[23].OneofWrappers = []any{} - file_xyz_block_ftl_console_v1_console_proto_msgTypes[25].OneofWrappers = []any{} - file_xyz_block_ftl_console_v1_console_proto_msgTypes[32].OneofWrappers = []any{} - file_xyz_block_ftl_console_v1_console_proto_msgTypes[33].OneofWrappers = []any{} - file_xyz_block_ftl_console_v1_console_proto_msgTypes[34].OneofWrappers = []any{} - file_xyz_block_ftl_console_v1_console_proto_msgTypes[35].OneofWrappers = []any{} - file_xyz_block_ftl_console_v1_console_proto_msgTypes[36].OneofWrappers = []any{ - (*GetEventsRequest_Filter_Limit)(nil), - (*GetEventsRequest_Filter_LogLevel)(nil), - (*GetEventsRequest_Filter_Deployments)(nil), - (*GetEventsRequest_Filter_Requests)(nil), - (*GetEventsRequest_Filter_EventTypes)(nil), - (*GetEventsRequest_Filter_Time)(nil), - (*GetEventsRequest_Filter_Id)(nil), - (*GetEventsRequest_Filter_Call)(nil), - (*GetEventsRequest_Filter_Module)(nil), - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xyz_block_ftl_console_v1_console_proto_rawDesc, - NumEnums: 1, - NumMessages: 37, + NumEnums: 0, + NumMessages: 23, NumExtensions: 0, NumServices: 1, }, GoTypes: file_xyz_block_ftl_console_v1_console_proto_goTypes, DependencyIndexes: file_xyz_block_ftl_console_v1_console_proto_depIdxs, - EnumInfos: file_xyz_block_ftl_console_v1_console_proto_enumTypes, MessageInfos: file_xyz_block_ftl_console_v1_console_proto_msgTypes, }.Build() File_xyz_block_ftl_console_v1_console_proto = out.File diff --git a/backend/protos/xyz/block/ftl/console/v1/console.proto b/backend/protos/xyz/block/ftl/console/v1/console.proto index 05e6f032bc..4178670754 100644 --- a/backend/protos/xyz/block/ftl/console/v1/console.proto +++ b/backend/protos/xyz/block/ftl/console/v1/console.proto @@ -2,10 +2,7 @@ syntax = "proto3"; package xyz.block.ftl.console.v1; -import "google/protobuf/duration.proto"; -import "google/protobuf/timestamp.proto"; import "xyz/block/ftl/schema/v1/schema.proto"; -import "xyz/block/ftl/timeline/v1/event.proto"; import "xyz/block/ftl/v1/ftl.proto"; option go_package = "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/console/v1;pbconsole"; @@ -89,86 +86,6 @@ message StreamModulesResponse { Topology topology = 2; } -// Query for events. -message GetEventsRequest { - // Limit the number of events returned. - message LimitFilter { - int32 limit = 1; - } - // Filters events by log level. - message LogLevelFilter { - timeline.v1.LogLevel log_level = 1; - } - // Filters events by deployment key. - message DeploymentFilter { - repeated string deployments = 1; - } - // Filters events by request key. - message RequestFilter { - repeated string requests = 1; - } - // Filters events by event type. - message EventTypeFilter { - repeated timeline.v1.EventType event_types = 1; - } - // Filters events by time. - // - // Either end of the time range can be omitted to indicate no bound. - message TimeFilter { - optional google.protobuf.Timestamp older_than = 1; - optional google.protobuf.Timestamp newer_than = 2; - } - // Filters events by ID. - // - // Either end of the ID range can be omitted to indicate no bound. - message IDFilter { - optional int64 lower_than = 1; - optional int64 higher_than = 2; - } - // Filters events by call. - message CallFilter { - string dest_module = 1; - optional string dest_verb = 2; - optional string source_module = 3; - } - message ModuleFilter { - string module = 1; - optional string verb = 2; - } - - enum Order { - ORDER_UNSPECIFIED = 0; - ORDER_ASC = 1; - ORDER_DESC = 2; - } - - message Filter { - // These map 1:1 with filters in backend/controller/internal/dal/events.go - oneof filter { - LimitFilter limit = 1; - LogLevelFilter log_level = 2; - DeploymentFilter deployments = 3; - RequestFilter requests = 4; - EventTypeFilter event_types = 5; - TimeFilter time = 6; - IDFilter id = 7; - CallFilter call = 8; - ModuleFilter module = 9; - } - } - - repeated Filter filters = 1; - int32 limit = 2; - Order order = 3; -} - -message GetEventsResponse { - repeated timeline.v1.Event events = 1; - - // For pagination, this cursor is where we should start our next query - optional int64 cursor = 2; -} - message GetConfigRequest { string name = 1; optional string module = 2; @@ -207,15 +124,6 @@ message SetSecretResponse { bytes value = 1; } -message StreamEventsRequest { - optional google.protobuf.Duration update_interval = 1; - GetEventsRequest query = 2; -} - -message StreamEventsResponse { - repeated timeline.v1.Event events = 1; -} - service ConsoleService { // Ping service for readiness. rpc Ping(ftl.v1.PingRequest) returns (ftl.v1.PingResponse) { @@ -224,8 +132,6 @@ service ConsoleService { rpc GetModules(GetModulesRequest) returns (GetModulesResponse); rpc StreamModules(StreamModulesRequest) returns (stream StreamModulesResponse); - rpc StreamEvents(StreamEventsRequest) returns (stream StreamEventsResponse); - rpc GetEvents(GetEventsRequest) returns (GetEventsResponse); rpc GetConfig(GetConfigRequest) returns (GetConfigResponse); rpc SetConfig(SetConfigRequest) returns (SetConfigResponse); diff --git a/backend/protos/xyz/block/ftl/console/v1/pbconsoleconnect/console.connect.go b/backend/protos/xyz/block/ftl/console/v1/pbconsoleconnect/console.connect.go index 61b571e3f2..5b26648f8e 100644 --- a/backend/protos/xyz/block/ftl/console/v1/pbconsoleconnect/console.connect.go +++ b/backend/protos/xyz/block/ftl/console/v1/pbconsoleconnect/console.connect.go @@ -42,12 +42,6 @@ const ( // ConsoleServiceStreamModulesProcedure is the fully-qualified name of the ConsoleService's // StreamModules RPC. ConsoleServiceStreamModulesProcedure = "/xyz.block.ftl.console.v1.ConsoleService/StreamModules" - // ConsoleServiceStreamEventsProcedure is the fully-qualified name of the ConsoleService's - // StreamEvents RPC. - ConsoleServiceStreamEventsProcedure = "/xyz.block.ftl.console.v1.ConsoleService/StreamEvents" - // ConsoleServiceGetEventsProcedure is the fully-qualified name of the ConsoleService's GetEvents - // RPC. - ConsoleServiceGetEventsProcedure = "/xyz.block.ftl.console.v1.ConsoleService/GetEvents" // ConsoleServiceGetConfigProcedure is the fully-qualified name of the ConsoleService's GetConfig // RPC. ConsoleServiceGetConfigProcedure = "/xyz.block.ftl.console.v1.ConsoleService/GetConfig" @@ -68,8 +62,6 @@ type ConsoleServiceClient interface { Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) GetModules(context.Context, *connect.Request[v11.GetModulesRequest]) (*connect.Response[v11.GetModulesResponse], error) StreamModules(context.Context, *connect.Request[v11.StreamModulesRequest]) (*connect.ServerStreamForClient[v11.StreamModulesResponse], error) - StreamEvents(context.Context, *connect.Request[v11.StreamEventsRequest]) (*connect.ServerStreamForClient[v11.StreamEventsResponse], error) - GetEvents(context.Context, *connect.Request[v11.GetEventsRequest]) (*connect.Response[v11.GetEventsResponse], error) GetConfig(context.Context, *connect.Request[v11.GetConfigRequest]) (*connect.Response[v11.GetConfigResponse], error) SetConfig(context.Context, *connect.Request[v11.SetConfigRequest]) (*connect.Response[v11.SetConfigResponse], error) GetSecret(context.Context, *connect.Request[v11.GetSecretRequest]) (*connect.Response[v11.GetSecretResponse], error) @@ -102,16 +94,6 @@ func NewConsoleServiceClient(httpClient connect.HTTPClient, baseURL string, opts baseURL+ConsoleServiceStreamModulesProcedure, opts..., ), - streamEvents: connect.NewClient[v11.StreamEventsRequest, v11.StreamEventsResponse]( - httpClient, - baseURL+ConsoleServiceStreamEventsProcedure, - opts..., - ), - getEvents: connect.NewClient[v11.GetEventsRequest, v11.GetEventsResponse]( - httpClient, - baseURL+ConsoleServiceGetEventsProcedure, - opts..., - ), getConfig: connect.NewClient[v11.GetConfigRequest, v11.GetConfigResponse]( httpClient, baseURL+ConsoleServiceGetConfigProcedure, @@ -140,8 +122,6 @@ type consoleServiceClient struct { ping *connect.Client[v1.PingRequest, v1.PingResponse] getModules *connect.Client[v11.GetModulesRequest, v11.GetModulesResponse] streamModules *connect.Client[v11.StreamModulesRequest, v11.StreamModulesResponse] - streamEvents *connect.Client[v11.StreamEventsRequest, v11.StreamEventsResponse] - getEvents *connect.Client[v11.GetEventsRequest, v11.GetEventsResponse] getConfig *connect.Client[v11.GetConfigRequest, v11.GetConfigResponse] setConfig *connect.Client[v11.SetConfigRequest, v11.SetConfigResponse] getSecret *connect.Client[v11.GetSecretRequest, v11.GetSecretResponse] @@ -163,16 +143,6 @@ func (c *consoleServiceClient) StreamModules(ctx context.Context, req *connect.R return c.streamModules.CallServerStream(ctx, req) } -// StreamEvents calls xyz.block.ftl.console.v1.ConsoleService.StreamEvents. -func (c *consoleServiceClient) StreamEvents(ctx context.Context, req *connect.Request[v11.StreamEventsRequest]) (*connect.ServerStreamForClient[v11.StreamEventsResponse], error) { - return c.streamEvents.CallServerStream(ctx, req) -} - -// GetEvents calls xyz.block.ftl.console.v1.ConsoleService.GetEvents. -func (c *consoleServiceClient) GetEvents(ctx context.Context, req *connect.Request[v11.GetEventsRequest]) (*connect.Response[v11.GetEventsResponse], error) { - return c.getEvents.CallUnary(ctx, req) -} - // GetConfig calls xyz.block.ftl.console.v1.ConsoleService.GetConfig. func (c *consoleServiceClient) GetConfig(ctx context.Context, req *connect.Request[v11.GetConfigRequest]) (*connect.Response[v11.GetConfigResponse], error) { return c.getConfig.CallUnary(ctx, req) @@ -200,8 +170,6 @@ type ConsoleServiceHandler interface { Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) GetModules(context.Context, *connect.Request[v11.GetModulesRequest]) (*connect.Response[v11.GetModulesResponse], error) StreamModules(context.Context, *connect.Request[v11.StreamModulesRequest], *connect.ServerStream[v11.StreamModulesResponse]) error - StreamEvents(context.Context, *connect.Request[v11.StreamEventsRequest], *connect.ServerStream[v11.StreamEventsResponse]) error - GetEvents(context.Context, *connect.Request[v11.GetEventsRequest]) (*connect.Response[v11.GetEventsResponse], error) GetConfig(context.Context, *connect.Request[v11.GetConfigRequest]) (*connect.Response[v11.GetConfigResponse], error) SetConfig(context.Context, *connect.Request[v11.SetConfigRequest]) (*connect.Response[v11.SetConfigResponse], error) GetSecret(context.Context, *connect.Request[v11.GetSecretRequest]) (*connect.Response[v11.GetSecretResponse], error) @@ -230,16 +198,6 @@ func NewConsoleServiceHandler(svc ConsoleServiceHandler, opts ...connect.Handler svc.StreamModules, opts..., ) - consoleServiceStreamEventsHandler := connect.NewServerStreamHandler( - ConsoleServiceStreamEventsProcedure, - svc.StreamEvents, - opts..., - ) - consoleServiceGetEventsHandler := connect.NewUnaryHandler( - ConsoleServiceGetEventsProcedure, - svc.GetEvents, - opts..., - ) consoleServiceGetConfigHandler := connect.NewUnaryHandler( ConsoleServiceGetConfigProcedure, svc.GetConfig, @@ -268,10 +226,6 @@ func NewConsoleServiceHandler(svc ConsoleServiceHandler, opts ...connect.Handler consoleServiceGetModulesHandler.ServeHTTP(w, r) case ConsoleServiceStreamModulesProcedure: consoleServiceStreamModulesHandler.ServeHTTP(w, r) - case ConsoleServiceStreamEventsProcedure: - consoleServiceStreamEventsHandler.ServeHTTP(w, r) - case ConsoleServiceGetEventsProcedure: - consoleServiceGetEventsHandler.ServeHTTP(w, r) case ConsoleServiceGetConfigProcedure: consoleServiceGetConfigHandler.ServeHTTP(w, r) case ConsoleServiceSetConfigProcedure: @@ -301,14 +255,6 @@ func (UnimplementedConsoleServiceHandler) StreamModules(context.Context, *connec return connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.console.v1.ConsoleService.StreamModules is not implemented")) } -func (UnimplementedConsoleServiceHandler) StreamEvents(context.Context, *connect.Request[v11.StreamEventsRequest], *connect.ServerStream[v11.StreamEventsResponse]) error { - return connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.console.v1.ConsoleService.StreamEvents is not implemented")) -} - -func (UnimplementedConsoleServiceHandler) GetEvents(context.Context, *connect.Request[v11.GetEventsRequest]) (*connect.Response[v11.GetEventsResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.console.v1.ConsoleService.GetEvents is not implemented")) -} - func (UnimplementedConsoleServiceHandler) GetConfig(context.Context, *connect.Request[v11.GetConfigRequest]) (*connect.Response[v11.GetConfigResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.console.v1.ConsoleService.GetConfig is not implemented")) } diff --git a/backend/protos/xyz/block/ftl/timeline/v1/timeline.pb.go b/backend/protos/xyz/block/ftl/timeline/v1/timeline.pb.go index b4532f1282..c8bfcf63c2 100644 --- a/backend/protos/xyz/block/ftl/timeline/v1/timeline.pb.go +++ b/backend/protos/xyz/block/ftl/timeline/v1/timeline.pb.go @@ -10,6 +10,7 @@ import ( v1 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" @@ -138,6 +139,8 @@ type GetTimelineResponse struct { unknownFields protoimpl.UnknownFields Events []*Event `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` + // For pagination, this cursor is where we should start our next query + Cursor *int64 `protobuf:"varint,2,opt,name=cursor,proto3,oneof" json:"cursor,omitempty"` } func (x *GetTimelineResponse) Reset() { @@ -177,6 +180,111 @@ func (x *GetTimelineResponse) GetEvents() []*Event { return nil } +func (x *GetTimelineResponse) GetCursor() int64 { + if x != nil && x.Cursor != nil { + return *x.Cursor + } + return 0 +} + +type StreamTimelineRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UpdateInterval *durationpb.Duration `protobuf:"bytes,1,opt,name=update_interval,json=updateInterval,proto3,oneof" json:"update_interval,omitempty"` + Query *GetTimelineRequest `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` +} + +func (x *StreamTimelineRequest) Reset() { + *x = StreamTimelineRequest{} + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StreamTimelineRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamTimelineRequest) ProtoMessage() {} + +func (x *StreamTimelineRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamTimelineRequest.ProtoReflect.Descriptor instead. +func (*StreamTimelineRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{2} +} + +func (x *StreamTimelineRequest) GetUpdateInterval() *durationpb.Duration { + if x != nil { + return x.UpdateInterval + } + return nil +} + +func (x *StreamTimelineRequest) GetQuery() *GetTimelineRequest { + if x != nil { + return x.Query + } + return nil +} + +type StreamTimelineResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Events []*Event `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` +} + +func (x *StreamTimelineResponse) Reset() { + *x = StreamTimelineResponse{} + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StreamTimelineResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamTimelineResponse) ProtoMessage() {} + +func (x *StreamTimelineResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamTimelineResponse.ProtoReflect.Descriptor instead. +func (*StreamTimelineResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{3} +} + +func (x *StreamTimelineResponse) GetEvents() []*Event { + if x != nil { + return x.Events + } + return nil +} + type CreateEventRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -198,7 +306,7 @@ type CreateEventRequest struct { func (x *CreateEventRequest) Reset() { *x = CreateEventRequest{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[2] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -210,7 +318,7 @@ func (x *CreateEventRequest) String() string { func (*CreateEventRequest) ProtoMessage() {} func (x *CreateEventRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[2] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -223,7 +331,7 @@ func (x *CreateEventRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateEventRequest.ProtoReflect.Descriptor instead. func (*CreateEventRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{2} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{4} } func (m *CreateEventRequest) GetEntry() isCreateEventRequest_Entry { @@ -362,7 +470,7 @@ type CreateEventResponse struct { func (x *CreateEventResponse) Reset() { *x = CreateEventResponse{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[3] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -374,7 +482,7 @@ func (x *CreateEventResponse) String() string { func (*CreateEventResponse) ProtoMessage() {} func (x *CreateEventResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[3] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -387,7 +495,7 @@ func (x *CreateEventResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateEventResponse.ProtoReflect.Descriptor instead. func (*CreateEventResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{3} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{5} } type DeleteOldEventsRequest struct { @@ -401,7 +509,7 @@ type DeleteOldEventsRequest struct { func (x *DeleteOldEventsRequest) Reset() { *x = DeleteOldEventsRequest{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[4] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -413,7 +521,7 @@ func (x *DeleteOldEventsRequest) String() string { func (*DeleteOldEventsRequest) ProtoMessage() {} func (x *DeleteOldEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[4] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -426,7 +534,7 @@ func (x *DeleteOldEventsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteOldEventsRequest.ProtoReflect.Descriptor instead. func (*DeleteOldEventsRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{4} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{6} } func (x *DeleteOldEventsRequest) GetEventType() EventType { @@ -453,7 +561,7 @@ type DeleteOldEventsResponse struct { func (x *DeleteOldEventsResponse) Reset() { *x = DeleteOldEventsResponse{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[5] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -465,7 +573,7 @@ func (x *DeleteOldEventsResponse) String() string { func (*DeleteOldEventsResponse) ProtoMessage() {} func (x *DeleteOldEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[5] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -478,7 +586,7 @@ func (x *DeleteOldEventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteOldEventsResponse.ProtoReflect.Descriptor instead. func (*DeleteOldEventsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{5} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{7} } func (x *DeleteOldEventsResponse) GetDeletedCount() int64 { @@ -488,52 +596,6 @@ func (x *DeleteOldEventsResponse) GetDeletedCount() int64 { return 0 } -// Limit the number of events returned. -type GetTimelineRequest_LimitFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Limit int32 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"` -} - -func (x *GetTimelineRequest_LimitFilter) Reset() { - *x = GetTimelineRequest_LimitFilter{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *GetTimelineRequest_LimitFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetTimelineRequest_LimitFilter) ProtoMessage() {} - -func (x *GetTimelineRequest_LimitFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[6] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetTimelineRequest_LimitFilter.ProtoReflect.Descriptor instead. -func (*GetTimelineRequest_LimitFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *GetTimelineRequest_LimitFilter) GetLimit() int32 { - if x != nil { - return x.Limit - } - return 0 -} - // Filters events by log level. type GetTimelineRequest_LogLevelFilter struct { state protoimpl.MessageState @@ -545,7 +607,7 @@ type GetTimelineRequest_LogLevelFilter struct { func (x *GetTimelineRequest_LogLevelFilter) Reset() { *x = GetTimelineRequest_LogLevelFilter{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[7] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -557,7 +619,7 @@ func (x *GetTimelineRequest_LogLevelFilter) String() string { func (*GetTimelineRequest_LogLevelFilter) ProtoMessage() {} func (x *GetTimelineRequest_LogLevelFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[7] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -570,7 +632,7 @@ func (x *GetTimelineRequest_LogLevelFilter) ProtoReflect() protoreflect.Message // Deprecated: Use GetTimelineRequest_LogLevelFilter.ProtoReflect.Descriptor instead. func (*GetTimelineRequest_LogLevelFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 1} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 0} } func (x *GetTimelineRequest_LogLevelFilter) GetLogLevel() LogLevel { @@ -591,7 +653,7 @@ type GetTimelineRequest_DeploymentFilter struct { func (x *GetTimelineRequest_DeploymentFilter) Reset() { *x = GetTimelineRequest_DeploymentFilter{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[8] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -603,7 +665,7 @@ func (x *GetTimelineRequest_DeploymentFilter) String() string { func (*GetTimelineRequest_DeploymentFilter) ProtoMessage() {} func (x *GetTimelineRequest_DeploymentFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[8] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -616,7 +678,7 @@ func (x *GetTimelineRequest_DeploymentFilter) ProtoReflect() protoreflect.Messag // Deprecated: Use GetTimelineRequest_DeploymentFilter.ProtoReflect.Descriptor instead. func (*GetTimelineRequest_DeploymentFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 2} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 1} } func (x *GetTimelineRequest_DeploymentFilter) GetDeployments() []string { @@ -637,7 +699,7 @@ type GetTimelineRequest_RequestFilter struct { func (x *GetTimelineRequest_RequestFilter) Reset() { *x = GetTimelineRequest_RequestFilter{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[9] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -649,7 +711,7 @@ func (x *GetTimelineRequest_RequestFilter) String() string { func (*GetTimelineRequest_RequestFilter) ProtoMessage() {} func (x *GetTimelineRequest_RequestFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[9] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -662,7 +724,7 @@ func (x *GetTimelineRequest_RequestFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTimelineRequest_RequestFilter.ProtoReflect.Descriptor instead. func (*GetTimelineRequest_RequestFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 3} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 2} } func (x *GetTimelineRequest_RequestFilter) GetRequests() []string { @@ -683,7 +745,7 @@ type GetTimelineRequest_EventTypeFilter struct { func (x *GetTimelineRequest_EventTypeFilter) Reset() { *x = GetTimelineRequest_EventTypeFilter{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[10] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -695,7 +757,7 @@ func (x *GetTimelineRequest_EventTypeFilter) String() string { func (*GetTimelineRequest_EventTypeFilter) ProtoMessage() {} func (x *GetTimelineRequest_EventTypeFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[10] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -708,7 +770,7 @@ func (x *GetTimelineRequest_EventTypeFilter) ProtoReflect() protoreflect.Message // Deprecated: Use GetTimelineRequest_EventTypeFilter.ProtoReflect.Descriptor instead. func (*GetTimelineRequest_EventTypeFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 4} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 3} } func (x *GetTimelineRequest_EventTypeFilter) GetEventTypes() []EventType { @@ -732,7 +794,7 @@ type GetTimelineRequest_TimeFilter struct { func (x *GetTimelineRequest_TimeFilter) Reset() { *x = GetTimelineRequest_TimeFilter{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[11] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -744,7 +806,7 @@ func (x *GetTimelineRequest_TimeFilter) String() string { func (*GetTimelineRequest_TimeFilter) ProtoMessage() {} func (x *GetTimelineRequest_TimeFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[11] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -757,7 +819,7 @@ func (x *GetTimelineRequest_TimeFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTimelineRequest_TimeFilter.ProtoReflect.Descriptor instead. func (*GetTimelineRequest_TimeFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 5} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 4} } func (x *GetTimelineRequest_TimeFilter) GetOlderThan() *timestamppb.Timestamp { @@ -788,7 +850,7 @@ type GetTimelineRequest_IDFilter struct { func (x *GetTimelineRequest_IDFilter) Reset() { *x = GetTimelineRequest_IDFilter{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[12] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -800,7 +862,7 @@ func (x *GetTimelineRequest_IDFilter) String() string { func (*GetTimelineRequest_IDFilter) ProtoMessage() {} func (x *GetTimelineRequest_IDFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[12] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -813,7 +875,7 @@ func (x *GetTimelineRequest_IDFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTimelineRequest_IDFilter.ProtoReflect.Descriptor instead. func (*GetTimelineRequest_IDFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 6} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 5} } func (x *GetTimelineRequest_IDFilter) GetLowerThan() int64 { @@ -843,7 +905,7 @@ type GetTimelineRequest_CallFilter struct { func (x *GetTimelineRequest_CallFilter) Reset() { *x = GetTimelineRequest_CallFilter{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[13] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -855,7 +917,7 @@ func (x *GetTimelineRequest_CallFilter) String() string { func (*GetTimelineRequest_CallFilter) ProtoMessage() {} func (x *GetTimelineRequest_CallFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[13] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -868,7 +930,7 @@ func (x *GetTimelineRequest_CallFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTimelineRequest_CallFilter.ProtoReflect.Descriptor instead. func (*GetTimelineRequest_CallFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 7} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 6} } func (x *GetTimelineRequest_CallFilter) GetDestModule() string { @@ -903,7 +965,7 @@ type GetTimelineRequest_ModuleFilter struct { func (x *GetTimelineRequest_ModuleFilter) Reset() { *x = GetTimelineRequest_ModuleFilter{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[14] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -915,7 +977,7 @@ func (x *GetTimelineRequest_ModuleFilter) String() string { func (*GetTimelineRequest_ModuleFilter) ProtoMessage() {} func (x *GetTimelineRequest_ModuleFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[14] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -928,7 +990,7 @@ func (x *GetTimelineRequest_ModuleFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTimelineRequest_ModuleFilter.ProtoReflect.Descriptor instead. func (*GetTimelineRequest_ModuleFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 8} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 7} } func (x *GetTimelineRequest_ModuleFilter) GetModule() string { @@ -954,7 +1016,6 @@ type GetTimelineRequest_Filter struct { // // Types that are assignable to Filter: // - // *GetTimelineRequest_Filter_Limit // *GetTimelineRequest_Filter_LogLevel // *GetTimelineRequest_Filter_Deployments // *GetTimelineRequest_Filter_Requests @@ -968,7 +1029,7 @@ type GetTimelineRequest_Filter struct { func (x *GetTimelineRequest_Filter) Reset() { *x = GetTimelineRequest_Filter{} - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[15] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -980,7 +1041,7 @@ func (x *GetTimelineRequest_Filter) String() string { func (*GetTimelineRequest_Filter) ProtoMessage() {} func (x *GetTimelineRequest_Filter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[15] + mi := &file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -993,7 +1054,7 @@ func (x *GetTimelineRequest_Filter) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTimelineRequest_Filter.ProtoReflect.Descriptor instead. func (*GetTimelineRequest_Filter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 9} + return file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP(), []int{0, 8} } func (m *GetTimelineRequest_Filter) GetFilter() isGetTimelineRequest_Filter_Filter { @@ -1003,13 +1064,6 @@ func (m *GetTimelineRequest_Filter) GetFilter() isGetTimelineRequest_Filter_Filt return nil } -func (x *GetTimelineRequest_Filter) GetLimit() *GetTimelineRequest_LimitFilter { - if x, ok := x.GetFilter().(*GetTimelineRequest_Filter_Limit); ok { - return x.Limit - } - return nil -} - func (x *GetTimelineRequest_Filter) GetLogLevel() *GetTimelineRequest_LogLevelFilter { if x, ok := x.GetFilter().(*GetTimelineRequest_Filter_LogLevel); ok { return x.LogLevel @@ -1070,44 +1124,38 @@ type isGetTimelineRequest_Filter_Filter interface { isGetTimelineRequest_Filter_Filter() } -type GetTimelineRequest_Filter_Limit struct { - Limit *GetTimelineRequest_LimitFilter `protobuf:"bytes,1,opt,name=limit,proto3,oneof"` -} - type GetTimelineRequest_Filter_LogLevel struct { - LogLevel *GetTimelineRequest_LogLevelFilter `protobuf:"bytes,2,opt,name=log_level,json=logLevel,proto3,oneof"` + LogLevel *GetTimelineRequest_LogLevelFilter `protobuf:"bytes,1,opt,name=log_level,json=logLevel,proto3,oneof"` } type GetTimelineRequest_Filter_Deployments struct { - Deployments *GetTimelineRequest_DeploymentFilter `protobuf:"bytes,3,opt,name=deployments,proto3,oneof"` + Deployments *GetTimelineRequest_DeploymentFilter `protobuf:"bytes,2,opt,name=deployments,proto3,oneof"` } type GetTimelineRequest_Filter_Requests struct { - Requests *GetTimelineRequest_RequestFilter `protobuf:"bytes,4,opt,name=requests,proto3,oneof"` + Requests *GetTimelineRequest_RequestFilter `protobuf:"bytes,3,opt,name=requests,proto3,oneof"` } type GetTimelineRequest_Filter_EventTypes struct { - EventTypes *GetTimelineRequest_EventTypeFilter `protobuf:"bytes,5,opt,name=event_types,json=eventTypes,proto3,oneof"` + EventTypes *GetTimelineRequest_EventTypeFilter `protobuf:"bytes,4,opt,name=event_types,json=eventTypes,proto3,oneof"` } type GetTimelineRequest_Filter_Time struct { - Time *GetTimelineRequest_TimeFilter `protobuf:"bytes,6,opt,name=time,proto3,oneof"` + Time *GetTimelineRequest_TimeFilter `protobuf:"bytes,5,opt,name=time,proto3,oneof"` } type GetTimelineRequest_Filter_Id struct { - Id *GetTimelineRequest_IDFilter `protobuf:"bytes,7,opt,name=id,proto3,oneof"` + Id *GetTimelineRequest_IDFilter `protobuf:"bytes,6,opt,name=id,proto3,oneof"` } type GetTimelineRequest_Filter_Call struct { - Call *GetTimelineRequest_CallFilter `protobuf:"bytes,8,opt,name=call,proto3,oneof"` + Call *GetTimelineRequest_CallFilter `protobuf:"bytes,7,opt,name=call,proto3,oneof"` } type GetTimelineRequest_Filter_Module struct { - Module *GetTimelineRequest_ModuleFilter `protobuf:"bytes,9,opt,name=module,proto3,oneof"` + Module *GetTimelineRequest_ModuleFilter `protobuf:"bytes,8,opt,name=module,proto3,oneof"` } -func (*GetTimelineRequest_Filter_Limit) isGetTimelineRequest_Filter_Filter() {} - func (*GetTimelineRequest_Filter_LogLevel) isGetTimelineRequest_Filter_Filter() {} func (*GetTimelineRequest_Filter_Deployments) isGetTimelineRequest_Filter_Filter() {} @@ -1131,13 +1179,15 @@ var file_xyz_block_ftl_timeline_v1_timeline_proto_rawDesc = []byte{ 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x2f, - 0x66, 0x74, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe8, 0x0e, 0x0a, 0x12, 0x47, 0x65, + 0x66, 0x74, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf0, 0x0d, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, @@ -1150,113 +1200,125 @@ var file_xyz_block_ftl_timeline_v1_timeline_proto_rawDesc = []byte{ 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x1a, 0x23, 0x0a, 0x0b, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x1a, 0x52, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, - 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x1a, 0x34, 0x0a, 0x10, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x1a, 0x2b, 0x0a, 0x0d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x1a, 0x58, 0x0a, - 0x0f, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x45, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x1a, 0xaa, 0x01, 0x0a, 0x0a, 0x54, 0x69, 0x6d, 0x65, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x0a, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, - 0x74, 0x68, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x09, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x54, - 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, - 0x74, 0x68, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x01, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x54, - 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6f, 0x6c, 0x64, 0x65, 0x72, - 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, - 0x74, 0x68, 0x61, 0x6e, 0x1a, 0x73, 0x0a, 0x08, 0x49, 0x44, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x22, 0x0a, 0x0a, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x54, 0x68, 0x61, - 0x6e, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x5f, 0x74, - 0x68, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x0a, 0x68, 0x69, 0x67, - 0x68, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6c, - 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x68, 0x69, - 0x67, 0x68, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x1a, 0x99, 0x01, 0x0a, 0x0a, 0x43, 0x61, - 0x6c, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, - 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, - 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x64, 0x65, 0x73, - 0x74, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, - 0x64, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x62, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x01, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x76, - 0x65, 0x72, 0x62, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x1a, 0x48, 0x0a, 0x0c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x17, 0x0a, - 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x76, - 0x65, 0x72, 0x62, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x1a, - 0xa3, 0x06, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x5b, 0x0a, - 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, - 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x62, 0x0a, 0x0b, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, - 0x00, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x59, - 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, - 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x0b, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, - 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, - 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x04, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x72, 0x1a, 0x52, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x08, 0x6c, 0x6f, 0x67, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x1a, 0x34, 0x0a, 0x10, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x2b, 0x0a, 0x0d, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x1a, 0x58, 0x0a, 0x0f, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0b, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x1a, 0xaa, 0x01, 0x0a, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x12, 0x3e, 0x0a, 0x0a, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x48, 0x00, 0x52, 0x09, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, + 0x01, 0x12, 0x3e, 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x48, 0x01, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, + 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, + 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x1a, + 0x73, 0x0a, 0x08, 0x49, 0x44, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0a, 0x6c, + 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, + 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, + 0x24, 0x0a, 0x0b, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x0a, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x54, 0x68, + 0x61, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, + 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x5f, + 0x74, 0x68, 0x61, 0x6e, 0x1a, 0x99, 0x01, 0x0a, 0x0a, 0x43, 0x61, 0x6c, 0x6c, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x73, 0x74, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, + 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x73, 0x74, 0x56, + 0x65, 0x72, 0x62, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, + 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, + 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x42, 0x10, + 0x0a, 0x0e, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x1a, 0x48, 0x0a, 0x0c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x88, 0x01, + 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x1a, 0xd0, 0x05, 0x0a, 0x06, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x62, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x44, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, - 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4e, 0x0a, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x59, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x12, 0x60, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x74, + 0x69, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x36, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, + 0x44, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4e, 0x0a, + 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, + 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x54, 0x0a, + 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, + 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x3d, 0x0a, + 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, + 0x09, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x41, 0x53, 0x43, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, + 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x10, 0x02, 0x22, 0x77, 0x0a, 0x13, + 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, - 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x54, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x3d, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x15, - 0x0a, 0x11, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x41, - 0x53, 0x43, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x44, 0x45, - 0x53, 0x43, 0x10, 0x02, 0x22, 0x4f, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb9, 0x01, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x47, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x76, 0x61, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x43, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x42, 0x12, 0x0a, + 0x10, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, + 0x6c, 0x22, 0x52, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, @@ -1322,7 +1384,7 @@ var file_xyz_block_ftl_timeline_v1_timeline_proto_rawDesc = []byte{ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x6c, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0xbc, 0x03, 0x0a, 0x0f, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0xb5, 0x04, 0x0a, 0x0f, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, @@ -1335,28 +1397,35 @@ var file_xyz_block_ftl_timeline_v1_timeline_proto_rawDesc = []byte{ 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x6e, - 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x77, + 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x12, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6e, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7a, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4f, 0x6c, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x31, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x6c, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, - 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, - 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7a, - 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x6c, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x6c, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x6c, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x52, 0x50, 0x01, 0x5a, 0x4e, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x42, 0x44, 0x35, 0x34, - 0x35, 0x36, 0x36, 0x39, 0x37, 0x35, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, - 0x6e, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x2f, 0x76, 0x31, 0x3b, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x4f, 0x6c, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x42, 0x52, 0x50, 0x01, 0x5a, 0x4e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x42, 0x44, 0x35, 0x34, 0x35, 0x36, 0x36, 0x39, 0x37, 0x35, 0x2f, + 0x66, 0x74, 0x6c, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, + 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x74, 0x69, 0x6d, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1372,81 +1441,87 @@ func file_xyz_block_ftl_timeline_v1_timeline_proto_rawDescGZIP() []byte { } var file_xyz_block_ftl_timeline_v1_timeline_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes = make([]protoimpl.MessageInfo, 17) var file_xyz_block_ftl_timeline_v1_timeline_proto_goTypes = []any{ (GetTimelineRequest_Order)(0), // 0: xyz.block.ftl.timeline.v1.GetTimelineRequest.Order (*GetTimelineRequest)(nil), // 1: xyz.block.ftl.timeline.v1.GetTimelineRequest (*GetTimelineResponse)(nil), // 2: xyz.block.ftl.timeline.v1.GetTimelineResponse - (*CreateEventRequest)(nil), // 3: xyz.block.ftl.timeline.v1.CreateEventRequest - (*CreateEventResponse)(nil), // 4: xyz.block.ftl.timeline.v1.CreateEventResponse - (*DeleteOldEventsRequest)(nil), // 5: xyz.block.ftl.timeline.v1.DeleteOldEventsRequest - (*DeleteOldEventsResponse)(nil), // 6: xyz.block.ftl.timeline.v1.DeleteOldEventsResponse - (*GetTimelineRequest_LimitFilter)(nil), // 7: xyz.block.ftl.timeline.v1.GetTimelineRequest.LimitFilter - (*GetTimelineRequest_LogLevelFilter)(nil), // 8: xyz.block.ftl.timeline.v1.GetTimelineRequest.LogLevelFilter - (*GetTimelineRequest_DeploymentFilter)(nil), // 9: xyz.block.ftl.timeline.v1.GetTimelineRequest.DeploymentFilter - (*GetTimelineRequest_RequestFilter)(nil), // 10: xyz.block.ftl.timeline.v1.GetTimelineRequest.RequestFilter - (*GetTimelineRequest_EventTypeFilter)(nil), // 11: xyz.block.ftl.timeline.v1.GetTimelineRequest.EventTypeFilter - (*GetTimelineRequest_TimeFilter)(nil), // 12: xyz.block.ftl.timeline.v1.GetTimelineRequest.TimeFilter - (*GetTimelineRequest_IDFilter)(nil), // 13: xyz.block.ftl.timeline.v1.GetTimelineRequest.IDFilter - (*GetTimelineRequest_CallFilter)(nil), // 14: xyz.block.ftl.timeline.v1.GetTimelineRequest.CallFilter - (*GetTimelineRequest_ModuleFilter)(nil), // 15: xyz.block.ftl.timeline.v1.GetTimelineRequest.ModuleFilter - (*GetTimelineRequest_Filter)(nil), // 16: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter - (*Event)(nil), // 17: xyz.block.ftl.timeline.v1.Event - (*LogEvent)(nil), // 18: xyz.block.ftl.timeline.v1.LogEvent - (*CallEvent)(nil), // 19: xyz.block.ftl.timeline.v1.CallEvent - (*DeploymentCreatedEvent)(nil), // 20: xyz.block.ftl.timeline.v1.DeploymentCreatedEvent - (*DeploymentUpdatedEvent)(nil), // 21: xyz.block.ftl.timeline.v1.DeploymentUpdatedEvent - (*IngressEvent)(nil), // 22: xyz.block.ftl.timeline.v1.IngressEvent - (*CronScheduledEvent)(nil), // 23: xyz.block.ftl.timeline.v1.CronScheduledEvent - (*AsyncExecuteEvent)(nil), // 24: xyz.block.ftl.timeline.v1.AsyncExecuteEvent - (*PubSubPublishEvent)(nil), // 25: xyz.block.ftl.timeline.v1.PubSubPublishEvent - (*PubSubConsumeEvent)(nil), // 26: xyz.block.ftl.timeline.v1.PubSubConsumeEvent - (EventType)(0), // 27: xyz.block.ftl.timeline.v1.EventType - (LogLevel)(0), // 28: xyz.block.ftl.timeline.v1.LogLevel - (*timestamppb.Timestamp)(nil), // 29: google.protobuf.Timestamp - (*v1.PingRequest)(nil), // 30: xyz.block.ftl.v1.PingRequest - (*v1.PingResponse)(nil), // 31: xyz.block.ftl.v1.PingResponse + (*StreamTimelineRequest)(nil), // 3: xyz.block.ftl.timeline.v1.StreamTimelineRequest + (*StreamTimelineResponse)(nil), // 4: xyz.block.ftl.timeline.v1.StreamTimelineResponse + (*CreateEventRequest)(nil), // 5: xyz.block.ftl.timeline.v1.CreateEventRequest + (*CreateEventResponse)(nil), // 6: xyz.block.ftl.timeline.v1.CreateEventResponse + (*DeleteOldEventsRequest)(nil), // 7: xyz.block.ftl.timeline.v1.DeleteOldEventsRequest + (*DeleteOldEventsResponse)(nil), // 8: xyz.block.ftl.timeline.v1.DeleteOldEventsResponse + (*GetTimelineRequest_LogLevelFilter)(nil), // 9: xyz.block.ftl.timeline.v1.GetTimelineRequest.LogLevelFilter + (*GetTimelineRequest_DeploymentFilter)(nil), // 10: xyz.block.ftl.timeline.v1.GetTimelineRequest.DeploymentFilter + (*GetTimelineRequest_RequestFilter)(nil), // 11: xyz.block.ftl.timeline.v1.GetTimelineRequest.RequestFilter + (*GetTimelineRequest_EventTypeFilter)(nil), // 12: xyz.block.ftl.timeline.v1.GetTimelineRequest.EventTypeFilter + (*GetTimelineRequest_TimeFilter)(nil), // 13: xyz.block.ftl.timeline.v1.GetTimelineRequest.TimeFilter + (*GetTimelineRequest_IDFilter)(nil), // 14: xyz.block.ftl.timeline.v1.GetTimelineRequest.IDFilter + (*GetTimelineRequest_CallFilter)(nil), // 15: xyz.block.ftl.timeline.v1.GetTimelineRequest.CallFilter + (*GetTimelineRequest_ModuleFilter)(nil), // 16: xyz.block.ftl.timeline.v1.GetTimelineRequest.ModuleFilter + (*GetTimelineRequest_Filter)(nil), // 17: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter + (*Event)(nil), // 18: xyz.block.ftl.timeline.v1.Event + (*durationpb.Duration)(nil), // 19: google.protobuf.Duration + (*LogEvent)(nil), // 20: xyz.block.ftl.timeline.v1.LogEvent + (*CallEvent)(nil), // 21: xyz.block.ftl.timeline.v1.CallEvent + (*DeploymentCreatedEvent)(nil), // 22: xyz.block.ftl.timeline.v1.DeploymentCreatedEvent + (*DeploymentUpdatedEvent)(nil), // 23: xyz.block.ftl.timeline.v1.DeploymentUpdatedEvent + (*IngressEvent)(nil), // 24: xyz.block.ftl.timeline.v1.IngressEvent + (*CronScheduledEvent)(nil), // 25: xyz.block.ftl.timeline.v1.CronScheduledEvent + (*AsyncExecuteEvent)(nil), // 26: xyz.block.ftl.timeline.v1.AsyncExecuteEvent + (*PubSubPublishEvent)(nil), // 27: xyz.block.ftl.timeline.v1.PubSubPublishEvent + (*PubSubConsumeEvent)(nil), // 28: xyz.block.ftl.timeline.v1.PubSubConsumeEvent + (EventType)(0), // 29: xyz.block.ftl.timeline.v1.EventType + (LogLevel)(0), // 30: xyz.block.ftl.timeline.v1.LogLevel + (*timestamppb.Timestamp)(nil), // 31: google.protobuf.Timestamp + (*v1.PingRequest)(nil), // 32: xyz.block.ftl.v1.PingRequest + (*v1.PingResponse)(nil), // 33: xyz.block.ftl.v1.PingResponse } var file_xyz_block_ftl_timeline_v1_timeline_proto_depIdxs = []int32{ - 16, // 0: xyz.block.ftl.timeline.v1.GetTimelineRequest.filters:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter + 17, // 0: xyz.block.ftl.timeline.v1.GetTimelineRequest.filters:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter 0, // 1: xyz.block.ftl.timeline.v1.GetTimelineRequest.order:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.Order - 17, // 2: xyz.block.ftl.timeline.v1.GetTimelineResponse.events:type_name -> xyz.block.ftl.timeline.v1.Event - 18, // 3: xyz.block.ftl.timeline.v1.CreateEventRequest.log:type_name -> xyz.block.ftl.timeline.v1.LogEvent - 19, // 4: xyz.block.ftl.timeline.v1.CreateEventRequest.call:type_name -> xyz.block.ftl.timeline.v1.CallEvent - 20, // 5: xyz.block.ftl.timeline.v1.CreateEventRequest.deployment_created:type_name -> xyz.block.ftl.timeline.v1.DeploymentCreatedEvent - 21, // 6: xyz.block.ftl.timeline.v1.CreateEventRequest.deployment_updated:type_name -> xyz.block.ftl.timeline.v1.DeploymentUpdatedEvent - 22, // 7: xyz.block.ftl.timeline.v1.CreateEventRequest.ingress:type_name -> xyz.block.ftl.timeline.v1.IngressEvent - 23, // 8: xyz.block.ftl.timeline.v1.CreateEventRequest.cron_scheduled:type_name -> xyz.block.ftl.timeline.v1.CronScheduledEvent - 24, // 9: xyz.block.ftl.timeline.v1.CreateEventRequest.async_execute:type_name -> xyz.block.ftl.timeline.v1.AsyncExecuteEvent - 25, // 10: xyz.block.ftl.timeline.v1.CreateEventRequest.pubsub_publish:type_name -> xyz.block.ftl.timeline.v1.PubSubPublishEvent - 26, // 11: xyz.block.ftl.timeline.v1.CreateEventRequest.pubsub_consume:type_name -> xyz.block.ftl.timeline.v1.PubSubConsumeEvent - 27, // 12: xyz.block.ftl.timeline.v1.DeleteOldEventsRequest.event_type:type_name -> xyz.block.ftl.timeline.v1.EventType - 28, // 13: xyz.block.ftl.timeline.v1.GetTimelineRequest.LogLevelFilter.log_level:type_name -> xyz.block.ftl.timeline.v1.LogLevel - 27, // 14: xyz.block.ftl.timeline.v1.GetTimelineRequest.EventTypeFilter.event_types:type_name -> xyz.block.ftl.timeline.v1.EventType - 29, // 15: xyz.block.ftl.timeline.v1.GetTimelineRequest.TimeFilter.older_than:type_name -> google.protobuf.Timestamp - 29, // 16: xyz.block.ftl.timeline.v1.GetTimelineRequest.TimeFilter.newer_than:type_name -> google.protobuf.Timestamp - 7, // 17: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.limit:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.LimitFilter - 8, // 18: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.log_level:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.LogLevelFilter - 9, // 19: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.deployments:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.DeploymentFilter - 10, // 20: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.requests:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.RequestFilter - 11, // 21: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.event_types:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.EventTypeFilter - 12, // 22: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.time:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.TimeFilter - 13, // 23: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.id:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.IDFilter - 14, // 24: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.call:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.CallFilter - 15, // 25: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.module:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.ModuleFilter - 30, // 26: xyz.block.ftl.timeline.v1.TimelineService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 1, // 27: xyz.block.ftl.timeline.v1.TimelineService.GetTimeline:input_type -> xyz.block.ftl.timeline.v1.GetTimelineRequest - 3, // 28: xyz.block.ftl.timeline.v1.TimelineService.CreateEvent:input_type -> xyz.block.ftl.timeline.v1.CreateEventRequest - 5, // 29: xyz.block.ftl.timeline.v1.TimelineService.DeleteOldEvents:input_type -> xyz.block.ftl.timeline.v1.DeleteOldEventsRequest - 31, // 30: xyz.block.ftl.timeline.v1.TimelineService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 2, // 31: xyz.block.ftl.timeline.v1.TimelineService.GetTimeline:output_type -> xyz.block.ftl.timeline.v1.GetTimelineResponse - 4, // 32: xyz.block.ftl.timeline.v1.TimelineService.CreateEvent:output_type -> xyz.block.ftl.timeline.v1.CreateEventResponse - 6, // 33: xyz.block.ftl.timeline.v1.TimelineService.DeleteOldEvents:output_type -> xyz.block.ftl.timeline.v1.DeleteOldEventsResponse - 30, // [30:34] is the sub-list for method output_type - 26, // [26:30] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name + 18, // 2: xyz.block.ftl.timeline.v1.GetTimelineResponse.events:type_name -> xyz.block.ftl.timeline.v1.Event + 19, // 3: xyz.block.ftl.timeline.v1.StreamTimelineRequest.update_interval:type_name -> google.protobuf.Duration + 1, // 4: xyz.block.ftl.timeline.v1.StreamTimelineRequest.query:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest + 18, // 5: xyz.block.ftl.timeline.v1.StreamTimelineResponse.events:type_name -> xyz.block.ftl.timeline.v1.Event + 20, // 6: xyz.block.ftl.timeline.v1.CreateEventRequest.log:type_name -> xyz.block.ftl.timeline.v1.LogEvent + 21, // 7: xyz.block.ftl.timeline.v1.CreateEventRequest.call:type_name -> xyz.block.ftl.timeline.v1.CallEvent + 22, // 8: xyz.block.ftl.timeline.v1.CreateEventRequest.deployment_created:type_name -> xyz.block.ftl.timeline.v1.DeploymentCreatedEvent + 23, // 9: xyz.block.ftl.timeline.v1.CreateEventRequest.deployment_updated:type_name -> xyz.block.ftl.timeline.v1.DeploymentUpdatedEvent + 24, // 10: xyz.block.ftl.timeline.v1.CreateEventRequest.ingress:type_name -> xyz.block.ftl.timeline.v1.IngressEvent + 25, // 11: xyz.block.ftl.timeline.v1.CreateEventRequest.cron_scheduled:type_name -> xyz.block.ftl.timeline.v1.CronScheduledEvent + 26, // 12: xyz.block.ftl.timeline.v1.CreateEventRequest.async_execute:type_name -> xyz.block.ftl.timeline.v1.AsyncExecuteEvent + 27, // 13: xyz.block.ftl.timeline.v1.CreateEventRequest.pubsub_publish:type_name -> xyz.block.ftl.timeline.v1.PubSubPublishEvent + 28, // 14: xyz.block.ftl.timeline.v1.CreateEventRequest.pubsub_consume:type_name -> xyz.block.ftl.timeline.v1.PubSubConsumeEvent + 29, // 15: xyz.block.ftl.timeline.v1.DeleteOldEventsRequest.event_type:type_name -> xyz.block.ftl.timeline.v1.EventType + 30, // 16: xyz.block.ftl.timeline.v1.GetTimelineRequest.LogLevelFilter.log_level:type_name -> xyz.block.ftl.timeline.v1.LogLevel + 29, // 17: xyz.block.ftl.timeline.v1.GetTimelineRequest.EventTypeFilter.event_types:type_name -> xyz.block.ftl.timeline.v1.EventType + 31, // 18: xyz.block.ftl.timeline.v1.GetTimelineRequest.TimeFilter.older_than:type_name -> google.protobuf.Timestamp + 31, // 19: xyz.block.ftl.timeline.v1.GetTimelineRequest.TimeFilter.newer_than:type_name -> google.protobuf.Timestamp + 9, // 20: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.log_level:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.LogLevelFilter + 10, // 21: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.deployments:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.DeploymentFilter + 11, // 22: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.requests:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.RequestFilter + 12, // 23: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.event_types:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.EventTypeFilter + 13, // 24: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.time:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.TimeFilter + 14, // 25: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.id:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.IDFilter + 15, // 26: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.call:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.CallFilter + 16, // 27: xyz.block.ftl.timeline.v1.GetTimelineRequest.Filter.module:type_name -> xyz.block.ftl.timeline.v1.GetTimelineRequest.ModuleFilter + 32, // 28: xyz.block.ftl.timeline.v1.TimelineService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 1, // 29: xyz.block.ftl.timeline.v1.TimelineService.GetTimeline:input_type -> xyz.block.ftl.timeline.v1.GetTimelineRequest + 3, // 30: xyz.block.ftl.timeline.v1.TimelineService.StreamTimeline:input_type -> xyz.block.ftl.timeline.v1.StreamTimelineRequest + 5, // 31: xyz.block.ftl.timeline.v1.TimelineService.CreateEvent:input_type -> xyz.block.ftl.timeline.v1.CreateEventRequest + 7, // 32: xyz.block.ftl.timeline.v1.TimelineService.DeleteOldEvents:input_type -> xyz.block.ftl.timeline.v1.DeleteOldEventsRequest + 33, // 33: xyz.block.ftl.timeline.v1.TimelineService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 2, // 34: xyz.block.ftl.timeline.v1.TimelineService.GetTimeline:output_type -> xyz.block.ftl.timeline.v1.GetTimelineResponse + 4, // 35: xyz.block.ftl.timeline.v1.TimelineService.StreamTimeline:output_type -> xyz.block.ftl.timeline.v1.StreamTimelineResponse + 6, // 36: xyz.block.ftl.timeline.v1.TimelineService.CreateEvent:output_type -> xyz.block.ftl.timeline.v1.CreateEventResponse + 8, // 37: xyz.block.ftl.timeline.v1.TimelineService.DeleteOldEvents:output_type -> xyz.block.ftl.timeline.v1.DeleteOldEventsResponse + 33, // [33:38] is the sub-list for method output_type + 28, // [28:33] is the sub-list for method input_type + 28, // [28:28] is the sub-list for extension type_name + 28, // [28:28] is the sub-list for extension extendee + 0, // [0:28] is the sub-list for field type_name } func init() { file_xyz_block_ftl_timeline_v1_timeline_proto_init() } @@ -1455,7 +1530,9 @@ func file_xyz_block_ftl_timeline_v1_timeline_proto_init() { return } file_xyz_block_ftl_timeline_v1_event_proto_init() - file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[2].OneofWrappers = []any{ + file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[1].OneofWrappers = []any{} + file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[2].OneofWrappers = []any{} + file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[4].OneofWrappers = []any{ (*CreateEventRequest_Log)(nil), (*CreateEventRequest_Call)(nil), (*CreateEventRequest_DeploymentCreated)(nil), @@ -1466,12 +1543,11 @@ func file_xyz_block_ftl_timeline_v1_timeline_proto_init() { (*CreateEventRequest_PubsubPublish)(nil), (*CreateEventRequest_PubsubConsume)(nil), } - file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[11].OneofWrappers = []any{} file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[12].OneofWrappers = []any{} file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[13].OneofWrappers = []any{} file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[14].OneofWrappers = []any{} - file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[15].OneofWrappers = []any{ - (*GetTimelineRequest_Filter_Limit)(nil), + file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[15].OneofWrappers = []any{} + file_xyz_block_ftl_timeline_v1_timeline_proto_msgTypes[16].OneofWrappers = []any{ (*GetTimelineRequest_Filter_LogLevel)(nil), (*GetTimelineRequest_Filter_Deployments)(nil), (*GetTimelineRequest_Filter_Requests)(nil), @@ -1487,7 +1563,7 @@ func file_xyz_block_ftl_timeline_v1_timeline_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xyz_block_ftl_timeline_v1_timeline_proto_rawDesc, NumEnums: 1, - NumMessages: 16, + NumMessages: 17, NumExtensions: 0, NumServices: 1, }, diff --git a/backend/protos/xyz/block/ftl/timeline/v1/timeline.proto b/backend/protos/xyz/block/ftl/timeline/v1/timeline.proto index c8a4eee8cf..9da8a86a03 100644 --- a/backend/protos/xyz/block/ftl/timeline/v1/timeline.proto +++ b/backend/protos/xyz/block/ftl/timeline/v1/timeline.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package xyz.block.ftl.timeline.v1; +import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "xyz/block/ftl/timeline/v1/event.proto"; import "xyz/block/ftl/v1/ftl.proto"; @@ -10,10 +11,6 @@ option go_package = "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/tim option java_multiple_files = true; message GetTimelineRequest { - // Limit the number of events returned. - message LimitFilter { - int32 limit = 1; - } // Filters events by log level. message LogLevelFilter { timeline.v1.LogLevel log_level = 1; @@ -64,15 +61,14 @@ message GetTimelineRequest { message Filter { // These map 1:1 with filters in backend/timeline/filters.go oneof filter { - LimitFilter limit = 1; - LogLevelFilter log_level = 2; - DeploymentFilter deployments = 3; - RequestFilter requests = 4; - EventTypeFilter event_types = 5; - TimeFilter time = 6; - IDFilter id = 7; - CallFilter call = 8; - ModuleFilter module = 9; + LogLevelFilter log_level = 1; + DeploymentFilter deployments = 2; + RequestFilter requests = 3; + EventTypeFilter event_types = 4; + TimeFilter time = 5; + IDFilter id = 6; + CallFilter call = 7; + ModuleFilter module = 8; } } @@ -83,6 +79,17 @@ message GetTimelineRequest { message GetTimelineResponse { repeated timeline.v1.Event events = 1; + // For pagination, this cursor is where we should start our next query + optional int64 cursor = 2; +} + +message StreamTimelineRequest { + optional google.protobuf.Duration update_interval = 1; + GetTimelineRequest query = 2; +} + +message StreamTimelineResponse { + repeated timeline.v1.Event events = 1; } message CreateEventRequest { @@ -116,11 +123,14 @@ service TimelineService { option idempotency_level = NO_SIDE_EFFECTS; } - // Get timeline events, optionally filtered by type and time + // Get timeline events with filters rpc GetTimeline(GetTimelineRequest) returns (GetTimelineResponse) { option idempotency_level = NO_SIDE_EFFECTS; } + // Stream timeline events with filters + rpc StreamTimeline(StreamTimelineRequest) returns (stream StreamTimelineResponse); + rpc CreateEvent(CreateEventRequest) returns (CreateEventResponse) {} // Delete old events of a specific type diff --git a/backend/protos/xyz/block/ftl/timeline/v1/timelinev1connect/timeline.connect.go b/backend/protos/xyz/block/ftl/timeline/v1/timelinev1connect/timeline.connect.go index 2dfef9a725..a09f9058fa 100644 --- a/backend/protos/xyz/block/ftl/timeline/v1/timelinev1connect/timeline.connect.go +++ b/backend/protos/xyz/block/ftl/timeline/v1/timelinev1connect/timeline.connect.go @@ -39,6 +39,9 @@ const ( // TimelineServiceGetTimelineProcedure is the fully-qualified name of the TimelineService's // GetTimeline RPC. TimelineServiceGetTimelineProcedure = "/xyz.block.ftl.timeline.v1.TimelineService/GetTimeline" + // TimelineServiceStreamTimelineProcedure is the fully-qualified name of the TimelineService's + // StreamTimeline RPC. + TimelineServiceStreamTimelineProcedure = "/xyz.block.ftl.timeline.v1.TimelineService/StreamTimeline" // TimelineServiceCreateEventProcedure is the fully-qualified name of the TimelineService's // CreateEvent RPC. TimelineServiceCreateEventProcedure = "/xyz.block.ftl.timeline.v1.TimelineService/CreateEvent" @@ -51,8 +54,10 @@ const ( type TimelineServiceClient interface { // Ping service for readiness Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) - // Get timeline events, optionally filtered by type and time + // Get timeline events with filters GetTimeline(context.Context, *connect.Request[v11.GetTimelineRequest]) (*connect.Response[v11.GetTimelineResponse], error) + // Stream timeline events with filters + StreamTimeline(context.Context, *connect.Request[v11.StreamTimelineRequest]) (*connect.ServerStreamForClient[v11.StreamTimelineResponse], error) CreateEvent(context.Context, *connect.Request[v11.CreateEventRequest]) (*connect.Response[v11.CreateEventResponse], error) // Delete old events of a specific type DeleteOldEvents(context.Context, *connect.Request[v11.DeleteOldEventsRequest]) (*connect.Response[v11.DeleteOldEventsResponse], error) @@ -80,6 +85,11 @@ func NewTimelineServiceClient(httpClient connect.HTTPClient, baseURL string, opt connect.WithIdempotency(connect.IdempotencyNoSideEffects), connect.WithClientOptions(opts...), ), + streamTimeline: connect.NewClient[v11.StreamTimelineRequest, v11.StreamTimelineResponse]( + httpClient, + baseURL+TimelineServiceStreamTimelineProcedure, + opts..., + ), createEvent: connect.NewClient[v11.CreateEventRequest, v11.CreateEventResponse]( httpClient, baseURL+TimelineServiceCreateEventProcedure, @@ -97,6 +107,7 @@ func NewTimelineServiceClient(httpClient connect.HTTPClient, baseURL string, opt type timelineServiceClient struct { ping *connect.Client[v1.PingRequest, v1.PingResponse] getTimeline *connect.Client[v11.GetTimelineRequest, v11.GetTimelineResponse] + streamTimeline *connect.Client[v11.StreamTimelineRequest, v11.StreamTimelineResponse] createEvent *connect.Client[v11.CreateEventRequest, v11.CreateEventResponse] deleteOldEvents *connect.Client[v11.DeleteOldEventsRequest, v11.DeleteOldEventsResponse] } @@ -111,6 +122,11 @@ func (c *timelineServiceClient) GetTimeline(ctx context.Context, req *connect.Re return c.getTimeline.CallUnary(ctx, req) } +// StreamTimeline calls xyz.block.ftl.timeline.v1.TimelineService.StreamTimeline. +func (c *timelineServiceClient) StreamTimeline(ctx context.Context, req *connect.Request[v11.StreamTimelineRequest]) (*connect.ServerStreamForClient[v11.StreamTimelineResponse], error) { + return c.streamTimeline.CallServerStream(ctx, req) +} + // CreateEvent calls xyz.block.ftl.timeline.v1.TimelineService.CreateEvent. func (c *timelineServiceClient) CreateEvent(ctx context.Context, req *connect.Request[v11.CreateEventRequest]) (*connect.Response[v11.CreateEventResponse], error) { return c.createEvent.CallUnary(ctx, req) @@ -126,8 +142,10 @@ func (c *timelineServiceClient) DeleteOldEvents(ctx context.Context, req *connec type TimelineServiceHandler interface { // Ping service for readiness Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) - // Get timeline events, optionally filtered by type and time + // Get timeline events with filters GetTimeline(context.Context, *connect.Request[v11.GetTimelineRequest]) (*connect.Response[v11.GetTimelineResponse], error) + // Stream timeline events with filters + StreamTimeline(context.Context, *connect.Request[v11.StreamTimelineRequest], *connect.ServerStream[v11.StreamTimelineResponse]) error CreateEvent(context.Context, *connect.Request[v11.CreateEventRequest]) (*connect.Response[v11.CreateEventResponse], error) // Delete old events of a specific type DeleteOldEvents(context.Context, *connect.Request[v11.DeleteOldEventsRequest]) (*connect.Response[v11.DeleteOldEventsResponse], error) @@ -151,6 +169,11 @@ func NewTimelineServiceHandler(svc TimelineServiceHandler, opts ...connect.Handl connect.WithIdempotency(connect.IdempotencyNoSideEffects), connect.WithHandlerOptions(opts...), ) + timelineServiceStreamTimelineHandler := connect.NewServerStreamHandler( + TimelineServiceStreamTimelineProcedure, + svc.StreamTimeline, + opts..., + ) timelineServiceCreateEventHandler := connect.NewUnaryHandler( TimelineServiceCreateEventProcedure, svc.CreateEvent, @@ -167,6 +190,8 @@ func NewTimelineServiceHandler(svc TimelineServiceHandler, opts ...connect.Handl timelineServicePingHandler.ServeHTTP(w, r) case TimelineServiceGetTimelineProcedure: timelineServiceGetTimelineHandler.ServeHTTP(w, r) + case TimelineServiceStreamTimelineProcedure: + timelineServiceStreamTimelineHandler.ServeHTTP(w, r) case TimelineServiceCreateEventProcedure: timelineServiceCreateEventHandler.ServeHTTP(w, r) case TimelineServiceDeleteOldEventsProcedure: @@ -188,6 +213,10 @@ func (UnimplementedTimelineServiceHandler) GetTimeline(context.Context, *connect return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.timeline.v1.TimelineService.GetTimeline is not implemented")) } +func (UnimplementedTimelineServiceHandler) StreamTimeline(context.Context, *connect.Request[v11.StreamTimelineRequest], *connect.ServerStream[v11.StreamTimelineResponse]) error { + return connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.timeline.v1.TimelineService.StreamTimeline is not implemented")) +} + func (UnimplementedTimelineServiceHandler) CreateEvent(context.Context, *connect.Request[v11.CreateEventRequest]) (*connect.Response[v11.CreateEventResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.timeline.v1.TimelineService.CreateEvent is not implemented")) } diff --git a/backend/timeline/filters.go b/backend/timeline/filters.go index c5fff0ec3a..e08aa48105 100644 --- a/backend/timeline/filters.go +++ b/backend/timeline/filters.go @@ -5,8 +5,6 @@ import ( "reflect" "slices" - "github.com/alecthomas/types/optional" - timelinepb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/timeline/v1" islices "github.com/TBD54566975/ftl/internal/slices" ) @@ -215,7 +213,7 @@ func FilterIDRange(filter *timelinepb.GetTimelineRequest_IDFilter) TimelineFilte } //nolint:maintidx -func filtersFromRequest(req *timelinepb.GetTimelineRequest) (outFilters []TimelineFilter, limit optional.Option[int], ascending bool, err error) { +func filtersFromRequest(req *timelinepb.GetTimelineRequest) (outFilters []TimelineFilter, ascending bool) { if req.Order != timelinepb.GetTimelineRequest_ORDER_DESC { ascending = true } @@ -227,11 +225,6 @@ func filtersFromRequest(req *timelinepb.GetTimelineRequest) (outFilters []Timeli } for _, filters := range reqFiltersByType { switch filters[0].Filter.(type) { - case *timelinepb.GetTimelineRequest_Filter_Limit: - if len(filters) > 1 { - return nil, optional.None[int](), false, fmt.Errorf("multiple limit filters not supported") - } - limit = optional.Some(int(filters[0].GetLimit().Limit)) case *timelinepb.GetTimelineRequest_Filter_LogLevel: outFilters = append(outFilters, islices.Map(filters, func(f *timelinepb.GetTimelineRequest_Filter) TimelineFilter { return FilterLogLevel(f.GetLogLevel()) @@ -268,5 +261,5 @@ func filtersFromRequest(req *timelinepb.GetTimelineRequest) (outFilters []Timeli panic(fmt.Sprintf("unexpected filter type: %T", filters[0].Filter)) } } - return outFilters, limit, ascending, nil + return outFilters, ascending } diff --git a/backend/timeline/service.go b/backend/timeline/service.go index 48ed53a24c..d9126c66d1 100644 --- a/backend/timeline/service.go +++ b/backend/timeline/service.go @@ -2,6 +2,7 @@ package timeline import ( "context" + "errors" "fmt" "net/url" "sync" @@ -114,10 +115,13 @@ func (s *service) GetTimeline(ctx context.Context, req *connect.Request[timeline s.lock.RLock() defer s.lock.RUnlock() - filters, limit, ascending, err := filtersFromRequest(req.Msg) - if err != nil { - return nil, err + filters, ascending := filtersFromRequest(req.Msg) + if req.Msg.Limit == 0 { + return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("limit must be > 0")) } + // Get 1 more than the requested limit to determine if there are more results. + limit := int(req.Msg.Limit) + fetchLimit := limit + 1 results := []*timelinepb.Event{} @@ -141,15 +145,76 @@ func (s *service) GetTimeline(ctx context.Context, req *connect.Request[timeline continue } results = append(results, s.events[i]) - if limit, ok := limit.Get(); ok && limit != 0 && len(results) >= limit { + if fetchLimit != 0 && len(results) >= fetchLimit { break } } + + var cursor *int64 + // Return only the requested number of results. + if len(results) > limit { + id := results[len(results)-1].Id + results = results[:limit] + cursor = &id + } return connect.NewResponse(&timelinepb.GetTimelineResponse{ Events: results, + Cursor: cursor, }), nil } +func (s *service) StreamTimeline(ctx context.Context, req *connect.Request[timelinepb.StreamTimelineRequest], stream *connect.ServerStream[timelinepb.StreamTimelineResponse]) error { + // Default to 1 second interval if not specified. + updateInterval := 1 * time.Second + if req.Msg.UpdateInterval != nil && req.Msg.UpdateInterval.AsDuration() > time.Second { // Minimum 1s interval. + updateInterval = req.Msg.UpdateInterval.AsDuration() + } + + if req.Msg.Query.Limit == 0 { + return connect.NewError(connect.CodeInvalidArgument, errors.New("limit must be > 0")) + } + + timelineReq := req.Msg.Query + // Default to last 1 day of events + var lastEventTime time.Time + for { + thisRequestTime := time.Now() + newQuery := timelineReq + + if !lastEventTime.IsZero() { + newQuery.Filters = append(newQuery.Filters, &timelinepb.GetTimelineRequest_Filter{ + Filter: &timelinepb.GetTimelineRequest_Filter_Time{ + Time: &timelinepb.GetTimelineRequest_TimeFilter{ + NewerThan: timestamppb.New(lastEventTime), + OlderThan: timestamppb.New(thisRequestTime), + }, + }, + }) + } + + resp, err := s.GetTimeline(ctx, connect.NewRequest(newQuery)) + if err != nil { + return fmt.Errorf("failed to get timeline: %w", err) + } + + if len(resp.Msg.Events) > 0 { + err = stream.Send(&timelinepb.StreamTimelineResponse{ + Events: resp.Msg.Events, + }) + if err != nil { + return fmt.Errorf("failed to get timeline events: %w", err) + } + } + + lastEventTime = thisRequestTime + select { + case <-time.After(updateInterval): + case <-ctx.Done(): + return nil + } + } +} + func (s *service) DeleteOldEvents(ctx context.Context, req *connect.Request[timelinepb.DeleteOldEventsRequest]) (*connect.Response[timelinepb.DeleteOldEventsResponse], error) { s.lock.Lock() defer s.lock.Unlock() diff --git a/backend/timeline/service_test.go b/backend/timeline/service_test.go index 218c57e2b4..b598c66fc2 100644 --- a/backend/timeline/service_test.go +++ b/backend/timeline/service_test.go @@ -43,6 +43,7 @@ func TestGetTimelineWithLimit(t *testing.T) { } { resp, err := service.GetTimeline(ctx, connect.NewRequest(&timelinepb.GetTimelineRequest{ Order: timelinepb.GetTimelineRequest_ORDER_DESC, + Limit: limit, Filters: []*timelinepb.GetTimelineRequest_Filter{ { Filter: &timelinepb.GetTimelineRequest_Filter_EventTypes{ @@ -53,15 +54,12 @@ func TestGetTimelineWithLimit(t *testing.T) { }, }, }, - { - Filter: &timelinepb.GetTimelineRequest_Filter_Limit{ - Limit: &timelinepb.GetTimelineRequest_LimitFilter{ - Limit: limit, - }, - }, - }, }, })) + if limit == 0 { + assert.Error(t, err, "invalid_argument: limit must be > 0") + continue + } assert.NoError(t, err) if limit == 0 || limit > int32(entryCount) { assert.Equal(t, entryCount, len(resp.Msg.Events)) diff --git a/frontend/cli/cmd_replay.go b/frontend/cli/cmd_replay.go index b197b52dc6..59827ad279 100644 --- a/frontend/cli/cmd_replay.go +++ b/frontend/cli/cmd_replay.go @@ -9,9 +9,8 @@ import ( "connectrpc.com/connect" "github.com/jpillora/backoff" - pbconsole "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/console/v1" - "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/console/v1/pbconsoleconnect" - pbtimeline "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/timeline/v1" + timelinepb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/timeline/v1" + "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/timeline/v1/timelinev1connect" ftlv1 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" "github.com/TBD54566975/ftl/go-runtime/ftl/reflection" @@ -38,8 +37,8 @@ func (c *replayCmd) Run( return fmt.Errorf("failed to wait for client: %w", err) } - consoleServiceClient := rpc.Dial(pbconsoleconnect.NewConsoleServiceClient, cli.Endpoint.String(), log.Error) - if err := rpc.Wait(ctx, backoff.Backoff{Max: time.Second * 2}, c.Wait-time.Since(startTime), consoleServiceClient); err != nil { + timelineClient := rpc.Dial(timelinev1connect.NewTimelineServiceClient, cli.TimelineEndpoint.String(), log.Error) + if err := rpc.Wait(ctx, backoff.Backoff{Max: time.Second * 2}, c.Wait-time.Since(startTime), timelineClient); err != nil { return fmt.Errorf("failed to wait for console service client: %w", err) } @@ -77,21 +76,21 @@ func (c *replayCmd) Run( return fmt.Errorf("verb not found: %s", c.Verb) } - events, err := consoleServiceClient.GetEvents(ctx, connect.NewRequest(&pbconsole.GetEventsRequest{ - Order: pbconsole.GetEventsRequest_ORDER_DESC, - Filters: []*pbconsole.GetEventsRequest_Filter{ + events, err := timelineClient.GetTimeline(ctx, connect.NewRequest(&timelinepb.GetTimelineRequest{ + Order: timelinepb.GetTimelineRequest_ORDER_DESC, + Filters: []*timelinepb.GetTimelineRequest_Filter{ { - Filter: &pbconsole.GetEventsRequest_Filter_Call{ - Call: &pbconsole.GetEventsRequest_CallFilter{ + Filter: &timelinepb.GetTimelineRequest_Filter_Call{ + Call: &timelinepb.GetTimelineRequest_CallFilter{ DestModule: c.Verb.Module, DestVerb: &c.Verb.Name, }, }, }, { - Filter: &pbconsole.GetEventsRequest_Filter_EventTypes{ - EventTypes: &pbconsole.GetEventsRequest_EventTypeFilter{ - EventTypes: []pbtimeline.EventType{pbtimeline.EventType_EVENT_TYPE_CALL}, + Filter: &timelinepb.GetTimelineRequest_Filter_EventTypes{ + EventTypes: &timelinepb.GetTimelineRequest_EventTypeFilter{ + EventTypes: []timelinepb.EventType{timelinepb.EventType_EVENT_TYPE_CALL}, }, }, }, diff --git a/frontend/console/src/api/timeline/timeline-filters.ts b/frontend/console/src/api/timeline/timeline-filters.ts index a1ee9d9f7a..966b7ad0dc 100644 --- a/frontend/console/src/api/timeline/timeline-filters.ts +++ b/frontend/console/src/api/timeline/timeline-filters.ts @@ -1,20 +1,20 @@ import type { Timestamp } from '@bufbuild/protobuf' -import { - GetEventsRequest_CallFilter, - GetEventsRequest_DeploymentFilter, - GetEventsRequest_EventTypeFilter, - GetEventsRequest_Filter, - GetEventsRequest_IDFilter, - GetEventsRequest_LogLevelFilter, - GetEventsRequest_ModuleFilter, - GetEventsRequest_RequestFilter, - GetEventsRequest_TimeFilter, -} from '../../protos/xyz/block/ftl/console/v1/console_pb' import type { EventType, LogLevel } from '../../protos/xyz/block/ftl/timeline/v1/event_pb' +import { + GetTimelineRequest_CallFilter, + GetTimelineRequest_DeploymentFilter, + GetTimelineRequest_EventTypeFilter, + GetTimelineRequest_Filter, + GetTimelineRequest_IDFilter, + GetTimelineRequest_LogLevelFilter, + GetTimelineRequest_ModuleFilter, + GetTimelineRequest_RequestFilter, + GetTimelineRequest_TimeFilter, +} from '../../protos/xyz/block/ftl/timeline/v1/timeline_pb' -export const requestKeysFilter = (requestKeys: string[]): GetEventsRequest_Filter => { - const filter = new GetEventsRequest_Filter() - const requestFilter = new GetEventsRequest_RequestFilter() +export const requestKeysFilter = (requestKeys: string[]): GetTimelineRequest_Filter => { + const filter = new GetTimelineRequest_Filter() + const requestFilter = new GetTimelineRequest_RequestFilter() requestFilter.requests = requestKeys filter.filter = { case: 'requests', @@ -23,9 +23,9 @@ export const requestKeysFilter = (requestKeys: string[]): GetEventsRequest_Filte return filter } -export const eventTypesFilter = (eventTypes: EventType[]): GetEventsRequest_Filter => { - const filter = new GetEventsRequest_Filter() - const typesFilter = new GetEventsRequest_EventTypeFilter() +export const eventTypesFilter = (eventTypes: EventType[]): GetTimelineRequest_Filter => { + const filter = new GetTimelineRequest_Filter() + const typesFilter = new GetTimelineRequest_EventTypeFilter() typesFilter.eventTypes = eventTypes filter.filter = { case: 'eventTypes', @@ -34,9 +34,9 @@ export const eventTypesFilter = (eventTypes: EventType[]): GetEventsRequest_Filt return filter } -export const logLevelFilter = (logLevel: LogLevel): GetEventsRequest_Filter => { - const filter = new GetEventsRequest_Filter() - const logFilter = new GetEventsRequest_LogLevelFilter() +export const logLevelFilter = (logLevel: LogLevel): GetTimelineRequest_Filter => { + const filter = new GetTimelineRequest_Filter() + const logFilter = new GetTimelineRequest_LogLevelFilter() logFilter.logLevel = logLevel filter.filter = { case: 'logLevel', @@ -45,9 +45,9 @@ export const logLevelFilter = (logLevel: LogLevel): GetEventsRequest_Filter => { return filter } -export const modulesFilter = (modules: string[]): GetEventsRequest_Filter => { - const filter = new GetEventsRequest_Filter() - const deploymentsFilter = new GetEventsRequest_DeploymentFilter() +export const modulesFilter = (modules: string[]): GetTimelineRequest_Filter => { + const filter = new GetTimelineRequest_Filter() + const deploymentsFilter = new GetTimelineRequest_DeploymentFilter() deploymentsFilter.deployments = modules filter.filter = { case: 'deployments', @@ -56,9 +56,9 @@ export const modulesFilter = (modules: string[]): GetEventsRequest_Filter => { return filter } -export const callFilter = (destModule: string, destVerb?: string, sourceModule?: string): GetEventsRequest_Filter => { - const filter = new GetEventsRequest_Filter() - const callFilter = new GetEventsRequest_CallFilter() +export const callFilter = (destModule: string, destVerb?: string, sourceModule?: string): GetTimelineRequest_Filter => { + const filter = new GetTimelineRequest_Filter() + const callFilter = new GetTimelineRequest_CallFilter() callFilter.destModule = destModule callFilter.destVerb = destVerb callFilter.sourceModule = sourceModule @@ -69,9 +69,9 @@ export const callFilter = (destModule: string, destVerb?: string, sourceModule?: return filter } -export const moduleFilter = (module: string, verb?: string): GetEventsRequest_Filter => { - const filter = new GetEventsRequest_Filter() - const moduleFilter = new GetEventsRequest_ModuleFilter() +export const moduleFilter = (module: string, verb?: string): GetTimelineRequest_Filter => { + const filter = new GetTimelineRequest_Filter() + const moduleFilter = new GetTimelineRequest_ModuleFilter() moduleFilter.module = module moduleFilter.verb = verb filter.filter = { @@ -81,9 +81,9 @@ export const moduleFilter = (module: string, verb?: string): GetEventsRequest_Fi return filter } -export const timeFilter = (olderThan: Timestamp | undefined, newerThan: Timestamp | undefined): GetEventsRequest_Filter => { - const filter = new GetEventsRequest_Filter() - const timeFilter = new GetEventsRequest_TimeFilter() +export const timeFilter = (olderThan: Timestamp | undefined, newerThan: Timestamp | undefined): GetTimelineRequest_Filter => { + const filter = new GetTimelineRequest_Filter() + const timeFilter = new GetTimelineRequest_TimeFilter() timeFilter.olderThan = olderThan timeFilter.newerThan = newerThan filter.filter = { @@ -99,9 +99,9 @@ export const eventIdFilter = ({ }: { lowerThan?: bigint higherThan?: bigint -}): GetEventsRequest_Filter => { - const filter = new GetEventsRequest_Filter() - const idFilter = new GetEventsRequest_IDFilter() +}): GetTimelineRequest_Filter => { + const filter = new GetTimelineRequest_Filter() + const idFilter = new GetTimelineRequest_IDFilter() idFilter.lowerThan = lowerThan idFilter.higherThan = higherThan filter.filter = { diff --git a/frontend/console/src/api/timeline/use-module-trace-events.ts b/frontend/console/src/api/timeline/use-module-trace-events.ts index f18228c0ac..03ebf8b6a0 100644 --- a/frontend/console/src/api/timeline/use-module-trace-events.ts +++ b/frontend/console/src/api/timeline/use-module-trace-events.ts @@ -1,9 +1,9 @@ -import type { GetEventsRequest_Filter } from '../../protos/xyz/block/ftl/console/v1/console_pb.ts' import { EventType } from '../../protos/xyz/block/ftl/timeline/v1/event_pb.ts' +import type { GetTimelineRequest_Filter } from '../../protos/xyz/block/ftl/timeline/v1/timeline_pb.ts' import { eventTypesFilter, moduleFilter } from './timeline-filters.ts' import { useTimeline } from './use-timeline.ts' -export const useModuleTraceEvents = (module: string, verb?: string, filters: GetEventsRequest_Filter[] = []) => { +export const useModuleTraceEvents = (module: string, verb?: string, filters: GetTimelineRequest_Filter[] = []) => { const eventTypes = [EventType.CALL, EventType.INGRESS] const allFilters = [...filters, moduleFilter(module, verb), eventTypesFilter(eventTypes)] const timelineQuery = useTimeline(true, allFilters, 500) diff --git a/frontend/console/src/api/timeline/use-request-trace-events.ts b/frontend/console/src/api/timeline/use-request-trace-events.ts index 732d4abebf..aca16d82a9 100644 --- a/frontend/console/src/api/timeline/use-request-trace-events.ts +++ b/frontend/console/src/api/timeline/use-request-trace-events.ts @@ -1,4 +1,3 @@ -import type { GetEventsRequest_Filter } from '../../protos/xyz/block/ftl/console/v1/console_pb.ts' import { type AsyncExecuteEvent, type CallEvent, @@ -7,12 +6,13 @@ import { type PubSubConsumeEvent, type PubSubPublishEvent, } from '../../protos/xyz/block/ftl/timeline/v1/event_pb.ts' +import type { GetTimelineRequest_Filter } from '../../protos/xyz/block/ftl/timeline/v1/timeline_pb.ts' import { eventTypesFilter, requestKeysFilter } from './timeline-filters.ts' import { useTimeline } from './use-timeline.ts' export type TraceEvent = CallEvent | IngressEvent | AsyncExecuteEvent | PubSubPublishEvent | PubSubConsumeEvent -export const useRequestTraceEvents = (requestKey?: string, filters: GetEventsRequest_Filter[] = []) => { +export const useRequestTraceEvents = (requestKey?: string, filters: GetTimelineRequest_Filter[] = []) => { const eventTypes = [EventType.CALL, EventType.ASYNC_EXECUTE, EventType.INGRESS, EventType.PUBSUB_CONSUME, EventType.PUBSUB_PUBLISH] const allFilters = [...filters, requestKeysFilter([requestKey || '']), eventTypesFilter(eventTypes)] diff --git a/frontend/console/src/api/timeline/use-timeline-calls.ts b/frontend/console/src/api/timeline/use-timeline-calls.ts index 0a7a6d1447..4eafc1c999 100644 --- a/frontend/console/src/api/timeline/use-timeline-calls.ts +++ b/frontend/console/src/api/timeline/use-timeline-calls.ts @@ -1,9 +1,9 @@ -import type { GetEventsRequest_Filter } from '../../protos/xyz/block/ftl/console/v1/console_pb.ts' import { EventType } from '../../protos/xyz/block/ftl/timeline/v1/event_pb.ts' +import type { GetTimelineRequest_Filter } from '../../protos/xyz/block/ftl/timeline/v1/timeline_pb.ts' import { eventTypesFilter } from './timeline-filters.ts' import { useTimeline } from './use-timeline.ts' -export const useTimelineCalls = (isStreaming: boolean, filters: GetEventsRequest_Filter[], enabled = true) => { +export const useTimelineCalls = (isStreaming: boolean, filters: GetTimelineRequest_Filter[], enabled = true) => { const allFilters = [...filters, eventTypesFilter([EventType.CALL])] const timelineQuery = useTimeline(isStreaming, allFilters, 1000, enabled) diff --git a/frontend/console/src/api/timeline/use-timeline.ts b/frontend/console/src/api/timeline/use-timeline.ts index 9a7dfb5471..44a07d624a 100644 --- a/frontend/console/src/api/timeline/use-timeline.ts +++ b/frontend/console/src/api/timeline/use-timeline.ts @@ -2,19 +2,19 @@ import { Code, ConnectError } from '@connectrpc/connect' import { useQuery, useQueryClient } from '@tanstack/react-query' import { useClient } from '../../hooks/use-client' import { useVisibility } from '../../hooks/use-visibility' -import { ConsoleService } from '../../protos/xyz/block/ftl/console/v1/console_connect' -import { type GetEventsRequest_Filter, GetEventsRequest_Order } from '../../protos/xyz/block/ftl/console/v1/console_pb' import type { Event } from '../../protos/xyz/block/ftl/timeline/v1/event_pb' +import { TimelineService } from '../../protos/xyz/block/ftl/timeline/v1/timeline_connect' +import { type GetTimelineRequest_Filter, GetTimelineRequest_Order } from '../../protos/xyz/block/ftl/timeline/v1/timeline_pb' const timelineKey = 'timeline' const maxTimelineEntries = 1000 -export const useTimeline = (isStreaming: boolean, filters: GetEventsRequest_Filter[], updateIntervalMs = 1000, enabled = true) => { - const client = useClient(ConsoleService) +export const useTimeline = (isStreaming: boolean, filters: GetTimelineRequest_Filter[], updateIntervalMs = 1000, enabled = true) => { + const client = useClient(TimelineService) const queryClient = useQueryClient() const isVisible = useVisibility() - const order = GetEventsRequest_Order.DESC + const order = GetTimelineRequest_Order.DESC const limit = isStreaming ? 200 : 1000 const queryKey = [timelineKey, isStreaming, filters, order, limit] @@ -22,7 +22,7 @@ export const useTimeline = (isStreaming: boolean, filters: GetEventsRequest_Filt const fetchTimeline = async ({ signal }: { signal: AbortSignal }) => { try { console.debug('fetching timeline') - const response = await client.getEvents({ filters, limit, order }, { signal }) + const response = await client.getTimeline({ filters, limit, order }, { signal }) return response.events } catch (error) { if (error instanceof ConnectError) { @@ -42,7 +42,7 @@ export const useTimeline = (isStreaming: boolean, filters: GetEventsRequest_Filt // Clear the cache when starting a new stream queryClient.setQueryData(queryKey, (_ = []) => []) - for await (const response of client.streamEvents( + for await (const response of client.streamTimeline( { updateInterval: { seconds: BigInt(0), nanos: updateIntervalMs * 1000 }, query: { limit, filters, order } }, { signal }, )) { diff --git a/frontend/console/src/features/timeline/Timeline.tsx b/frontend/console/src/features/timeline/Timeline.tsx index 2f8fd2545e..8d76ff3fb0 100644 --- a/frontend/console/src/features/timeline/Timeline.tsx +++ b/frontend/console/src/features/timeline/Timeline.tsx @@ -2,8 +2,8 @@ import { useContext, useEffect, useState } from 'react' import { useSearchParams } from 'react-router-dom' import { timeFilter, useTimeline } from '../../api/timeline/index.ts' import { Loader } from '../../components/Loader.tsx' -import type { GetEventsRequest_Filter } from '../../protos/xyz/block/ftl/console/v1/console_pb.ts' import type { Event } from '../../protos/xyz/block/ftl/timeline/v1/event_pb.ts' +import type { GetTimelineRequest_Filter } from '../../protos/xyz/block/ftl/timeline/v1/timeline_pb.ts' import { SidePanelContext } from '../../providers/side-panel-provider.tsx' import TimelineEventList from './TimelineEventList.tsx' import { TimelineAsyncExecuteDetails } from './details/TimelineAsyncExecuteDetails.tsx' @@ -18,7 +18,7 @@ import { TimelinePubSubConsumeDetails } from './details/TimelinePubSubConsumeDet import { TimelinePubSubPublishDetails } from './details/TimelinePubSubPublishDetails.tsx' import type { TimeSettings } from './filters/TimelineTimeControls.tsx' -export const Timeline = ({ timeSettings, filters }: { timeSettings: TimeSettings; filters: GetEventsRequest_Filter[] }) => { +export const Timeline = ({ timeSettings, filters }: { timeSettings: TimeSettings; filters: GetTimelineRequest_Filter[] }) => { const [searchParams, setSearchParams] = useSearchParams() const { openPanel, closePanel, isOpen } = useContext(SidePanelContext) const [selectedEntry, setSelectedEntry] = useState(null) diff --git a/frontend/console/src/features/timeline/TimelinePage.tsx b/frontend/console/src/features/timeline/TimelinePage.tsx index 1d0b61b7ef..655c4a915c 100644 --- a/frontend/console/src/features/timeline/TimelinePage.tsx +++ b/frontend/console/src/features/timeline/TimelinePage.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' import { useSearchParams } from 'react-router-dom' -import type { GetEventsRequest_Filter } from '../../protos/xyz/block/ftl/console/v1/console_pb' +import type { GetTimelineRequest_Filter } from '../../protos/xyz/block/ftl/timeline/v1/timeline_pb' import { SidePanelProvider } from '../../providers/side-panel-provider' import { Timeline } from './Timeline' import { TimelineFilterPanel } from './filters/TimelineFilterPanel' @@ -9,7 +9,7 @@ import { TIME_RANGES, type TimeSettings, TimelineTimeControls } from './filters/ export const TimelinePage = () => { const [searchParams] = useSearchParams() const [timeSettings, setTimeSettings] = useState({ isTailing: true, isPaused: false }) - const [filters, setFilters] = useState([]) + const [filters, setFilters] = useState([]) const [selectedTimeRange, setSelectedTimeRange] = useState(TIME_RANGES.tail) const [isTimelinePaused, setIsTimelinePaused] = useState(false) @@ -26,7 +26,7 @@ export const TimelinePage = () => { setTimeSettings(settings) } - const handleFiltersChanged = (filters: GetEventsRequest_Filter[]) => { + const handleFiltersChanged = (filters: GetTimelineRequest_Filter[]) => { setFilters(filters) } diff --git a/frontend/console/src/features/timeline/filters/TimelineFilterPanel.tsx b/frontend/console/src/features/timeline/filters/TimelineFilterPanel.tsx index 21432a67e1..44b6ca61e6 100644 --- a/frontend/console/src/features/timeline/filters/TimelineFilterPanel.tsx +++ b/frontend/console/src/features/timeline/filters/TimelineFilterPanel.tsx @@ -3,8 +3,8 @@ import type React from 'react' import { useEffect, useState } from 'react' import { useModules } from '../../../api/modules/use-modules' import { eventTypesFilter, logLevelFilter, modulesFilter } from '../../../api/timeline' -import type { GetEventsRequest_Filter } from '../../../protos/xyz/block/ftl/console/v1/console_pb' import { EventType, LogLevel } from '../../../protos/xyz/block/ftl/timeline/v1/event_pb' +import type { GetTimelineRequest_Filter } from '../../../protos/xyz/block/ftl/timeline/v1/timeline_pb' import { textColor } from '../../../utils' import { LogLevelBadgeSmall } from '../../logs/LogLevelBadgeSmall' import { logLevelBgColor, logLevelColor, logLevelRingColor } from '../../logs/log.utils' @@ -47,7 +47,7 @@ const LOG_LEVELS: Record = { export const TimelineFilterPanel = ({ onFiltersChanged, }: { - onFiltersChanged: (filters: GetEventsRequest_Filter[]) => void + onFiltersChanged: (filters: GetTimelineRequest_Filter[]) => void }) => { const modules = useModules() const [selectedEventTypes, setSelectedEventTypes] = useState(Object.keys(EVENT_TYPES)) @@ -69,7 +69,7 @@ export const TimelineFilterPanel = ({ }, [modules.data]) useEffect(() => { - const filter: GetEventsRequest_Filter[] = [] + const filter: GetTimelineRequest_Filter[] = [] if (selectedEventTypes.length !== Object.keys(EVENT_TYPES).length) { const selectedTypes = selectedEventTypes.map((key) => EVENT_TYPES[key].type) diff --git a/frontend/console/src/protos/xyz/block/ftl/console/v1/console_connect.ts b/frontend/console/src/protos/xyz/block/ftl/console/v1/console_connect.ts index 3b9d727b05..66ed66afc4 100644 --- a/frontend/console/src/protos/xyz/block/ftl/console/v1/console_connect.ts +++ b/frontend/console/src/protos/xyz/block/ftl/console/v1/console_connect.ts @@ -5,7 +5,7 @@ import { PingRequest, PingResponse } from "../../v1/ftl_pb.js"; import { MethodIdempotency, MethodKind } from "@bufbuild/protobuf"; -import { GetConfigRequest, GetConfigResponse, GetEventsRequest, GetEventsResponse, GetModulesRequest, GetModulesResponse, GetSecretRequest, GetSecretResponse, SetConfigRequest, SetConfigResponse, SetSecretRequest, SetSecretResponse, StreamEventsRequest, StreamEventsResponse, StreamModulesRequest, StreamModulesResponse } from "./console_pb.js"; +import { GetConfigRequest, GetConfigResponse, GetModulesRequest, GetModulesResponse, GetSecretRequest, GetSecretResponse, SetConfigRequest, SetConfigResponse, SetSecretRequest, SetSecretResponse, StreamModulesRequest, StreamModulesResponse } from "./console_pb.js"; /** * @generated from service xyz.block.ftl.console.v1.ConsoleService @@ -43,24 +43,6 @@ export const ConsoleService = { O: StreamModulesResponse, kind: MethodKind.ServerStreaming, }, - /** - * @generated from rpc xyz.block.ftl.console.v1.ConsoleService.StreamEvents - */ - streamEvents: { - name: "StreamEvents", - I: StreamEventsRequest, - O: StreamEventsResponse, - kind: MethodKind.ServerStreaming, - }, - /** - * @generated from rpc xyz.block.ftl.console.v1.ConsoleService.GetEvents - */ - getEvents: { - name: "GetEvents", - I: GetEventsRequest, - O: GetEventsResponse, - kind: MethodKind.Unary, - }, /** * @generated from rpc xyz.block.ftl.console.v1.ConsoleService.GetConfig */ diff --git a/frontend/console/src/protos/xyz/block/ftl/console/v1/console_pb.ts b/frontend/console/src/protos/xyz/block/ftl/console/v1/console_pb.ts index a873da066d..b69183f1d1 100644 --- a/frontend/console/src/protos/xyz/block/ftl/console/v1/console_pb.ts +++ b/frontend/console/src/protos/xyz/block/ftl/console/v1/console_pb.ts @@ -4,9 +4,8 @@ // @ts-nocheck import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; -import { Duration, Message, proto3, Timestamp } from "@bufbuild/protobuf"; +import { Message, proto3 } from "@bufbuild/protobuf"; import { Config as Config$1, Data as Data$1, Database as Database$1, Enum as Enum$1, Ref, Secret as Secret$1, Topic as Topic$1, TypeAlias as TypeAlias$1, Verb as Verb$1 } from "../../schema/v1/schema_pb.js"; -import { Event, EventType, LogLevel } from "../../timeline/v1/event_pb.js"; /** * @generated from message xyz.block.ftl.console.v1.Config @@ -695,612 +694,6 @@ export class StreamModulesResponse extends Message { } } -/** - * Query for events. - * - * @generated from message xyz.block.ftl.console.v1.GetEventsRequest - */ -export class GetEventsRequest extends Message { - /** - * @generated from field: repeated xyz.block.ftl.console.v1.GetEventsRequest.Filter filters = 1; - */ - filters: GetEventsRequest_Filter[] = []; - - /** - * @generated from field: int32 limit = 2; - */ - limit = 0; - - /** - * @generated from field: xyz.block.ftl.console.v1.GetEventsRequest.Order order = 3; - */ - order = GetEventsRequest_Order.UNSPECIFIED; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.GetEventsRequest"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "filters", kind: "message", T: GetEventsRequest_Filter, repeated: true }, - { no: 2, name: "limit", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, - { no: 3, name: "order", kind: "enum", T: proto3.getEnumType(GetEventsRequest_Order) }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetEventsRequest { - return new GetEventsRequest().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetEventsRequest { - return new GetEventsRequest().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetEventsRequest { - return new GetEventsRequest().fromJsonString(jsonString, options); - } - - static equals(a: GetEventsRequest | PlainMessage | undefined, b: GetEventsRequest | PlainMessage | undefined): boolean { - return proto3.util.equals(GetEventsRequest, a, b); - } -} - -/** - * @generated from enum xyz.block.ftl.console.v1.GetEventsRequest.Order - */ -export enum GetEventsRequest_Order { - /** - * @generated from enum value: ORDER_UNSPECIFIED = 0; - */ - UNSPECIFIED = 0, - - /** - * @generated from enum value: ORDER_ASC = 1; - */ - ASC = 1, - - /** - * @generated from enum value: ORDER_DESC = 2; - */ - DESC = 2, -} -// Retrieve enum metadata with: proto3.getEnumType(GetEventsRequest_Order) -proto3.util.setEnumType(GetEventsRequest_Order, "xyz.block.ftl.console.v1.GetEventsRequest.Order", [ - { no: 0, name: "ORDER_UNSPECIFIED" }, - { no: 1, name: "ORDER_ASC" }, - { no: 2, name: "ORDER_DESC" }, -]); - -/** - * Limit the number of events returned. - * - * @generated from message xyz.block.ftl.console.v1.GetEventsRequest.LimitFilter - */ -export class GetEventsRequest_LimitFilter extends Message { - /** - * @generated from field: int32 limit = 1; - */ - limit = 0; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.GetEventsRequest.LimitFilter"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "limit", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetEventsRequest_LimitFilter { - return new GetEventsRequest_LimitFilter().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetEventsRequest_LimitFilter { - return new GetEventsRequest_LimitFilter().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetEventsRequest_LimitFilter { - return new GetEventsRequest_LimitFilter().fromJsonString(jsonString, options); - } - - static equals(a: GetEventsRequest_LimitFilter | PlainMessage | undefined, b: GetEventsRequest_LimitFilter | PlainMessage | undefined): boolean { - return proto3.util.equals(GetEventsRequest_LimitFilter, a, b); - } -} - -/** - * Filters events by log level. - * - * @generated from message xyz.block.ftl.console.v1.GetEventsRequest.LogLevelFilter - */ -export class GetEventsRequest_LogLevelFilter extends Message { - /** - * @generated from field: xyz.block.ftl.timeline.v1.LogLevel log_level = 1; - */ - logLevel = LogLevel.UNSPECIFIED; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.GetEventsRequest.LogLevelFilter"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "log_level", kind: "enum", T: proto3.getEnumType(LogLevel) }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetEventsRequest_LogLevelFilter { - return new GetEventsRequest_LogLevelFilter().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetEventsRequest_LogLevelFilter { - return new GetEventsRequest_LogLevelFilter().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetEventsRequest_LogLevelFilter { - return new GetEventsRequest_LogLevelFilter().fromJsonString(jsonString, options); - } - - static equals(a: GetEventsRequest_LogLevelFilter | PlainMessage | undefined, b: GetEventsRequest_LogLevelFilter | PlainMessage | undefined): boolean { - return proto3.util.equals(GetEventsRequest_LogLevelFilter, a, b); - } -} - -/** - * Filters events by deployment key. - * - * @generated from message xyz.block.ftl.console.v1.GetEventsRequest.DeploymentFilter - */ -export class GetEventsRequest_DeploymentFilter extends Message { - /** - * @generated from field: repeated string deployments = 1; - */ - deployments: string[] = []; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.GetEventsRequest.DeploymentFilter"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "deployments", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetEventsRequest_DeploymentFilter { - return new GetEventsRequest_DeploymentFilter().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetEventsRequest_DeploymentFilter { - return new GetEventsRequest_DeploymentFilter().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetEventsRequest_DeploymentFilter { - return new GetEventsRequest_DeploymentFilter().fromJsonString(jsonString, options); - } - - static equals(a: GetEventsRequest_DeploymentFilter | PlainMessage | undefined, b: GetEventsRequest_DeploymentFilter | PlainMessage | undefined): boolean { - return proto3.util.equals(GetEventsRequest_DeploymentFilter, a, b); - } -} - -/** - * Filters events by request key. - * - * @generated from message xyz.block.ftl.console.v1.GetEventsRequest.RequestFilter - */ -export class GetEventsRequest_RequestFilter extends Message { - /** - * @generated from field: repeated string requests = 1; - */ - requests: string[] = []; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.GetEventsRequest.RequestFilter"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "requests", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetEventsRequest_RequestFilter { - return new GetEventsRequest_RequestFilter().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetEventsRequest_RequestFilter { - return new GetEventsRequest_RequestFilter().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetEventsRequest_RequestFilter { - return new GetEventsRequest_RequestFilter().fromJsonString(jsonString, options); - } - - static equals(a: GetEventsRequest_RequestFilter | PlainMessage | undefined, b: GetEventsRequest_RequestFilter | PlainMessage | undefined): boolean { - return proto3.util.equals(GetEventsRequest_RequestFilter, a, b); - } -} - -/** - * Filters events by event type. - * - * @generated from message xyz.block.ftl.console.v1.GetEventsRequest.EventTypeFilter - */ -export class GetEventsRequest_EventTypeFilter extends Message { - /** - * @generated from field: repeated xyz.block.ftl.timeline.v1.EventType event_types = 1; - */ - eventTypes: EventType[] = []; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.GetEventsRequest.EventTypeFilter"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "event_types", kind: "enum", T: proto3.getEnumType(EventType), repeated: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetEventsRequest_EventTypeFilter { - return new GetEventsRequest_EventTypeFilter().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetEventsRequest_EventTypeFilter { - return new GetEventsRequest_EventTypeFilter().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetEventsRequest_EventTypeFilter { - return new GetEventsRequest_EventTypeFilter().fromJsonString(jsonString, options); - } - - static equals(a: GetEventsRequest_EventTypeFilter | PlainMessage | undefined, b: GetEventsRequest_EventTypeFilter | PlainMessage | undefined): boolean { - return proto3.util.equals(GetEventsRequest_EventTypeFilter, a, b); - } -} - -/** - * Filters events by time. - * - * Either end of the time range can be omitted to indicate no bound. - * - * @generated from message xyz.block.ftl.console.v1.GetEventsRequest.TimeFilter - */ -export class GetEventsRequest_TimeFilter extends Message { - /** - * @generated from field: optional google.protobuf.Timestamp older_than = 1; - */ - olderThan?: Timestamp; - - /** - * @generated from field: optional google.protobuf.Timestamp newer_than = 2; - */ - newerThan?: Timestamp; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.GetEventsRequest.TimeFilter"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "older_than", kind: "message", T: Timestamp, opt: true }, - { no: 2, name: "newer_than", kind: "message", T: Timestamp, opt: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetEventsRequest_TimeFilter { - return new GetEventsRequest_TimeFilter().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetEventsRequest_TimeFilter { - return new GetEventsRequest_TimeFilter().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetEventsRequest_TimeFilter { - return new GetEventsRequest_TimeFilter().fromJsonString(jsonString, options); - } - - static equals(a: GetEventsRequest_TimeFilter | PlainMessage | undefined, b: GetEventsRequest_TimeFilter | PlainMessage | undefined): boolean { - return proto3.util.equals(GetEventsRequest_TimeFilter, a, b); - } -} - -/** - * Filters events by ID. - * - * Either end of the ID range can be omitted to indicate no bound. - * - * @generated from message xyz.block.ftl.console.v1.GetEventsRequest.IDFilter - */ -export class GetEventsRequest_IDFilter extends Message { - /** - * @generated from field: optional int64 lower_than = 1; - */ - lowerThan?: bigint; - - /** - * @generated from field: optional int64 higher_than = 2; - */ - higherThan?: bigint; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.GetEventsRequest.IDFilter"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "lower_than", kind: "scalar", T: 3 /* ScalarType.INT64 */, opt: true }, - { no: 2, name: "higher_than", kind: "scalar", T: 3 /* ScalarType.INT64 */, opt: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetEventsRequest_IDFilter { - return new GetEventsRequest_IDFilter().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetEventsRequest_IDFilter { - return new GetEventsRequest_IDFilter().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetEventsRequest_IDFilter { - return new GetEventsRequest_IDFilter().fromJsonString(jsonString, options); - } - - static equals(a: GetEventsRequest_IDFilter | PlainMessage | undefined, b: GetEventsRequest_IDFilter | PlainMessage | undefined): boolean { - return proto3.util.equals(GetEventsRequest_IDFilter, a, b); - } -} - -/** - * Filters events by call. - * - * @generated from message xyz.block.ftl.console.v1.GetEventsRequest.CallFilter - */ -export class GetEventsRequest_CallFilter extends Message { - /** - * @generated from field: string dest_module = 1; - */ - destModule = ""; - - /** - * @generated from field: optional string dest_verb = 2; - */ - destVerb?: string; - - /** - * @generated from field: optional string source_module = 3; - */ - sourceModule?: string; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.GetEventsRequest.CallFilter"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "dest_module", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "dest_verb", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, - { no: 3, name: "source_module", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetEventsRequest_CallFilter { - return new GetEventsRequest_CallFilter().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetEventsRequest_CallFilter { - return new GetEventsRequest_CallFilter().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetEventsRequest_CallFilter { - return new GetEventsRequest_CallFilter().fromJsonString(jsonString, options); - } - - static equals(a: GetEventsRequest_CallFilter | PlainMessage | undefined, b: GetEventsRequest_CallFilter | PlainMessage | undefined): boolean { - return proto3.util.equals(GetEventsRequest_CallFilter, a, b); - } -} - -/** - * @generated from message xyz.block.ftl.console.v1.GetEventsRequest.ModuleFilter - */ -export class GetEventsRequest_ModuleFilter extends Message { - /** - * @generated from field: string module = 1; - */ - module = ""; - - /** - * @generated from field: optional string verb = 2; - */ - verb?: string; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.GetEventsRequest.ModuleFilter"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "module", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "verb", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetEventsRequest_ModuleFilter { - return new GetEventsRequest_ModuleFilter().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetEventsRequest_ModuleFilter { - return new GetEventsRequest_ModuleFilter().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetEventsRequest_ModuleFilter { - return new GetEventsRequest_ModuleFilter().fromJsonString(jsonString, options); - } - - static equals(a: GetEventsRequest_ModuleFilter | PlainMessage | undefined, b: GetEventsRequest_ModuleFilter | PlainMessage | undefined): boolean { - return proto3.util.equals(GetEventsRequest_ModuleFilter, a, b); - } -} - -/** - * @generated from message xyz.block.ftl.console.v1.GetEventsRequest.Filter - */ -export class GetEventsRequest_Filter extends Message { - /** - * These map 1:1 with filters in backend/controller/internal/dal/events.go - * - * @generated from oneof xyz.block.ftl.console.v1.GetEventsRequest.Filter.filter - */ - filter: { - /** - * @generated from field: xyz.block.ftl.console.v1.GetEventsRequest.LimitFilter limit = 1; - */ - value: GetEventsRequest_LimitFilter; - case: "limit"; - } | { - /** - * @generated from field: xyz.block.ftl.console.v1.GetEventsRequest.LogLevelFilter log_level = 2; - */ - value: GetEventsRequest_LogLevelFilter; - case: "logLevel"; - } | { - /** - * @generated from field: xyz.block.ftl.console.v1.GetEventsRequest.DeploymentFilter deployments = 3; - */ - value: GetEventsRequest_DeploymentFilter; - case: "deployments"; - } | { - /** - * @generated from field: xyz.block.ftl.console.v1.GetEventsRequest.RequestFilter requests = 4; - */ - value: GetEventsRequest_RequestFilter; - case: "requests"; - } | { - /** - * @generated from field: xyz.block.ftl.console.v1.GetEventsRequest.EventTypeFilter event_types = 5; - */ - value: GetEventsRequest_EventTypeFilter; - case: "eventTypes"; - } | { - /** - * @generated from field: xyz.block.ftl.console.v1.GetEventsRequest.TimeFilter time = 6; - */ - value: GetEventsRequest_TimeFilter; - case: "time"; - } | { - /** - * @generated from field: xyz.block.ftl.console.v1.GetEventsRequest.IDFilter id = 7; - */ - value: GetEventsRequest_IDFilter; - case: "id"; - } | { - /** - * @generated from field: xyz.block.ftl.console.v1.GetEventsRequest.CallFilter call = 8; - */ - value: GetEventsRequest_CallFilter; - case: "call"; - } | { - /** - * @generated from field: xyz.block.ftl.console.v1.GetEventsRequest.ModuleFilter module = 9; - */ - value: GetEventsRequest_ModuleFilter; - case: "module"; - } | { case: undefined; value?: undefined } = { case: undefined }; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.GetEventsRequest.Filter"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "limit", kind: "message", T: GetEventsRequest_LimitFilter, oneof: "filter" }, - { no: 2, name: "log_level", kind: "message", T: GetEventsRequest_LogLevelFilter, oneof: "filter" }, - { no: 3, name: "deployments", kind: "message", T: GetEventsRequest_DeploymentFilter, oneof: "filter" }, - { no: 4, name: "requests", kind: "message", T: GetEventsRequest_RequestFilter, oneof: "filter" }, - { no: 5, name: "event_types", kind: "message", T: GetEventsRequest_EventTypeFilter, oneof: "filter" }, - { no: 6, name: "time", kind: "message", T: GetEventsRequest_TimeFilter, oneof: "filter" }, - { no: 7, name: "id", kind: "message", T: GetEventsRequest_IDFilter, oneof: "filter" }, - { no: 8, name: "call", kind: "message", T: GetEventsRequest_CallFilter, oneof: "filter" }, - { no: 9, name: "module", kind: "message", T: GetEventsRequest_ModuleFilter, oneof: "filter" }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetEventsRequest_Filter { - return new GetEventsRequest_Filter().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetEventsRequest_Filter { - return new GetEventsRequest_Filter().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetEventsRequest_Filter { - return new GetEventsRequest_Filter().fromJsonString(jsonString, options); - } - - static equals(a: GetEventsRequest_Filter | PlainMessage | undefined, b: GetEventsRequest_Filter | PlainMessage | undefined): boolean { - return proto3.util.equals(GetEventsRequest_Filter, a, b); - } -} - -/** - * @generated from message xyz.block.ftl.console.v1.GetEventsResponse - */ -export class GetEventsResponse extends Message { - /** - * @generated from field: repeated xyz.block.ftl.timeline.v1.Event events = 1; - */ - events: Event[] = []; - - /** - * For pagination, this cursor is where we should start our next query - * - * @generated from field: optional int64 cursor = 2; - */ - cursor?: bigint; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.GetEventsResponse"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "events", kind: "message", T: Event, repeated: true }, - { no: 2, name: "cursor", kind: "scalar", T: 3 /* ScalarType.INT64 */, opt: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetEventsResponse { - return new GetEventsResponse().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetEventsResponse { - return new GetEventsResponse().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetEventsResponse { - return new GetEventsResponse().fromJsonString(jsonString, options); - } - - static equals(a: GetEventsResponse | PlainMessage | undefined, b: GetEventsResponse | PlainMessage | undefined): boolean { - return proto3.util.equals(GetEventsResponse, a, b); - } -} - /** * @generated from message xyz.block.ftl.console.v1.GetConfigRequest */ @@ -1633,83 +1026,3 @@ export class SetSecretResponse extends Message { } } -/** - * @generated from message xyz.block.ftl.console.v1.StreamEventsRequest - */ -export class StreamEventsRequest extends Message { - /** - * @generated from field: optional google.protobuf.Duration update_interval = 1; - */ - updateInterval?: Duration; - - /** - * @generated from field: xyz.block.ftl.console.v1.GetEventsRequest query = 2; - */ - query?: GetEventsRequest; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.StreamEventsRequest"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "update_interval", kind: "message", T: Duration, opt: true }, - { no: 2, name: "query", kind: "message", T: GetEventsRequest }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): StreamEventsRequest { - return new StreamEventsRequest().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): StreamEventsRequest { - return new StreamEventsRequest().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): StreamEventsRequest { - return new StreamEventsRequest().fromJsonString(jsonString, options); - } - - static equals(a: StreamEventsRequest | PlainMessage | undefined, b: StreamEventsRequest | PlainMessage | undefined): boolean { - return proto3.util.equals(StreamEventsRequest, a, b); - } -} - -/** - * @generated from message xyz.block.ftl.console.v1.StreamEventsResponse - */ -export class StreamEventsResponse extends Message { - /** - * @generated from field: repeated xyz.block.ftl.timeline.v1.Event events = 1; - */ - events: Event[] = []; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.console.v1.StreamEventsResponse"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "events", kind: "message", T: Event, repeated: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): StreamEventsResponse { - return new StreamEventsResponse().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): StreamEventsResponse { - return new StreamEventsResponse().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): StreamEventsResponse { - return new StreamEventsResponse().fromJsonString(jsonString, options); - } - - static equals(a: StreamEventsResponse | PlainMessage | undefined, b: StreamEventsResponse | PlainMessage | undefined): boolean { - return proto3.util.equals(StreamEventsResponse, a, b); - } -} - diff --git a/frontend/console/src/protos/xyz/block/ftl/timeline/v1/timeline_connect.ts b/frontend/console/src/protos/xyz/block/ftl/timeline/v1/timeline_connect.ts index 33aa209cd8..69443d210d 100644 --- a/frontend/console/src/protos/xyz/block/ftl/timeline/v1/timeline_connect.ts +++ b/frontend/console/src/protos/xyz/block/ftl/timeline/v1/timeline_connect.ts @@ -5,7 +5,7 @@ import { PingRequest, PingResponse } from "../../v1/ftl_pb.js"; import { MethodIdempotency, MethodKind } from "@bufbuild/protobuf"; -import { CreateEventRequest, CreateEventResponse, DeleteOldEventsRequest, DeleteOldEventsResponse, GetTimelineRequest, GetTimelineResponse } from "./timeline_pb.js"; +import { CreateEventRequest, CreateEventResponse, DeleteOldEventsRequest, DeleteOldEventsResponse, GetTimelineRequest, GetTimelineResponse, StreamTimelineRequest, StreamTimelineResponse } from "./timeline_pb.js"; /** * @generated from service xyz.block.ftl.timeline.v1.TimelineService @@ -26,7 +26,7 @@ export const TimelineService = { idempotency: MethodIdempotency.NoSideEffects, }, /** - * Get timeline events, optionally filtered by type and time + * Get timeline events with filters * * @generated from rpc xyz.block.ftl.timeline.v1.TimelineService.GetTimeline */ @@ -37,6 +37,17 @@ export const TimelineService = { kind: MethodKind.Unary, idempotency: MethodIdempotency.NoSideEffects, }, + /** + * Stream timeline events with filters + * + * @generated from rpc xyz.block.ftl.timeline.v1.TimelineService.StreamTimeline + */ + streamTimeline: { + name: "StreamTimeline", + I: StreamTimelineRequest, + O: StreamTimelineResponse, + kind: MethodKind.ServerStreaming, + }, /** * @generated from rpc xyz.block.ftl.timeline.v1.TimelineService.CreateEvent */ diff --git a/frontend/console/src/protos/xyz/block/ftl/timeline/v1/timeline_pb.ts b/frontend/console/src/protos/xyz/block/ftl/timeline/v1/timeline_pb.ts index e01cce29c7..b318d5f452 100644 --- a/frontend/console/src/protos/xyz/block/ftl/timeline/v1/timeline_pb.ts +++ b/frontend/console/src/protos/xyz/block/ftl/timeline/v1/timeline_pb.ts @@ -4,7 +4,7 @@ // @ts-nocheck import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; -import { Message, proto3, protoInt64, Timestamp } from "@bufbuild/protobuf"; +import { Duration, Message, proto3, protoInt64, Timestamp } from "@bufbuild/protobuf"; import { AsyncExecuteEvent, CallEvent, CronScheduledEvent, DeploymentCreatedEvent, DeploymentUpdatedEvent, Event, EventType, IngressEvent, LogEvent, LogLevel, PubSubConsumeEvent, PubSubPublishEvent } from "./event_pb.js"; /** @@ -82,45 +82,6 @@ proto3.util.setEnumType(GetTimelineRequest_Order, "xyz.block.ftl.timeline.v1.Get { no: 2, name: "ORDER_DESC" }, ]); -/** - * Limit the number of events returned. - * - * @generated from message xyz.block.ftl.timeline.v1.GetTimelineRequest.LimitFilter - */ -export class GetTimelineRequest_LimitFilter extends Message { - /** - * @generated from field: int32 limit = 1; - */ - limit = 0; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.timeline.v1.GetTimelineRequest.LimitFilter"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "limit", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetTimelineRequest_LimitFilter { - return new GetTimelineRequest_LimitFilter().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetTimelineRequest_LimitFilter { - return new GetTimelineRequest_LimitFilter().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetTimelineRequest_LimitFilter { - return new GetTimelineRequest_LimitFilter().fromJsonString(jsonString, options); - } - - static equals(a: GetTimelineRequest_LimitFilter | PlainMessage | undefined, b: GetTimelineRequest_LimitFilter | PlainMessage | undefined): boolean { - return proto3.util.equals(GetTimelineRequest_LimitFilter, a, b); - } -} - /** * Filters events by log level. * @@ -476,55 +437,49 @@ export class GetTimelineRequest_Filter extends Message [ - { no: 1, name: "limit", kind: "message", T: GetTimelineRequest_LimitFilter, oneof: "filter" }, - { no: 2, name: "log_level", kind: "message", T: GetTimelineRequest_LogLevelFilter, oneof: "filter" }, - { no: 3, name: "deployments", kind: "message", T: GetTimelineRequest_DeploymentFilter, oneof: "filter" }, - { no: 4, name: "requests", kind: "message", T: GetTimelineRequest_RequestFilter, oneof: "filter" }, - { no: 5, name: "event_types", kind: "message", T: GetTimelineRequest_EventTypeFilter, oneof: "filter" }, - { no: 6, name: "time", kind: "message", T: GetTimelineRequest_TimeFilter, oneof: "filter" }, - { no: 7, name: "id", kind: "message", T: GetTimelineRequest_IDFilter, oneof: "filter" }, - { no: 8, name: "call", kind: "message", T: GetTimelineRequest_CallFilter, oneof: "filter" }, - { no: 9, name: "module", kind: "message", T: GetTimelineRequest_ModuleFilter, oneof: "filter" }, + { no: 1, name: "log_level", kind: "message", T: GetTimelineRequest_LogLevelFilter, oneof: "filter" }, + { no: 2, name: "deployments", kind: "message", T: GetTimelineRequest_DeploymentFilter, oneof: "filter" }, + { no: 3, name: "requests", kind: "message", T: GetTimelineRequest_RequestFilter, oneof: "filter" }, + { no: 4, name: "event_types", kind: "message", T: GetTimelineRequest_EventTypeFilter, oneof: "filter" }, + { no: 5, name: "time", kind: "message", T: GetTimelineRequest_TimeFilter, oneof: "filter" }, + { no: 6, name: "id", kind: "message", T: GetTimelineRequest_IDFilter, oneof: "filter" }, + { no: 7, name: "call", kind: "message", T: GetTimelineRequest_CallFilter, oneof: "filter" }, + { no: 8, name: "module", kind: "message", T: GetTimelineRequest_ModuleFilter, oneof: "filter" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): GetTimelineRequest_Filter { @@ -575,6 +529,13 @@ export class GetTimelineResponse extends Message { */ events: Event[] = []; + /** + * For pagination, this cursor is where we should start our next query + * + * @generated from field: optional int64 cursor = 2; + */ + cursor?: bigint; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -584,6 +545,7 @@ export class GetTimelineResponse extends Message { static readonly typeName = "xyz.block.ftl.timeline.v1.GetTimelineResponse"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "events", kind: "message", T: Event, repeated: true }, + { no: 2, name: "cursor", kind: "scalar", T: 3 /* ScalarType.INT64 */, opt: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): GetTimelineResponse { @@ -603,6 +565,86 @@ export class GetTimelineResponse extends Message { } } +/** + * @generated from message xyz.block.ftl.timeline.v1.StreamTimelineRequest + */ +export class StreamTimelineRequest extends Message { + /** + * @generated from field: optional google.protobuf.Duration update_interval = 1; + */ + updateInterval?: Duration; + + /** + * @generated from field: xyz.block.ftl.timeline.v1.GetTimelineRequest query = 2; + */ + query?: GetTimelineRequest; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.timeline.v1.StreamTimelineRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "update_interval", kind: "message", T: Duration, opt: true }, + { no: 2, name: "query", kind: "message", T: GetTimelineRequest }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamTimelineRequest { + return new StreamTimelineRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamTimelineRequest { + return new StreamTimelineRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamTimelineRequest { + return new StreamTimelineRequest().fromJsonString(jsonString, options); + } + + static equals(a: StreamTimelineRequest | PlainMessage | undefined, b: StreamTimelineRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamTimelineRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.timeline.v1.StreamTimelineResponse + */ +export class StreamTimelineResponse extends Message { + /** + * @generated from field: repeated xyz.block.ftl.timeline.v1.Event events = 1; + */ + events: Event[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.timeline.v1.StreamTimelineResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "events", kind: "message", T: Event, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamTimelineResponse { + return new StreamTimelineResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamTimelineResponse { + return new StreamTimelineResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamTimelineResponse { + return new StreamTimelineResponse().fromJsonString(jsonString, options); + } + + static equals(a: StreamTimelineResponse | PlainMessage | undefined, b: StreamTimelineResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamTimelineResponse, a, b); + } +} + /** * @generated from message xyz.block.ftl.timeline.v1.CreateEventRequest */ diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/console/v1/console_pb2.py b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/console/v1/console_pb2.py index 877326e7b4..1e987a5105 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/console/v1/console_pb2.py +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/console/v1/console_pb2.py @@ -22,14 +22,11 @@ _sym_db = _symbol_database.Default() -from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from xyz.block.ftl.schema.v1 import schema_pb2 as xyz_dot_block_dot_ftl_dot_schema_dot_v1_dot_schema__pb2 -from xyz.block.ftl.timeline.v1 import event_pb2 as xyz_dot_block_dot_ftl_dot_timeline_dot_v1_dot_event__pb2 from xyz.block.ftl.v1 import ftl_pb2 as xyz_dot_block_dot_ftl_dot_v1_dot_ftl__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&xyz/block/ftl/console/v1/console.proto\x12\x18xyz.block.ftl.console.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a$xyz/block/ftl/schema/v1/schema.proto\x1a%xyz/block/ftl/timeline/v1/event.proto\x1a\x1axyz/block/ftl/v1/ftl.proto\"\x7f\n\x06\x43onfig\x12\x37\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ConfigR\x06\x63onfig\x12<\n\nreferences\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"\x8f\x01\n\x04\x44\x61ta\x12\x31\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.DataR\x04\x64\x61ta\x12\x16\n\x06schema\x18\x02 \x01(\tR\x06schema\x12<\n\nreferences\x18\x03 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"\x87\x01\n\x08\x44\x61tabase\x12=\n\x08\x64\x61tabase\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.DatabaseR\x08\x64\x61tabase\x12<\n\nreferences\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"w\n\x04\x45num\x12\x31\n\x04\x65num\x18\x01 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.EnumR\x04\x65num\x12<\n\nreferences\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"{\n\x05Topic\x12\x34\n\x05topic\x18\x01 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.TopicR\x05topic\x12<\n\nreferences\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"\x8b\x01\n\tTypeAlias\x12@\n\ttypealias\x18\x01 \x01(\x0b\x32\".xyz.block.ftl.schema.v1.TypeAliasR\ttypealias\x12<\n\nreferences\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"\x7f\n\x06Secret\x12\x37\n\x06secret\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.SecretR\x06secret\x12<\n\nreferences\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"\xbf\x01\n\x04Verb\x12\x31\n\x04verb\x18\x01 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.VerbR\x04verb\x12\x16\n\x06schema\x18\x02 \x01(\tR\x06schema\x12.\n\x13json_request_schema\x18\x03 \x01(\tR\x11jsonRequestSchema\x12<\n\nreferences\x18\x04 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"\xd1\x04\n\x06Module\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12%\n\x0e\x64\x65ployment_key\x18\x02 \x01(\tR\rdeploymentKey\x12\x1a\n\x08language\x18\x03 \x01(\tR\x08language\x12\x16\n\x06schema\x18\x04 \x01(\tR\x06schema\x12\x34\n\x05verbs\x18\x05 \x03(\x0b\x32\x1e.xyz.block.ftl.console.v1.VerbR\x05verbs\x12\x32\n\x04\x64\x61ta\x18\x06 \x03(\x0b\x32\x1e.xyz.block.ftl.console.v1.DataR\x04\x64\x61ta\x12:\n\x07secrets\x18\x07 \x03(\x0b\x32 .xyz.block.ftl.console.v1.SecretR\x07secrets\x12:\n\x07\x63onfigs\x18\x08 \x03(\x0b\x32 .xyz.block.ftl.console.v1.ConfigR\x07\x63onfigs\x12@\n\tdatabases\x18\t \x03(\x0b\x32\".xyz.block.ftl.console.v1.DatabaseR\tdatabases\x12\x34\n\x05\x65nums\x18\n \x03(\x0b\x32\x1e.xyz.block.ftl.console.v1.EnumR\x05\x65nums\x12\x37\n\x06topics\x18\x0b \x03(\x0b\x32\x1f.xyz.block.ftl.console.v1.TopicR\x06topics\x12\x45\n\x0btypealiases\x18\x0c \x03(\x0b\x32#.xyz.block.ftl.console.v1.TypeAliasR\x0btypealiases\")\n\rTopologyGroup\x12\x18\n\x07modules\x18\x01 \x03(\tR\x07modules\"K\n\x08Topology\x12?\n\x06levels\x18\x01 \x03(\x0b\x32\'.xyz.block.ftl.console.v1.TopologyGroupR\x06levels\"\x13\n\x11GetModulesRequest\"\x90\x01\n\x12GetModulesResponse\x12:\n\x07modules\x18\x01 \x03(\x0b\x32 .xyz.block.ftl.console.v1.ModuleR\x07modules\x12>\n\x08topology\x18\x02 \x01(\x0b\x32\".xyz.block.ftl.console.v1.TopologyR\x08topology\"\x16\n\x14StreamModulesRequest\"\x93\x01\n\x15StreamModulesResponse\x12:\n\x07modules\x18\x01 \x03(\x0b\x32 .xyz.block.ftl.console.v1.ModuleR\x07modules\x12>\n\x08topology\x18\x02 \x01(\x0b\x32\".xyz.block.ftl.console.v1.TopologyR\x08topology\"\xc5\x0e\n\x10GetEventsRequest\x12K\n\x07\x66ilters\x18\x01 \x03(\x0b\x32\x31.xyz.block.ftl.console.v1.GetEventsRequest.FilterR\x07\x66ilters\x12\x14\n\x05limit\x18\x02 \x01(\x05R\x05limit\x12\x46\n\x05order\x18\x03 \x01(\x0e\x32\x30.xyz.block.ftl.console.v1.GetEventsRequest.OrderR\x05order\x1a#\n\x0bLimitFilter\x12\x14\n\x05limit\x18\x01 \x01(\x05R\x05limit\x1aR\n\x0eLogLevelFilter\x12@\n\tlog_level\x18\x01 \x01(\x0e\x32#.xyz.block.ftl.timeline.v1.LogLevelR\x08logLevel\x1a\x34\n\x10\x44\x65ploymentFilter\x12 \n\x0b\x64\x65ployments\x18\x01 \x03(\tR\x0b\x64\x65ployments\x1a+\n\rRequestFilter\x12\x1a\n\x08requests\x18\x01 \x03(\tR\x08requests\x1aX\n\x0f\x45ventTypeFilter\x12\x45\n\x0b\x65vent_types\x18\x01 \x03(\x0e\x32$.xyz.block.ftl.timeline.v1.EventTypeR\neventTypes\x1a\xaa\x01\n\nTimeFilter\x12>\n\nolder_than\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tolderThan\x88\x01\x01\x12>\n\nnewer_than\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\tnewerThan\x88\x01\x01\x42\r\n\x0b_older_thanB\r\n\x0b_newer_than\x1as\n\x08IDFilter\x12\"\n\nlower_than\x18\x01 \x01(\x03H\x00R\tlowerThan\x88\x01\x01\x12$\n\x0bhigher_than\x18\x02 \x01(\x03H\x01R\nhigherThan\x88\x01\x01\x42\r\n\x0b_lower_thanB\x0e\n\x0c_higher_than\x1a\x99\x01\n\nCallFilter\x12\x1f\n\x0b\x64\x65st_module\x18\x01 \x01(\tR\ndestModule\x12 \n\tdest_verb\x18\x02 \x01(\tH\x00R\x08\x64\x65stVerb\x88\x01\x01\x12(\n\rsource_module\x18\x03 \x01(\tH\x01R\x0csourceModule\x88\x01\x01\x42\x0c\n\n_dest_verbB\x10\n\x0e_source_module\x1aH\n\x0cModuleFilter\x12\x16\n\x06module\x18\x01 \x01(\tR\x06module\x12\x17\n\x04verb\x18\x02 \x01(\tH\x00R\x04verb\x88\x01\x01\x42\x07\n\x05_verb\x1a\x88\x06\n\x06\x46ilter\x12N\n\x05limit\x18\x01 \x01(\x0b\x32\x36.xyz.block.ftl.console.v1.GetEventsRequest.LimitFilterH\x00R\x05limit\x12X\n\tlog_level\x18\x02 \x01(\x0b\x32\x39.xyz.block.ftl.console.v1.GetEventsRequest.LogLevelFilterH\x00R\x08logLevel\x12_\n\x0b\x64\x65ployments\x18\x03 \x01(\x0b\x32;.xyz.block.ftl.console.v1.GetEventsRequest.DeploymentFilterH\x00R\x0b\x64\x65ployments\x12V\n\x08requests\x18\x04 \x01(\x0b\x32\x38.xyz.block.ftl.console.v1.GetEventsRequest.RequestFilterH\x00R\x08requests\x12]\n\x0b\x65vent_types\x18\x05 \x01(\x0b\x32:.xyz.block.ftl.console.v1.GetEventsRequest.EventTypeFilterH\x00R\neventTypes\x12K\n\x04time\x18\x06 \x01(\x0b\x32\x35.xyz.block.ftl.console.v1.GetEventsRequest.TimeFilterH\x00R\x04time\x12\x45\n\x02id\x18\x07 \x01(\x0b\x32\x33.xyz.block.ftl.console.v1.GetEventsRequest.IDFilterH\x00R\x02id\x12K\n\x04\x63\x61ll\x18\x08 \x01(\x0b\x32\x35.xyz.block.ftl.console.v1.GetEventsRequest.CallFilterH\x00R\x04\x63\x61ll\x12Q\n\x06module\x18\t \x01(\x0b\x32\x37.xyz.block.ftl.console.v1.GetEventsRequest.ModuleFilterH\x00R\x06moduleB\x08\n\x06\x66ilter\"=\n\x05Order\x12\x15\n\x11ORDER_UNSPECIFIED\x10\x00\x12\r\n\tORDER_ASC\x10\x01\x12\x0e\n\nORDER_DESC\x10\x02\"u\n\x11GetEventsResponse\x12\x38\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .xyz.block.ftl.timeline.v1.EventR\x06\x65vents\x12\x1b\n\x06\x63ursor\x18\x02 \x01(\x03H\x00R\x06\x63ursor\x88\x01\x01\x42\t\n\x07_cursor\"N\n\x10GetConfigRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1b\n\x06module\x18\x02 \x01(\tH\x00R\x06module\x88\x01\x01\x42\t\n\x07_module\")\n\x11GetConfigResponse\x12\x14\n\x05value\x18\x01 \x01(\x0cR\x05value\"d\n\x10SetConfigRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1b\n\x06module\x18\x02 \x01(\tH\x00R\x06module\x88\x01\x01\x12\x14\n\x05value\x18\x03 \x01(\x0cR\x05valueB\t\n\x07_module\")\n\x11SetConfigResponse\x12\x14\n\x05value\x18\x01 \x01(\x0cR\x05value\"N\n\x10GetSecretRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1b\n\x06module\x18\x02 \x01(\tH\x00R\x06module\x88\x01\x01\x42\t\n\x07_module\")\n\x11GetSecretResponse\x12\x14\n\x05value\x18\x01 \x01(\x0cR\x05value\"d\n\x10SetSecretRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1b\n\x06module\x18\x02 \x01(\tH\x00R\x06module\x88\x01\x01\x12\x14\n\x05value\x18\x03 \x01(\x0cR\x05valueB\t\n\x07_module\")\n\x11SetSecretResponse\x12\x14\n\x05value\x18\x01 \x01(\x0cR\x05value\"\xb4\x01\n\x13StreamEventsRequest\x12G\n\x0fupdate_interval\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x0eupdateInterval\x88\x01\x01\x12@\n\x05query\x18\x02 \x01(\x0b\x32*.xyz.block.ftl.console.v1.GetEventsRequestR\x05queryB\x12\n\x10_update_interval\"P\n\x14StreamEventsResponse\x12\x38\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .xyz.block.ftl.timeline.v1.EventR\x06\x65vents2\xa8\x07\n\x0e\x43onsoleService\x12J\n\x04Ping\x12\x1d.xyz.block.ftl.v1.PingRequest\x1a\x1e.xyz.block.ftl.v1.PingResponse\"\x03\x90\x02\x01\x12g\n\nGetModules\x12+.xyz.block.ftl.console.v1.GetModulesRequest\x1a,.xyz.block.ftl.console.v1.GetModulesResponse\x12r\n\rStreamModules\x12..xyz.block.ftl.console.v1.StreamModulesRequest\x1a/.xyz.block.ftl.console.v1.StreamModulesResponse0\x01\x12o\n\x0cStreamEvents\x12-.xyz.block.ftl.console.v1.StreamEventsRequest\x1a..xyz.block.ftl.console.v1.StreamEventsResponse0\x01\x12\x64\n\tGetEvents\x12*.xyz.block.ftl.console.v1.GetEventsRequest\x1a+.xyz.block.ftl.console.v1.GetEventsResponse\x12\x64\n\tGetConfig\x12*.xyz.block.ftl.console.v1.GetConfigRequest\x1a+.xyz.block.ftl.console.v1.GetConfigResponse\x12\x64\n\tSetConfig\x12*.xyz.block.ftl.console.v1.SetConfigRequest\x1a+.xyz.block.ftl.console.v1.SetConfigResponse\x12\x64\n\tGetSecret\x12*.xyz.block.ftl.console.v1.GetSecretRequest\x1a+.xyz.block.ftl.console.v1.GetSecretResponse\x12\x64\n\tSetSecret\x12*.xyz.block.ftl.console.v1.SetSecretRequest\x1a+.xyz.block.ftl.console.v1.SetSecretResponseBPP\x01ZLgithub.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/console/v1;pbconsoleb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&xyz/block/ftl/console/v1/console.proto\x12\x18xyz.block.ftl.console.v1\x1a$xyz/block/ftl/schema/v1/schema.proto\x1a\x1axyz/block/ftl/v1/ftl.proto\"\x7f\n\x06\x43onfig\x12\x37\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ConfigR\x06\x63onfig\x12<\n\nreferences\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"\x8f\x01\n\x04\x44\x61ta\x12\x31\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.DataR\x04\x64\x61ta\x12\x16\n\x06schema\x18\x02 \x01(\tR\x06schema\x12<\n\nreferences\x18\x03 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"\x87\x01\n\x08\x44\x61tabase\x12=\n\x08\x64\x61tabase\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.DatabaseR\x08\x64\x61tabase\x12<\n\nreferences\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"w\n\x04\x45num\x12\x31\n\x04\x65num\x18\x01 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.EnumR\x04\x65num\x12<\n\nreferences\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"{\n\x05Topic\x12\x34\n\x05topic\x18\x01 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.TopicR\x05topic\x12<\n\nreferences\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"\x8b\x01\n\tTypeAlias\x12@\n\ttypealias\x18\x01 \x01(\x0b\x32\".xyz.block.ftl.schema.v1.TypeAliasR\ttypealias\x12<\n\nreferences\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"\x7f\n\x06Secret\x12\x37\n\x06secret\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.SecretR\x06secret\x12<\n\nreferences\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"\xbf\x01\n\x04Verb\x12\x31\n\x04verb\x18\x01 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.VerbR\x04verb\x12\x16\n\x06schema\x18\x02 \x01(\tR\x06schema\x12.\n\x13json_request_schema\x18\x03 \x01(\tR\x11jsonRequestSchema\x12<\n\nreferences\x18\x04 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\nreferences\"\xd1\x04\n\x06Module\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12%\n\x0e\x64\x65ployment_key\x18\x02 \x01(\tR\rdeploymentKey\x12\x1a\n\x08language\x18\x03 \x01(\tR\x08language\x12\x16\n\x06schema\x18\x04 \x01(\tR\x06schema\x12\x34\n\x05verbs\x18\x05 \x03(\x0b\x32\x1e.xyz.block.ftl.console.v1.VerbR\x05verbs\x12\x32\n\x04\x64\x61ta\x18\x06 \x03(\x0b\x32\x1e.xyz.block.ftl.console.v1.DataR\x04\x64\x61ta\x12:\n\x07secrets\x18\x07 \x03(\x0b\x32 .xyz.block.ftl.console.v1.SecretR\x07secrets\x12:\n\x07\x63onfigs\x18\x08 \x03(\x0b\x32 .xyz.block.ftl.console.v1.ConfigR\x07\x63onfigs\x12@\n\tdatabases\x18\t \x03(\x0b\x32\".xyz.block.ftl.console.v1.DatabaseR\tdatabases\x12\x34\n\x05\x65nums\x18\n \x03(\x0b\x32\x1e.xyz.block.ftl.console.v1.EnumR\x05\x65nums\x12\x37\n\x06topics\x18\x0b \x03(\x0b\x32\x1f.xyz.block.ftl.console.v1.TopicR\x06topics\x12\x45\n\x0btypealiases\x18\x0c \x03(\x0b\x32#.xyz.block.ftl.console.v1.TypeAliasR\x0btypealiases\")\n\rTopologyGroup\x12\x18\n\x07modules\x18\x01 \x03(\tR\x07modules\"K\n\x08Topology\x12?\n\x06levels\x18\x01 \x03(\x0b\x32\'.xyz.block.ftl.console.v1.TopologyGroupR\x06levels\"\x13\n\x11GetModulesRequest\"\x90\x01\n\x12GetModulesResponse\x12:\n\x07modules\x18\x01 \x03(\x0b\x32 .xyz.block.ftl.console.v1.ModuleR\x07modules\x12>\n\x08topology\x18\x02 \x01(\x0b\x32\".xyz.block.ftl.console.v1.TopologyR\x08topology\"\x16\n\x14StreamModulesRequest\"\x93\x01\n\x15StreamModulesResponse\x12:\n\x07modules\x18\x01 \x03(\x0b\x32 .xyz.block.ftl.console.v1.ModuleR\x07modules\x12>\n\x08topology\x18\x02 \x01(\x0b\x32\".xyz.block.ftl.console.v1.TopologyR\x08topology\"N\n\x10GetConfigRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1b\n\x06module\x18\x02 \x01(\tH\x00R\x06module\x88\x01\x01\x42\t\n\x07_module\")\n\x11GetConfigResponse\x12\x14\n\x05value\x18\x01 \x01(\x0cR\x05value\"d\n\x10SetConfigRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1b\n\x06module\x18\x02 \x01(\tH\x00R\x06module\x88\x01\x01\x12\x14\n\x05value\x18\x03 \x01(\x0cR\x05valueB\t\n\x07_module\")\n\x11SetConfigResponse\x12\x14\n\x05value\x18\x01 \x01(\x0cR\x05value\"N\n\x10GetSecretRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1b\n\x06module\x18\x02 \x01(\tH\x00R\x06module\x88\x01\x01\x42\t\n\x07_module\")\n\x11GetSecretResponse\x12\x14\n\x05value\x18\x01 \x01(\x0cR\x05value\"d\n\x10SetSecretRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1b\n\x06module\x18\x02 \x01(\tH\x00R\x06module\x88\x01\x01\x12\x14\n\x05value\x18\x03 \x01(\x0cR\x05valueB\t\n\x07_module\")\n\x11SetSecretResponse\x12\x14\n\x05value\x18\x01 \x01(\x0cR\x05value2\xd1\x05\n\x0e\x43onsoleService\x12J\n\x04Ping\x12\x1d.xyz.block.ftl.v1.PingRequest\x1a\x1e.xyz.block.ftl.v1.PingResponse\"\x03\x90\x02\x01\x12g\n\nGetModules\x12+.xyz.block.ftl.console.v1.GetModulesRequest\x1a,.xyz.block.ftl.console.v1.GetModulesResponse\x12r\n\rStreamModules\x12..xyz.block.ftl.console.v1.StreamModulesRequest\x1a/.xyz.block.ftl.console.v1.StreamModulesResponse0\x01\x12\x64\n\tGetConfig\x12*.xyz.block.ftl.console.v1.GetConfigRequest\x1a+.xyz.block.ftl.console.v1.GetConfigResponse\x12\x64\n\tSetConfig\x12*.xyz.block.ftl.console.v1.SetConfigRequest\x1a+.xyz.block.ftl.console.v1.SetConfigResponse\x12\x64\n\tGetSecret\x12*.xyz.block.ftl.console.v1.GetSecretRequest\x1a+.xyz.block.ftl.console.v1.GetSecretResponse\x12\x64\n\tSetSecret\x12*.xyz.block.ftl.console.v1.SetSecretRequest\x1a+.xyz.block.ftl.console.v1.SetSecretResponseBPP\x01ZLgithub.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/console/v1;pbconsoleb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -39,82 +36,52 @@ _globals['DESCRIPTOR']._serialized_options = b'P\001ZLgithub.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/console/v1;pbconsole' _globals['_CONSOLESERVICE'].methods_by_name['Ping']._loaded_options = None _globals['_CONSOLESERVICE'].methods_by_name['Ping']._serialized_options = b'\220\002\001' - _globals['_CONFIG']._serialized_start=238 - _globals['_CONFIG']._serialized_end=365 - _globals['_DATA']._serialized_start=368 - _globals['_DATA']._serialized_end=511 - _globals['_DATABASE']._serialized_start=514 - _globals['_DATABASE']._serialized_end=649 - _globals['_ENUM']._serialized_start=651 - _globals['_ENUM']._serialized_end=770 - _globals['_TOPIC']._serialized_start=772 - _globals['_TOPIC']._serialized_end=895 - _globals['_TYPEALIAS']._serialized_start=898 - _globals['_TYPEALIAS']._serialized_end=1037 - _globals['_SECRET']._serialized_start=1039 - _globals['_SECRET']._serialized_end=1166 - _globals['_VERB']._serialized_start=1169 - _globals['_VERB']._serialized_end=1360 - _globals['_MODULE']._serialized_start=1363 - _globals['_MODULE']._serialized_end=1956 - _globals['_TOPOLOGYGROUP']._serialized_start=1958 - _globals['_TOPOLOGYGROUP']._serialized_end=1999 - _globals['_TOPOLOGY']._serialized_start=2001 - _globals['_TOPOLOGY']._serialized_end=2076 - _globals['_GETMODULESREQUEST']._serialized_start=2078 - _globals['_GETMODULESREQUEST']._serialized_end=2097 - _globals['_GETMODULESRESPONSE']._serialized_start=2100 - _globals['_GETMODULESRESPONSE']._serialized_end=2244 - _globals['_STREAMMODULESREQUEST']._serialized_start=2246 - _globals['_STREAMMODULESREQUEST']._serialized_end=2268 - _globals['_STREAMMODULESRESPONSE']._serialized_start=2271 - _globals['_STREAMMODULESRESPONSE']._serialized_end=2418 - _globals['_GETEVENTSREQUEST']._serialized_start=2421 - _globals['_GETEVENTSREQUEST']._serialized_end=4282 - _globals['_GETEVENTSREQUEST_LIMITFILTER']._serialized_start=2612 - _globals['_GETEVENTSREQUEST_LIMITFILTER']._serialized_end=2647 - _globals['_GETEVENTSREQUEST_LOGLEVELFILTER']._serialized_start=2649 - _globals['_GETEVENTSREQUEST_LOGLEVELFILTER']._serialized_end=2731 - _globals['_GETEVENTSREQUEST_DEPLOYMENTFILTER']._serialized_start=2733 - _globals['_GETEVENTSREQUEST_DEPLOYMENTFILTER']._serialized_end=2785 - _globals['_GETEVENTSREQUEST_REQUESTFILTER']._serialized_start=2787 - _globals['_GETEVENTSREQUEST_REQUESTFILTER']._serialized_end=2830 - _globals['_GETEVENTSREQUEST_EVENTTYPEFILTER']._serialized_start=2832 - _globals['_GETEVENTSREQUEST_EVENTTYPEFILTER']._serialized_end=2920 - _globals['_GETEVENTSREQUEST_TIMEFILTER']._serialized_start=2923 - _globals['_GETEVENTSREQUEST_TIMEFILTER']._serialized_end=3093 - _globals['_GETEVENTSREQUEST_IDFILTER']._serialized_start=3095 - _globals['_GETEVENTSREQUEST_IDFILTER']._serialized_end=3210 - _globals['_GETEVENTSREQUEST_CALLFILTER']._serialized_start=3213 - _globals['_GETEVENTSREQUEST_CALLFILTER']._serialized_end=3366 - _globals['_GETEVENTSREQUEST_MODULEFILTER']._serialized_start=3368 - _globals['_GETEVENTSREQUEST_MODULEFILTER']._serialized_end=3440 - _globals['_GETEVENTSREQUEST_FILTER']._serialized_start=3443 - _globals['_GETEVENTSREQUEST_FILTER']._serialized_end=4219 - _globals['_GETEVENTSREQUEST_ORDER']._serialized_start=4221 - _globals['_GETEVENTSREQUEST_ORDER']._serialized_end=4282 - _globals['_GETEVENTSRESPONSE']._serialized_start=4284 - _globals['_GETEVENTSRESPONSE']._serialized_end=4401 - _globals['_GETCONFIGREQUEST']._serialized_start=4403 - _globals['_GETCONFIGREQUEST']._serialized_end=4481 - _globals['_GETCONFIGRESPONSE']._serialized_start=4483 - _globals['_GETCONFIGRESPONSE']._serialized_end=4524 - _globals['_SETCONFIGREQUEST']._serialized_start=4526 - _globals['_SETCONFIGREQUEST']._serialized_end=4626 - _globals['_SETCONFIGRESPONSE']._serialized_start=4628 - _globals['_SETCONFIGRESPONSE']._serialized_end=4669 - _globals['_GETSECRETREQUEST']._serialized_start=4671 - _globals['_GETSECRETREQUEST']._serialized_end=4749 - _globals['_GETSECRETRESPONSE']._serialized_start=4751 - _globals['_GETSECRETRESPONSE']._serialized_end=4792 - _globals['_SETSECRETREQUEST']._serialized_start=4794 - _globals['_SETSECRETREQUEST']._serialized_end=4894 - _globals['_SETSECRETRESPONSE']._serialized_start=4896 - _globals['_SETSECRETRESPONSE']._serialized_end=4937 - _globals['_STREAMEVENTSREQUEST']._serialized_start=4940 - _globals['_STREAMEVENTSREQUEST']._serialized_end=5120 - _globals['_STREAMEVENTSRESPONSE']._serialized_start=5122 - _globals['_STREAMEVENTSRESPONSE']._serialized_end=5202 - _globals['_CONSOLESERVICE']._serialized_start=5205 - _globals['_CONSOLESERVICE']._serialized_end=6141 + _globals['_CONFIG']._serialized_start=134 + _globals['_CONFIG']._serialized_end=261 + _globals['_DATA']._serialized_start=264 + _globals['_DATA']._serialized_end=407 + _globals['_DATABASE']._serialized_start=410 + _globals['_DATABASE']._serialized_end=545 + _globals['_ENUM']._serialized_start=547 + _globals['_ENUM']._serialized_end=666 + _globals['_TOPIC']._serialized_start=668 + _globals['_TOPIC']._serialized_end=791 + _globals['_TYPEALIAS']._serialized_start=794 + _globals['_TYPEALIAS']._serialized_end=933 + _globals['_SECRET']._serialized_start=935 + _globals['_SECRET']._serialized_end=1062 + _globals['_VERB']._serialized_start=1065 + _globals['_VERB']._serialized_end=1256 + _globals['_MODULE']._serialized_start=1259 + _globals['_MODULE']._serialized_end=1852 + _globals['_TOPOLOGYGROUP']._serialized_start=1854 + _globals['_TOPOLOGYGROUP']._serialized_end=1895 + _globals['_TOPOLOGY']._serialized_start=1897 + _globals['_TOPOLOGY']._serialized_end=1972 + _globals['_GETMODULESREQUEST']._serialized_start=1974 + _globals['_GETMODULESREQUEST']._serialized_end=1993 + _globals['_GETMODULESRESPONSE']._serialized_start=1996 + _globals['_GETMODULESRESPONSE']._serialized_end=2140 + _globals['_STREAMMODULESREQUEST']._serialized_start=2142 + _globals['_STREAMMODULESREQUEST']._serialized_end=2164 + _globals['_STREAMMODULESRESPONSE']._serialized_start=2167 + _globals['_STREAMMODULESRESPONSE']._serialized_end=2314 + _globals['_GETCONFIGREQUEST']._serialized_start=2316 + _globals['_GETCONFIGREQUEST']._serialized_end=2394 + _globals['_GETCONFIGRESPONSE']._serialized_start=2396 + _globals['_GETCONFIGRESPONSE']._serialized_end=2437 + _globals['_SETCONFIGREQUEST']._serialized_start=2439 + _globals['_SETCONFIGREQUEST']._serialized_end=2539 + _globals['_SETCONFIGRESPONSE']._serialized_start=2541 + _globals['_SETCONFIGRESPONSE']._serialized_end=2582 + _globals['_GETSECRETREQUEST']._serialized_start=2584 + _globals['_GETSECRETREQUEST']._serialized_end=2662 + _globals['_GETSECRETRESPONSE']._serialized_start=2664 + _globals['_GETSECRETRESPONSE']._serialized_end=2705 + _globals['_SETSECRETREQUEST']._serialized_start=2707 + _globals['_SETSECRETREQUEST']._serialized_end=2807 + _globals['_SETSECRETRESPONSE']._serialized_start=2809 + _globals['_SETSECRETRESPONSE']._serialized_end=2850 + _globals['_CONSOLESERVICE']._serialized_start=2853 + _globals['_CONSOLESERVICE']._serialized_end=3574 # @@protoc_insertion_point(module_scope) diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/console/v1/console_pb2.pyi b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/console/v1/console_pb2.pyi index bfdc28ce4c..c9f9dd19a1 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/console/v1/console_pb2.pyi +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/console/v1/console_pb2.pyi @@ -1,10 +1,6 @@ -from google.protobuf import duration_pb2 as _duration_pb2 -from google.protobuf import timestamp_pb2 as _timestamp_pb2 from xyz.block.ftl.schema.v1 import schema_pb2 as _schema_pb2 -from xyz.block.ftl.timeline.v1 import event_pb2 as _event_pb2 from xyz.block.ftl.v1 import ftl_pb2 as _ftl_pb2 from google.protobuf.internal import containers as _containers -from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union @@ -145,108 +141,6 @@ class StreamModulesResponse(_message.Message): topology: Topology def __init__(self, modules: _Optional[_Iterable[_Union[Module, _Mapping]]] = ..., topology: _Optional[_Union[Topology, _Mapping]] = ...) -> None: ... -class GetEventsRequest(_message.Message): - __slots__ = ("filters", "limit", "order") - class Order(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - ORDER_UNSPECIFIED: _ClassVar[GetEventsRequest.Order] - ORDER_ASC: _ClassVar[GetEventsRequest.Order] - ORDER_DESC: _ClassVar[GetEventsRequest.Order] - ORDER_UNSPECIFIED: GetEventsRequest.Order - ORDER_ASC: GetEventsRequest.Order - ORDER_DESC: GetEventsRequest.Order - class LimitFilter(_message.Message): - __slots__ = ("limit",) - LIMIT_FIELD_NUMBER: _ClassVar[int] - limit: int - def __init__(self, limit: _Optional[int] = ...) -> None: ... - class LogLevelFilter(_message.Message): - __slots__ = ("log_level",) - LOG_LEVEL_FIELD_NUMBER: _ClassVar[int] - log_level: _event_pb2.LogLevel - def __init__(self, log_level: _Optional[_Union[_event_pb2.LogLevel, str]] = ...) -> None: ... - class DeploymentFilter(_message.Message): - __slots__ = ("deployments",) - DEPLOYMENTS_FIELD_NUMBER: _ClassVar[int] - deployments: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, deployments: _Optional[_Iterable[str]] = ...) -> None: ... - class RequestFilter(_message.Message): - __slots__ = ("requests",) - REQUESTS_FIELD_NUMBER: _ClassVar[int] - requests: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, requests: _Optional[_Iterable[str]] = ...) -> None: ... - class EventTypeFilter(_message.Message): - __slots__ = ("event_types",) - EVENT_TYPES_FIELD_NUMBER: _ClassVar[int] - event_types: _containers.RepeatedScalarFieldContainer[_event_pb2.EventType] - def __init__(self, event_types: _Optional[_Iterable[_Union[_event_pb2.EventType, str]]] = ...) -> None: ... - class TimeFilter(_message.Message): - __slots__ = ("older_than", "newer_than") - OLDER_THAN_FIELD_NUMBER: _ClassVar[int] - NEWER_THAN_FIELD_NUMBER: _ClassVar[int] - older_than: _timestamp_pb2.Timestamp - newer_than: _timestamp_pb2.Timestamp - def __init__(self, older_than: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., newer_than: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... - class IDFilter(_message.Message): - __slots__ = ("lower_than", "higher_than") - LOWER_THAN_FIELD_NUMBER: _ClassVar[int] - HIGHER_THAN_FIELD_NUMBER: _ClassVar[int] - lower_than: int - higher_than: int - def __init__(self, lower_than: _Optional[int] = ..., higher_than: _Optional[int] = ...) -> None: ... - class CallFilter(_message.Message): - __slots__ = ("dest_module", "dest_verb", "source_module") - DEST_MODULE_FIELD_NUMBER: _ClassVar[int] - DEST_VERB_FIELD_NUMBER: _ClassVar[int] - SOURCE_MODULE_FIELD_NUMBER: _ClassVar[int] - dest_module: str - dest_verb: str - source_module: str - def __init__(self, dest_module: _Optional[str] = ..., dest_verb: _Optional[str] = ..., source_module: _Optional[str] = ...) -> None: ... - class ModuleFilter(_message.Message): - __slots__ = ("module", "verb") - MODULE_FIELD_NUMBER: _ClassVar[int] - VERB_FIELD_NUMBER: _ClassVar[int] - module: str - verb: str - def __init__(self, module: _Optional[str] = ..., verb: _Optional[str] = ...) -> None: ... - class Filter(_message.Message): - __slots__ = ("limit", "log_level", "deployments", "requests", "event_types", "time", "id", "call", "module") - LIMIT_FIELD_NUMBER: _ClassVar[int] - LOG_LEVEL_FIELD_NUMBER: _ClassVar[int] - DEPLOYMENTS_FIELD_NUMBER: _ClassVar[int] - REQUESTS_FIELD_NUMBER: _ClassVar[int] - EVENT_TYPES_FIELD_NUMBER: _ClassVar[int] - TIME_FIELD_NUMBER: _ClassVar[int] - ID_FIELD_NUMBER: _ClassVar[int] - CALL_FIELD_NUMBER: _ClassVar[int] - MODULE_FIELD_NUMBER: _ClassVar[int] - limit: GetEventsRequest.LimitFilter - log_level: GetEventsRequest.LogLevelFilter - deployments: GetEventsRequest.DeploymentFilter - requests: GetEventsRequest.RequestFilter - event_types: GetEventsRequest.EventTypeFilter - time: GetEventsRequest.TimeFilter - id: GetEventsRequest.IDFilter - call: GetEventsRequest.CallFilter - module: GetEventsRequest.ModuleFilter - def __init__(self, limit: _Optional[_Union[GetEventsRequest.LimitFilter, _Mapping]] = ..., log_level: _Optional[_Union[GetEventsRequest.LogLevelFilter, _Mapping]] = ..., deployments: _Optional[_Union[GetEventsRequest.DeploymentFilter, _Mapping]] = ..., requests: _Optional[_Union[GetEventsRequest.RequestFilter, _Mapping]] = ..., event_types: _Optional[_Union[GetEventsRequest.EventTypeFilter, _Mapping]] = ..., time: _Optional[_Union[GetEventsRequest.TimeFilter, _Mapping]] = ..., id: _Optional[_Union[GetEventsRequest.IDFilter, _Mapping]] = ..., call: _Optional[_Union[GetEventsRequest.CallFilter, _Mapping]] = ..., module: _Optional[_Union[GetEventsRequest.ModuleFilter, _Mapping]] = ...) -> None: ... - FILTERS_FIELD_NUMBER: _ClassVar[int] - LIMIT_FIELD_NUMBER: _ClassVar[int] - ORDER_FIELD_NUMBER: _ClassVar[int] - filters: _containers.RepeatedCompositeFieldContainer[GetEventsRequest.Filter] - limit: int - order: GetEventsRequest.Order - def __init__(self, filters: _Optional[_Iterable[_Union[GetEventsRequest.Filter, _Mapping]]] = ..., limit: _Optional[int] = ..., order: _Optional[_Union[GetEventsRequest.Order, str]] = ...) -> None: ... - -class GetEventsResponse(_message.Message): - __slots__ = ("events", "cursor") - EVENTS_FIELD_NUMBER: _ClassVar[int] - CURSOR_FIELD_NUMBER: _ClassVar[int] - events: _containers.RepeatedCompositeFieldContainer[_event_pb2.Event] - cursor: int - def __init__(self, events: _Optional[_Iterable[_Union[_event_pb2.Event, _Mapping]]] = ..., cursor: _Optional[int] = ...) -> None: ... - class GetConfigRequest(_message.Message): __slots__ = ("name", "module") NAME_FIELD_NUMBER: _ClassVar[int] @@ -306,17 +200,3 @@ class SetSecretResponse(_message.Message): VALUE_FIELD_NUMBER: _ClassVar[int] value: bytes def __init__(self, value: _Optional[bytes] = ...) -> None: ... - -class StreamEventsRequest(_message.Message): - __slots__ = ("update_interval", "query") - UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int] - QUERY_FIELD_NUMBER: _ClassVar[int] - update_interval: _duration_pb2.Duration - query: GetEventsRequest - def __init__(self, update_interval: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., query: _Optional[_Union[GetEventsRequest, _Mapping]] = ...) -> None: ... - -class StreamEventsResponse(_message.Message): - __slots__ = ("events",) - EVENTS_FIELD_NUMBER: _ClassVar[int] - events: _containers.RepeatedCompositeFieldContainer[_event_pb2.Event] - def __init__(self, events: _Optional[_Iterable[_Union[_event_pb2.Event, _Mapping]]] = ...) -> None: ... diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/timeline/v1/timeline_pb2.py b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/timeline/v1/timeline_pb2.py index 1ea2e1fee6..e11ff02f49 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/timeline/v1/timeline_pb2.py +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/timeline/v1/timeline_pb2.py @@ -22,12 +22,13 @@ _sym_db = _symbol_database.Default() +from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from xyz.block.ftl.timeline.v1 import event_pb2 as xyz_dot_block_dot_ftl_dot_timeline_dot_v1_dot_event__pb2 from xyz.block.ftl.v1 import ftl_pb2 as xyz_dot_block_dot_ftl_dot_v1_dot_ftl__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(xyz/block/ftl/timeline/v1/timeline.proto\x12\x19xyz.block.ftl.timeline.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a%xyz/block/ftl/timeline/v1/event.proto\x1a\x1axyz/block/ftl/v1/ftl.proto\"\xe8\x0e\n\x12GetTimelineRequest\x12N\n\x07\x66ilters\x18\x01 \x03(\x0b\x32\x34.xyz.block.ftl.timeline.v1.GetTimelineRequest.FilterR\x07\x66ilters\x12\x14\n\x05limit\x18\x02 \x01(\x05R\x05limit\x12I\n\x05order\x18\x03 \x01(\x0e\x32\x33.xyz.block.ftl.timeline.v1.GetTimelineRequest.OrderR\x05order\x1a#\n\x0bLimitFilter\x12\x14\n\x05limit\x18\x01 \x01(\x05R\x05limit\x1aR\n\x0eLogLevelFilter\x12@\n\tlog_level\x18\x01 \x01(\x0e\x32#.xyz.block.ftl.timeline.v1.LogLevelR\x08logLevel\x1a\x34\n\x10\x44\x65ploymentFilter\x12 \n\x0b\x64\x65ployments\x18\x01 \x03(\tR\x0b\x64\x65ployments\x1a+\n\rRequestFilter\x12\x1a\n\x08requests\x18\x01 \x03(\tR\x08requests\x1aX\n\x0f\x45ventTypeFilter\x12\x45\n\x0b\x65vent_types\x18\x01 \x03(\x0e\x32$.xyz.block.ftl.timeline.v1.EventTypeR\neventTypes\x1a\xaa\x01\n\nTimeFilter\x12>\n\nolder_than\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tolderThan\x88\x01\x01\x12>\n\nnewer_than\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\tnewerThan\x88\x01\x01\x42\r\n\x0b_older_thanB\r\n\x0b_newer_than\x1as\n\x08IDFilter\x12\"\n\nlower_than\x18\x01 \x01(\x03H\x00R\tlowerThan\x88\x01\x01\x12$\n\x0bhigher_than\x18\x02 \x01(\x03H\x01R\nhigherThan\x88\x01\x01\x42\r\n\x0b_lower_thanB\x0e\n\x0c_higher_than\x1a\x99\x01\n\nCallFilter\x12\x1f\n\x0b\x64\x65st_module\x18\x01 \x01(\tR\ndestModule\x12 \n\tdest_verb\x18\x02 \x01(\tH\x00R\x08\x64\x65stVerb\x88\x01\x01\x12(\n\rsource_module\x18\x03 \x01(\tH\x01R\x0csourceModule\x88\x01\x01\x42\x0c\n\n_dest_verbB\x10\n\x0e_source_module\x1aH\n\x0cModuleFilter\x12\x16\n\x06module\x18\x01 \x01(\tR\x06module\x12\x17\n\x04verb\x18\x02 \x01(\tH\x00R\x04verb\x88\x01\x01\x42\x07\n\x05_verb\x1a\xa3\x06\n\x06\x46ilter\x12Q\n\x05limit\x18\x01 \x01(\x0b\x32\x39.xyz.block.ftl.timeline.v1.GetTimelineRequest.LimitFilterH\x00R\x05limit\x12[\n\tlog_level\x18\x02 \x01(\x0b\x32<.xyz.block.ftl.timeline.v1.GetTimelineRequest.LogLevelFilterH\x00R\x08logLevel\x12\x62\n\x0b\x64\x65ployments\x18\x03 \x01(\x0b\x32>.xyz.block.ftl.timeline.v1.GetTimelineRequest.DeploymentFilterH\x00R\x0b\x64\x65ployments\x12Y\n\x08requests\x18\x04 \x01(\x0b\x32;.xyz.block.ftl.timeline.v1.GetTimelineRequest.RequestFilterH\x00R\x08requests\x12`\n\x0b\x65vent_types\x18\x05 \x01(\x0b\x32=.xyz.block.ftl.timeline.v1.GetTimelineRequest.EventTypeFilterH\x00R\neventTypes\x12N\n\x04time\x18\x06 \x01(\x0b\x32\x38.xyz.block.ftl.timeline.v1.GetTimelineRequest.TimeFilterH\x00R\x04time\x12H\n\x02id\x18\x07 \x01(\x0b\x32\x36.xyz.block.ftl.timeline.v1.GetTimelineRequest.IDFilterH\x00R\x02id\x12N\n\x04\x63\x61ll\x18\x08 \x01(\x0b\x32\x38.xyz.block.ftl.timeline.v1.GetTimelineRequest.CallFilterH\x00R\x04\x63\x61ll\x12T\n\x06module\x18\t \x01(\x0b\x32:.xyz.block.ftl.timeline.v1.GetTimelineRequest.ModuleFilterH\x00R\x06moduleB\x08\n\x06\x66ilter\"=\n\x05Order\x12\x15\n\x11ORDER_UNSPECIFIED\x10\x00\x12\r\n\tORDER_ASC\x10\x01\x12\x0e\n\nORDER_DESC\x10\x02\"O\n\x13GetTimelineResponse\x12\x38\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .xyz.block.ftl.timeline.v1.EventR\x06\x65vents\"\xfc\x05\n\x12\x43reateEventRequest\x12\x37\n\x03log\x18\x01 \x01(\x0b\x32#.xyz.block.ftl.timeline.v1.LogEventH\x00R\x03log\x12:\n\x04\x63\x61ll\x18\x02 \x01(\x0b\x32$.xyz.block.ftl.timeline.v1.CallEventH\x00R\x04\x63\x61ll\x12\x62\n\x12\x64\x65ployment_created\x18\x03 \x01(\x0b\x32\x31.xyz.block.ftl.timeline.v1.DeploymentCreatedEventH\x00R\x11\x64\x65ploymentCreated\x12\x62\n\x12\x64\x65ployment_updated\x18\x04 \x01(\x0b\x32\x31.xyz.block.ftl.timeline.v1.DeploymentUpdatedEventH\x00R\x11\x64\x65ploymentUpdated\x12\x43\n\x07ingress\x18\x05 \x01(\x0b\x32\'.xyz.block.ftl.timeline.v1.IngressEventH\x00R\x07ingress\x12V\n\x0e\x63ron_scheduled\x18\x06 \x01(\x0b\x32-.xyz.block.ftl.timeline.v1.CronScheduledEventH\x00R\rcronScheduled\x12S\n\rasync_execute\x18\x07 \x01(\x0b\x32,.xyz.block.ftl.timeline.v1.AsyncExecuteEventH\x00R\x0c\x61syncExecute\x12V\n\x0epubsub_publish\x18\x08 \x01(\x0b\x32-.xyz.block.ftl.timeline.v1.PubSubPublishEventH\x00R\rpubsubPublish\x12V\n\x0epubsub_consume\x18\t \x01(\x0b\x32-.xyz.block.ftl.timeline.v1.PubSubConsumeEventH\x00R\rpubsubConsumeB\x07\n\x05\x65ntry\"\x15\n\x13\x43reateEventResponse\"~\n\x16\x44\x65leteOldEventsRequest\x12\x43\n\nevent_type\x18\x01 \x01(\x0e\x32$.xyz.block.ftl.timeline.v1.EventTypeR\teventType\x12\x1f\n\x0b\x61ge_seconds\x18\x02 \x01(\x03R\nageSeconds\">\n\x17\x44\x65leteOldEventsResponse\x12#\n\rdeleted_count\x18\x01 \x01(\x03R\x0c\x64\x65letedCount2\xbc\x03\n\x0fTimelineService\x12J\n\x04Ping\x12\x1d.xyz.block.ftl.v1.PingRequest\x1a\x1e.xyz.block.ftl.v1.PingResponse\"\x03\x90\x02\x01\x12q\n\x0bGetTimeline\x12-.xyz.block.ftl.timeline.v1.GetTimelineRequest\x1a..xyz.block.ftl.timeline.v1.GetTimelineResponse\"\x03\x90\x02\x01\x12n\n\x0b\x43reateEvent\x12-.xyz.block.ftl.timeline.v1.CreateEventRequest\x1a..xyz.block.ftl.timeline.v1.CreateEventResponse\"\x00\x12z\n\x0f\x44\x65leteOldEvents\x12\x31.xyz.block.ftl.timeline.v1.DeleteOldEventsRequest\x1a\x32.xyz.block.ftl.timeline.v1.DeleteOldEventsResponse\"\x00\x42RP\x01ZNgithub.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/timeline/v1;timelinev1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(xyz/block/ftl/timeline/v1/timeline.proto\x12\x19xyz.block.ftl.timeline.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a%xyz/block/ftl/timeline/v1/event.proto\x1a\x1axyz/block/ftl/v1/ftl.proto\"\xf0\r\n\x12GetTimelineRequest\x12N\n\x07\x66ilters\x18\x01 \x03(\x0b\x32\x34.xyz.block.ftl.timeline.v1.GetTimelineRequest.FilterR\x07\x66ilters\x12\x14\n\x05limit\x18\x02 \x01(\x05R\x05limit\x12I\n\x05order\x18\x03 \x01(\x0e\x32\x33.xyz.block.ftl.timeline.v1.GetTimelineRequest.OrderR\x05order\x1aR\n\x0eLogLevelFilter\x12@\n\tlog_level\x18\x01 \x01(\x0e\x32#.xyz.block.ftl.timeline.v1.LogLevelR\x08logLevel\x1a\x34\n\x10\x44\x65ploymentFilter\x12 \n\x0b\x64\x65ployments\x18\x01 \x03(\tR\x0b\x64\x65ployments\x1a+\n\rRequestFilter\x12\x1a\n\x08requests\x18\x01 \x03(\tR\x08requests\x1aX\n\x0f\x45ventTypeFilter\x12\x45\n\x0b\x65vent_types\x18\x01 \x03(\x0e\x32$.xyz.block.ftl.timeline.v1.EventTypeR\neventTypes\x1a\xaa\x01\n\nTimeFilter\x12>\n\nolder_than\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\tolderThan\x88\x01\x01\x12>\n\nnewer_than\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\tnewerThan\x88\x01\x01\x42\r\n\x0b_older_thanB\r\n\x0b_newer_than\x1as\n\x08IDFilter\x12\"\n\nlower_than\x18\x01 \x01(\x03H\x00R\tlowerThan\x88\x01\x01\x12$\n\x0bhigher_than\x18\x02 \x01(\x03H\x01R\nhigherThan\x88\x01\x01\x42\r\n\x0b_lower_thanB\x0e\n\x0c_higher_than\x1a\x99\x01\n\nCallFilter\x12\x1f\n\x0b\x64\x65st_module\x18\x01 \x01(\tR\ndestModule\x12 \n\tdest_verb\x18\x02 \x01(\tH\x00R\x08\x64\x65stVerb\x88\x01\x01\x12(\n\rsource_module\x18\x03 \x01(\tH\x01R\x0csourceModule\x88\x01\x01\x42\x0c\n\n_dest_verbB\x10\n\x0e_source_module\x1aH\n\x0cModuleFilter\x12\x16\n\x06module\x18\x01 \x01(\tR\x06module\x12\x17\n\x04verb\x18\x02 \x01(\tH\x00R\x04verb\x88\x01\x01\x42\x07\n\x05_verb\x1a\xd0\x05\n\x06\x46ilter\x12[\n\tlog_level\x18\x01 \x01(\x0b\x32<.xyz.block.ftl.timeline.v1.GetTimelineRequest.LogLevelFilterH\x00R\x08logLevel\x12\x62\n\x0b\x64\x65ployments\x18\x02 \x01(\x0b\x32>.xyz.block.ftl.timeline.v1.GetTimelineRequest.DeploymentFilterH\x00R\x0b\x64\x65ployments\x12Y\n\x08requests\x18\x03 \x01(\x0b\x32;.xyz.block.ftl.timeline.v1.GetTimelineRequest.RequestFilterH\x00R\x08requests\x12`\n\x0b\x65vent_types\x18\x04 \x01(\x0b\x32=.xyz.block.ftl.timeline.v1.GetTimelineRequest.EventTypeFilterH\x00R\neventTypes\x12N\n\x04time\x18\x05 \x01(\x0b\x32\x38.xyz.block.ftl.timeline.v1.GetTimelineRequest.TimeFilterH\x00R\x04time\x12H\n\x02id\x18\x06 \x01(\x0b\x32\x36.xyz.block.ftl.timeline.v1.GetTimelineRequest.IDFilterH\x00R\x02id\x12N\n\x04\x63\x61ll\x18\x07 \x01(\x0b\x32\x38.xyz.block.ftl.timeline.v1.GetTimelineRequest.CallFilterH\x00R\x04\x63\x61ll\x12T\n\x06module\x18\x08 \x01(\x0b\x32:.xyz.block.ftl.timeline.v1.GetTimelineRequest.ModuleFilterH\x00R\x06moduleB\x08\n\x06\x66ilter\"=\n\x05Order\x12\x15\n\x11ORDER_UNSPECIFIED\x10\x00\x12\r\n\tORDER_ASC\x10\x01\x12\x0e\n\nORDER_DESC\x10\x02\"w\n\x13GetTimelineResponse\x12\x38\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .xyz.block.ftl.timeline.v1.EventR\x06\x65vents\x12\x1b\n\x06\x63ursor\x18\x02 \x01(\x03H\x00R\x06\x63ursor\x88\x01\x01\x42\t\n\x07_cursor\"\xb9\x01\n\x15StreamTimelineRequest\x12G\n\x0fupdate_interval\x18\x01 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x0eupdateInterval\x88\x01\x01\x12\x43\n\x05query\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.timeline.v1.GetTimelineRequestR\x05queryB\x12\n\x10_update_interval\"R\n\x16StreamTimelineResponse\x12\x38\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .xyz.block.ftl.timeline.v1.EventR\x06\x65vents\"\xfc\x05\n\x12\x43reateEventRequest\x12\x37\n\x03log\x18\x01 \x01(\x0b\x32#.xyz.block.ftl.timeline.v1.LogEventH\x00R\x03log\x12:\n\x04\x63\x61ll\x18\x02 \x01(\x0b\x32$.xyz.block.ftl.timeline.v1.CallEventH\x00R\x04\x63\x61ll\x12\x62\n\x12\x64\x65ployment_created\x18\x03 \x01(\x0b\x32\x31.xyz.block.ftl.timeline.v1.DeploymentCreatedEventH\x00R\x11\x64\x65ploymentCreated\x12\x62\n\x12\x64\x65ployment_updated\x18\x04 \x01(\x0b\x32\x31.xyz.block.ftl.timeline.v1.DeploymentUpdatedEventH\x00R\x11\x64\x65ploymentUpdated\x12\x43\n\x07ingress\x18\x05 \x01(\x0b\x32\'.xyz.block.ftl.timeline.v1.IngressEventH\x00R\x07ingress\x12V\n\x0e\x63ron_scheduled\x18\x06 \x01(\x0b\x32-.xyz.block.ftl.timeline.v1.CronScheduledEventH\x00R\rcronScheduled\x12S\n\rasync_execute\x18\x07 \x01(\x0b\x32,.xyz.block.ftl.timeline.v1.AsyncExecuteEventH\x00R\x0c\x61syncExecute\x12V\n\x0epubsub_publish\x18\x08 \x01(\x0b\x32-.xyz.block.ftl.timeline.v1.PubSubPublishEventH\x00R\rpubsubPublish\x12V\n\x0epubsub_consume\x18\t \x01(\x0b\x32-.xyz.block.ftl.timeline.v1.PubSubConsumeEventH\x00R\rpubsubConsumeB\x07\n\x05\x65ntry\"\x15\n\x13\x43reateEventResponse\"~\n\x16\x44\x65leteOldEventsRequest\x12\x43\n\nevent_type\x18\x01 \x01(\x0e\x32$.xyz.block.ftl.timeline.v1.EventTypeR\teventType\x12\x1f\n\x0b\x61ge_seconds\x18\x02 \x01(\x03R\nageSeconds\">\n\x17\x44\x65leteOldEventsResponse\x12#\n\rdeleted_count\x18\x01 \x01(\x03R\x0c\x64\x65letedCount2\xb5\x04\n\x0fTimelineService\x12J\n\x04Ping\x12\x1d.xyz.block.ftl.v1.PingRequest\x1a\x1e.xyz.block.ftl.v1.PingResponse\"\x03\x90\x02\x01\x12q\n\x0bGetTimeline\x12-.xyz.block.ftl.timeline.v1.GetTimelineRequest\x1a..xyz.block.ftl.timeline.v1.GetTimelineResponse\"\x03\x90\x02\x01\x12w\n\x0eStreamTimeline\x12\x30.xyz.block.ftl.timeline.v1.StreamTimelineRequest\x1a\x31.xyz.block.ftl.timeline.v1.StreamTimelineResponse0\x01\x12n\n\x0b\x43reateEvent\x12-.xyz.block.ftl.timeline.v1.CreateEventRequest\x1a..xyz.block.ftl.timeline.v1.CreateEventResponse\"\x00\x12z\n\x0f\x44\x65leteOldEvents\x12\x31.xyz.block.ftl.timeline.v1.DeleteOldEventsRequest\x1a\x32.xyz.block.ftl.timeline.v1.DeleteOldEventsResponse\"\x00\x42RP\x01ZNgithub.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/timeline/v1;timelinev1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -39,40 +40,42 @@ _globals['_TIMELINESERVICE'].methods_by_name['Ping']._serialized_options = b'\220\002\001' _globals['_TIMELINESERVICE'].methods_by_name['GetTimeline']._loaded_options = None _globals['_TIMELINESERVICE'].methods_by_name['GetTimeline']._serialized_options = b'\220\002\001' - _globals['_GETTIMELINEREQUEST']._serialized_start=172 - _globals['_GETTIMELINEREQUEST']._serialized_end=2068 - _globals['_GETTIMELINEREQUEST_LIMITFILTER']._serialized_start=371 - _globals['_GETTIMELINEREQUEST_LIMITFILTER']._serialized_end=406 - _globals['_GETTIMELINEREQUEST_LOGLEVELFILTER']._serialized_start=408 - _globals['_GETTIMELINEREQUEST_LOGLEVELFILTER']._serialized_end=490 - _globals['_GETTIMELINEREQUEST_DEPLOYMENTFILTER']._serialized_start=492 - _globals['_GETTIMELINEREQUEST_DEPLOYMENTFILTER']._serialized_end=544 - _globals['_GETTIMELINEREQUEST_REQUESTFILTER']._serialized_start=546 - _globals['_GETTIMELINEREQUEST_REQUESTFILTER']._serialized_end=589 - _globals['_GETTIMELINEREQUEST_EVENTTYPEFILTER']._serialized_start=591 - _globals['_GETTIMELINEREQUEST_EVENTTYPEFILTER']._serialized_end=679 - _globals['_GETTIMELINEREQUEST_TIMEFILTER']._serialized_start=682 - _globals['_GETTIMELINEREQUEST_TIMEFILTER']._serialized_end=852 - _globals['_GETTIMELINEREQUEST_IDFILTER']._serialized_start=854 - _globals['_GETTIMELINEREQUEST_IDFILTER']._serialized_end=969 - _globals['_GETTIMELINEREQUEST_CALLFILTER']._serialized_start=972 - _globals['_GETTIMELINEREQUEST_CALLFILTER']._serialized_end=1125 - _globals['_GETTIMELINEREQUEST_MODULEFILTER']._serialized_start=1127 - _globals['_GETTIMELINEREQUEST_MODULEFILTER']._serialized_end=1199 - _globals['_GETTIMELINEREQUEST_FILTER']._serialized_start=1202 - _globals['_GETTIMELINEREQUEST_FILTER']._serialized_end=2005 - _globals['_GETTIMELINEREQUEST_ORDER']._serialized_start=2007 - _globals['_GETTIMELINEREQUEST_ORDER']._serialized_end=2068 - _globals['_GETTIMELINERESPONSE']._serialized_start=2070 - _globals['_GETTIMELINERESPONSE']._serialized_end=2149 - _globals['_CREATEEVENTREQUEST']._serialized_start=2152 - _globals['_CREATEEVENTREQUEST']._serialized_end=2916 - _globals['_CREATEEVENTRESPONSE']._serialized_start=2918 - _globals['_CREATEEVENTRESPONSE']._serialized_end=2939 - _globals['_DELETEOLDEVENTSREQUEST']._serialized_start=2941 - _globals['_DELETEOLDEVENTSREQUEST']._serialized_end=3067 - _globals['_DELETEOLDEVENTSRESPONSE']._serialized_start=3069 - _globals['_DELETEOLDEVENTSRESPONSE']._serialized_end=3131 - _globals['_TIMELINESERVICE']._serialized_start=3134 - _globals['_TIMELINESERVICE']._serialized_end=3578 + _globals['_GETTIMELINEREQUEST']._serialized_start=204 + _globals['_GETTIMELINEREQUEST']._serialized_end=1980 + _globals['_GETTIMELINEREQUEST_LOGLEVELFILTER']._serialized_start=403 + _globals['_GETTIMELINEREQUEST_LOGLEVELFILTER']._serialized_end=485 + _globals['_GETTIMELINEREQUEST_DEPLOYMENTFILTER']._serialized_start=487 + _globals['_GETTIMELINEREQUEST_DEPLOYMENTFILTER']._serialized_end=539 + _globals['_GETTIMELINEREQUEST_REQUESTFILTER']._serialized_start=541 + _globals['_GETTIMELINEREQUEST_REQUESTFILTER']._serialized_end=584 + _globals['_GETTIMELINEREQUEST_EVENTTYPEFILTER']._serialized_start=586 + _globals['_GETTIMELINEREQUEST_EVENTTYPEFILTER']._serialized_end=674 + _globals['_GETTIMELINEREQUEST_TIMEFILTER']._serialized_start=677 + _globals['_GETTIMELINEREQUEST_TIMEFILTER']._serialized_end=847 + _globals['_GETTIMELINEREQUEST_IDFILTER']._serialized_start=849 + _globals['_GETTIMELINEREQUEST_IDFILTER']._serialized_end=964 + _globals['_GETTIMELINEREQUEST_CALLFILTER']._serialized_start=967 + _globals['_GETTIMELINEREQUEST_CALLFILTER']._serialized_end=1120 + _globals['_GETTIMELINEREQUEST_MODULEFILTER']._serialized_start=1122 + _globals['_GETTIMELINEREQUEST_MODULEFILTER']._serialized_end=1194 + _globals['_GETTIMELINEREQUEST_FILTER']._serialized_start=1197 + _globals['_GETTIMELINEREQUEST_FILTER']._serialized_end=1917 + _globals['_GETTIMELINEREQUEST_ORDER']._serialized_start=1919 + _globals['_GETTIMELINEREQUEST_ORDER']._serialized_end=1980 + _globals['_GETTIMELINERESPONSE']._serialized_start=1982 + _globals['_GETTIMELINERESPONSE']._serialized_end=2101 + _globals['_STREAMTIMELINEREQUEST']._serialized_start=2104 + _globals['_STREAMTIMELINEREQUEST']._serialized_end=2289 + _globals['_STREAMTIMELINERESPONSE']._serialized_start=2291 + _globals['_STREAMTIMELINERESPONSE']._serialized_end=2373 + _globals['_CREATEEVENTREQUEST']._serialized_start=2376 + _globals['_CREATEEVENTREQUEST']._serialized_end=3140 + _globals['_CREATEEVENTRESPONSE']._serialized_start=3142 + _globals['_CREATEEVENTRESPONSE']._serialized_end=3163 + _globals['_DELETEOLDEVENTSREQUEST']._serialized_start=3165 + _globals['_DELETEOLDEVENTSREQUEST']._serialized_end=3291 + _globals['_DELETEOLDEVENTSRESPONSE']._serialized_start=3293 + _globals['_DELETEOLDEVENTSRESPONSE']._serialized_end=3355 + _globals['_TIMELINESERVICE']._serialized_start=3358 + _globals['_TIMELINESERVICE']._serialized_end=3923 # @@protoc_insertion_point(module_scope) diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/timeline/v1/timeline_pb2.pyi b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/timeline/v1/timeline_pb2.pyi index fb8216e2ca..f77b03cecb 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/timeline/v1/timeline_pb2.pyi +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/timeline/v1/timeline_pb2.pyi @@ -1,3 +1,4 @@ +from google.protobuf import duration_pb2 as _duration_pb2 from google.protobuf import timestamp_pb2 as _timestamp_pb2 from xyz.block.ftl.timeline.v1 import event_pb2 as _event_pb2 from xyz.block.ftl.v1 import ftl_pb2 as _ftl_pb2 @@ -19,11 +20,6 @@ class GetTimelineRequest(_message.Message): ORDER_UNSPECIFIED: GetTimelineRequest.Order ORDER_ASC: GetTimelineRequest.Order ORDER_DESC: GetTimelineRequest.Order - class LimitFilter(_message.Message): - __slots__ = ("limit",) - LIMIT_FIELD_NUMBER: _ClassVar[int] - limit: int - def __init__(self, limit: _Optional[int] = ...) -> None: ... class LogLevelFilter(_message.Message): __slots__ = ("log_level",) LOG_LEVEL_FIELD_NUMBER: _ClassVar[int] @@ -75,8 +71,7 @@ class GetTimelineRequest(_message.Message): verb: str def __init__(self, module: _Optional[str] = ..., verb: _Optional[str] = ...) -> None: ... class Filter(_message.Message): - __slots__ = ("limit", "log_level", "deployments", "requests", "event_types", "time", "id", "call", "module") - LIMIT_FIELD_NUMBER: _ClassVar[int] + __slots__ = ("log_level", "deployments", "requests", "event_types", "time", "id", "call", "module") LOG_LEVEL_FIELD_NUMBER: _ClassVar[int] DEPLOYMENTS_FIELD_NUMBER: _ClassVar[int] REQUESTS_FIELD_NUMBER: _ClassVar[int] @@ -85,7 +80,6 @@ class GetTimelineRequest(_message.Message): ID_FIELD_NUMBER: _ClassVar[int] CALL_FIELD_NUMBER: _ClassVar[int] MODULE_FIELD_NUMBER: _ClassVar[int] - limit: GetTimelineRequest.LimitFilter log_level: GetTimelineRequest.LogLevelFilter deployments: GetTimelineRequest.DeploymentFilter requests: GetTimelineRequest.RequestFilter @@ -94,7 +88,7 @@ class GetTimelineRequest(_message.Message): id: GetTimelineRequest.IDFilter call: GetTimelineRequest.CallFilter module: GetTimelineRequest.ModuleFilter - def __init__(self, limit: _Optional[_Union[GetTimelineRequest.LimitFilter, _Mapping]] = ..., log_level: _Optional[_Union[GetTimelineRequest.LogLevelFilter, _Mapping]] = ..., deployments: _Optional[_Union[GetTimelineRequest.DeploymentFilter, _Mapping]] = ..., requests: _Optional[_Union[GetTimelineRequest.RequestFilter, _Mapping]] = ..., event_types: _Optional[_Union[GetTimelineRequest.EventTypeFilter, _Mapping]] = ..., time: _Optional[_Union[GetTimelineRequest.TimeFilter, _Mapping]] = ..., id: _Optional[_Union[GetTimelineRequest.IDFilter, _Mapping]] = ..., call: _Optional[_Union[GetTimelineRequest.CallFilter, _Mapping]] = ..., module: _Optional[_Union[GetTimelineRequest.ModuleFilter, _Mapping]] = ...) -> None: ... + def __init__(self, log_level: _Optional[_Union[GetTimelineRequest.LogLevelFilter, _Mapping]] = ..., deployments: _Optional[_Union[GetTimelineRequest.DeploymentFilter, _Mapping]] = ..., requests: _Optional[_Union[GetTimelineRequest.RequestFilter, _Mapping]] = ..., event_types: _Optional[_Union[GetTimelineRequest.EventTypeFilter, _Mapping]] = ..., time: _Optional[_Union[GetTimelineRequest.TimeFilter, _Mapping]] = ..., id: _Optional[_Union[GetTimelineRequest.IDFilter, _Mapping]] = ..., call: _Optional[_Union[GetTimelineRequest.CallFilter, _Mapping]] = ..., module: _Optional[_Union[GetTimelineRequest.ModuleFilter, _Mapping]] = ...) -> None: ... FILTERS_FIELD_NUMBER: _ClassVar[int] LIMIT_FIELD_NUMBER: _ClassVar[int] ORDER_FIELD_NUMBER: _ClassVar[int] @@ -104,6 +98,22 @@ class GetTimelineRequest(_message.Message): def __init__(self, filters: _Optional[_Iterable[_Union[GetTimelineRequest.Filter, _Mapping]]] = ..., limit: _Optional[int] = ..., order: _Optional[_Union[GetTimelineRequest.Order, str]] = ...) -> None: ... class GetTimelineResponse(_message.Message): + __slots__ = ("events", "cursor") + EVENTS_FIELD_NUMBER: _ClassVar[int] + CURSOR_FIELD_NUMBER: _ClassVar[int] + events: _containers.RepeatedCompositeFieldContainer[_event_pb2.Event] + cursor: int + def __init__(self, events: _Optional[_Iterable[_Union[_event_pb2.Event, _Mapping]]] = ..., cursor: _Optional[int] = ...) -> None: ... + +class StreamTimelineRequest(_message.Message): + __slots__ = ("update_interval", "query") + UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int] + QUERY_FIELD_NUMBER: _ClassVar[int] + update_interval: _duration_pb2.Duration + query: GetTimelineRequest + def __init__(self, update_interval: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., query: _Optional[_Union[GetTimelineRequest, _Mapping]] = ...) -> None: ... + +class StreamTimelineResponse(_message.Message): __slots__ = ("events",) EVENTS_FIELD_NUMBER: _ClassVar[int] events: _containers.RepeatedCompositeFieldContainer[_event_pb2.Event]