From e534f24f9ce7afd249d129556ac9c27fce5278f2 Mon Sep 17 00:00:00 2001 From: Safeer Jiwan Date: Wed, 2 Oct 2024 11:30:07 -0700 Subject: [PATCH] feat: timeline events for scheduled cron jobs (#2860) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds an event to the timeline when a cron job is scheduled. No other cron events are needed since the rest will be covered by async events. Screenshot 2024-10-02 at 10 51 45 AM --------- Co-authored-by: github-actions[bot] --- backend/controller/console/console.go | 22 + backend/controller/controller.go | 5 +- backend/controller/cronjobs/cronjobs.go | 61 +- backend/controller/cronjobs/cronjobs_test.go | 5 +- ...231955_timeline_async_call_event_types.sql | 6 + backend/controller/timeline/events_cron.go | 76 ++ .../timeline/internal/sql/models.go | 1 + .../timeline/internal/sql/querier.go | 1 + .../timeline/internal/sql/queries.sql | 18 + .../timeline/internal/sql/queries.sql.go | 38 + backend/controller/timeline/query.go | 17 + backend/controller/timeline/timeline.go | 3 + backend/controller/timeline/timeline_test.go | 27 +- .../xyz/block/ftl/v1/console/console.pb.go | 1178 ++++++++++------- .../xyz/block/ftl/v1/console/console.proto | 12 + deployment/base/db-migrate/kustomization.yml | 1 + .../src/features/timeline/Timeline.tsx | 4 + .../timeline/TimelineCronScheduled.tsx | 19 + .../features/timeline/TimelineEventList.tsx | 5 + .../src/features/timeline/TimelineIcon.tsx | 7 +- .../details/TimelineCronScheduledDetails.tsx | 68 + .../timeline/filters/TimelineFilterPanel.tsx | 3 +- .../src/features/timeline/timeline.utils.ts | 2 + .../xyz/block/ftl/v1/console/console_pb.ts | 86 ++ 24 files changed, 1132 insertions(+), 533 deletions(-) create mode 100644 backend/controller/sql/schema/20240926231955_timeline_async_call_event_types.sql create mode 100644 backend/controller/timeline/events_cron.go create mode 100644 frontend/console/src/features/timeline/TimelineCronScheduled.tsx create mode 100644 frontend/console/src/features/timeline/details/TimelineCronScheduledDetails.tsx diff --git a/backend/controller/console/console.go b/backend/controller/console/console.go index ee64bd72d3..43f3c2e1ee 100644 --- a/backend/controller/console/console.go +++ b/backend/controller/console/console.go @@ -316,6 +316,8 @@ func eventsQueryProtoToDAL(pb *pbconsole.EventsQuery) ([]timeline.TimelineFilter eventTypes = append(eventTypes, timeline.EventTypeDeploymentUpdated) case pbconsole.EventType_EVENT_TYPE_INGRESS: eventTypes = append(eventTypes, timeline.EventTypeIngress) + case pbconsole.EventType_EVENT_TYPE_CRON_SCHEDULED: + eventTypes = append(eventTypes, timeline.EventTypeCronScheduled) default: return nil, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("unknown event type %v", eventType)) } @@ -492,6 +494,26 @@ func eventDALToProto(event timeline.Event) *pbconsole.Event { }, } + case *timeline.CronScheduledEvent: + return &pbconsole.Event{ + TimeStamp: timestamppb.New(event.Time), + Id: event.ID, + Entry: &pbconsole.Event_CronScheduled{ + CronScheduled: &pbconsole.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(), + }, + }, + } + default: panic(fmt.Errorf("unknown event type %T", event)) } diff --git a/backend/controller/controller.go b/backend/controller/controller.go index d446c82aa9..4c22aefb76 100644 --- a/backend/controller/controller.go +++ b/backend/controller/controller.go @@ -271,8 +271,6 @@ func New(ctx context.Context, conn *sql.DB, config Config, devel bool, runnerSca runnerScaling: runnerScaling, } svc.schemaState.Store(schemaState{routes: map[string]Route{}, schema: &schema.Schema{}}) - cronSvc := cronjobs.New(ctx, key, svc.config.Advertise.Host, encryption, conn) - svc.cronJobs = cronSvc pubSub := pubsub.New(conn, encryption, svc.tasks, optional.Some[pubsub.AsyncCallListener](svc)) svc.pubSub = pubSub @@ -284,6 +282,9 @@ func New(ctx context.Context, conn *sql.DB, config Config, devel bool, runnerSca timelineSvc := timeline.New(ctx, conn, encryption) svc.timeline = timelineSvc + cronSvc := cronjobs.New(ctx, key, svc.config.Advertise.Host, encryption, timelineSvc, conn) + svc.cronJobs = cronSvc + svc.deploymentLogsSink = newDeploymentLogsSink(ctx, timelineSvc) // Use min, max backoff if we are running in production, otherwise use diff --git a/backend/controller/cronjobs/cronjobs.go b/backend/controller/cronjobs/cronjobs.go index f0bfde0e67..89cda37ddd 100644 --- a/backend/controller/cronjobs/cronjobs.go +++ b/backend/controller/cronjobs/cronjobs.go @@ -5,13 +5,16 @@ import ( "database/sql" "errors" "fmt" + "time" + "github.com/alecthomas/types/optional" "github.com/benbjohnson/clock" "github.com/TBD54566975/ftl/backend/controller/async" "github.com/TBD54566975/ftl/backend/controller/cronjobs/internal/dal" encryptionsvc "github.com/TBD54566975/ftl/backend/controller/encryption" "github.com/TBD54566975/ftl/backend/controller/encryption/api" + "github.com/TBD54566975/ftl/backend/controller/timeline" schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" "github.com/TBD54566975/ftl/internal/cron" "github.com/TBD54566975/ftl/internal/log" @@ -20,24 +23,26 @@ import ( ) type Service struct { - key model.ControllerKey - requestSource string - dal dal.DAL - encryption *encryptionsvc.Service - clock clock.Clock + key model.ControllerKey + requestSource string + dal dal.DAL + encryption *encryptionsvc.Service + timelineService *timeline.Service + clock clock.Clock } -func New(ctx context.Context, key model.ControllerKey, requestSource string, encryption *encryptionsvc.Service, conn *sql.DB) *Service { - return NewForTesting(ctx, key, requestSource, encryption, *dal.New(conn), clock.New()) +func New(ctx context.Context, key model.ControllerKey, requestSource string, encryption *encryptionsvc.Service, timeline *timeline.Service, conn *sql.DB) *Service { + return NewForTesting(ctx, key, requestSource, encryption, timeline, *dal.New(conn), clock.New()) } -func NewForTesting(ctx context.Context, key model.ControllerKey, requestSource string, encryption *encryptionsvc.Service, dal dal.DAL, clock clock.Clock) *Service { +func NewForTesting(ctx context.Context, key model.ControllerKey, requestSource string, encryption *encryptionsvc.Service, timeline *timeline.Service, dal dal.DAL, clock clock.Clock) *Service { svc := &Service{ - key: key, - requestSource: requestSource, - dal: dal, - encryption: encryption, - clock: clock, + key: key, + requestSource: requestSource, + dal: dal, + encryption: encryption, + timelineService: timeline, + clock: clock, } return svc } @@ -115,8 +120,16 @@ func (s *Service) scheduleCronJobs(ctx context.Context) (err error) { } logger.Tracef("Scheduling %d cron jobs", len(jobs)) for _, job := range jobs { - err = s.scheduleCronJob(ctx, tx, job) + err = s.scheduleCronJob(ctx, tx, job, now) if err != nil { + s.timelineService.EnqueueEvent(ctx, &timeline.CronScheduled{ + DeploymentKey: job.DeploymentKey, + Verb: job.Verb, + Time: now, + ScheduledAt: job.NextExecution, + Schedule: job.Schedule, + Error: optional.Some(err.Error()), + }) return fmt.Errorf("failed to schedule cron job %q: %w", job.Key, err) } } @@ -129,6 +142,7 @@ func (s *Service) scheduleCronJobs(ctx context.Context) (err error) { func (s *Service) OnJobCompletion(ctx context.Context, key model.CronJobKey, failed bool) (err error) { logger := log.FromContext(ctx).Scope("cron") logger.Tracef("Cron job %q completed with failed=%v", key, failed) + now := s.clock.Now().UTC() tx, err := s.dal.Begin(ctx) if err != nil { @@ -140,15 +154,23 @@ func (s *Service) OnJobCompletion(ctx context.Context, key model.CronJobKey, fai if err != nil { return fmt.Errorf("failed to get cron job %q: %w", key, err) } - err = s.scheduleCronJob(ctx, tx, job) + err = s.scheduleCronJob(ctx, tx, job, now) if err != nil { + s.timelineService.EnqueueEvent(ctx, &timeline.CronScheduled{ + DeploymentKey: job.DeploymentKey, + Verb: job.Verb, + Time: now, + ScheduledAt: job.NextExecution, + Schedule: job.Schedule, + Error: optional.Some(err.Error()), + }) return fmt.Errorf("failed to schedule cron job %q: %w", key, err) } return nil } // scheduleCronJob schedules the next execution of a single cron job. -func (s *Service) scheduleCronJob(ctx context.Context, tx *dal.DAL, job model.CronJob) error { +func (s *Service) scheduleCronJob(ctx context.Context, tx *dal.DAL, job model.CronJob, startTime time.Time) error { logger := log.FromContext(ctx).Scope("cron").Module(job.Verb.Module) now := s.clock.Now().UTC() pending, err := tx.IsCronJobPending(ctx, job.Key, now) @@ -206,5 +228,12 @@ func (s *Service) scheduleCronJob(ctx context.Context, tx *dal.DAL, job model.Cr if err != nil { return fmt.Errorf("failed to update cron job %q: %w", job.Key, err) } + s.timelineService.EnqueueEvent(ctx, &timeline.CronScheduled{ + DeploymentKey: job.DeploymentKey, + Verb: job.Verb, + Time: startTime, + ScheduledAt: nextAttemptForJob, + Schedule: job.Schedule, + }) return nil } diff --git a/backend/controller/cronjobs/cronjobs_test.go b/backend/controller/cronjobs/cronjobs_test.go index 2f0204303c..37692900c9 100644 --- a/backend/controller/cronjobs/cronjobs_test.go +++ b/backend/controller/cronjobs/cronjobs_test.go @@ -21,6 +21,7 @@ import ( "github.com/TBD54566975/ftl/backend/controller/pubsub" "github.com/TBD54566975/ftl/backend/controller/scheduledtask" "github.com/TBD54566975/ftl/backend/controller/sql/sqltest" + "github.com/TBD54566975/ftl/backend/controller/timeline" "github.com/TBD54566975/ftl/backend/libdal" "github.com/TBD54566975/ftl/internal/cron" "github.com/TBD54566975/ftl/internal/log" @@ -57,9 +58,11 @@ func TestNewCronJobsForModule(t *testing.T) { err = parentDAL.ReplaceDeployment(ctx, deploymentKey, 1) assert.NoError(t, err) + timelineSrv := timeline.New(ctx, conn, encryption) + // Progress so that start_time is valid clk.Add(time.Second) - cjs := NewForTesting(ctx, key, "test.com", encryption, *dal, clk) + cjs := NewForTesting(ctx, key, "test.com", encryption, timelineSrv, *dal, clk) // All jobs need to be scheduled expectUnscheduledJobs(t, dal, clk, 2) unscheduledJobs, err := dal.GetUnscheduledCronJobs(ctx, clk.Now()) diff --git a/backend/controller/sql/schema/20240926231955_timeline_async_call_event_types.sql b/backend/controller/sql/schema/20240926231955_timeline_async_call_event_types.sql new file mode 100644 index 0000000000..0b18f7d3d8 --- /dev/null +++ b/backend/controller/sql/schema/20240926231955_timeline_async_call_event_types.sql @@ -0,0 +1,6 @@ +-- migrate:up + +ALTER TYPE event_type ADD VALUE IF NOT EXISTS 'cron_scheduled'; + +-- migrate:down + diff --git a/backend/controller/timeline/events_cron.go b/backend/controller/timeline/events_cron.go new file mode 100644 index 0000000000..6fba45be26 --- /dev/null +++ b/backend/controller/timeline/events_cron.go @@ -0,0 +1,76 @@ +package timeline + +import ( + "context" + "encoding/json" + "fmt" + "time" + + "github.com/alecthomas/types/optional" + + ftlencryption "github.com/TBD54566975/ftl/backend/controller/encryption/api" + "github.com/TBD54566975/ftl/backend/controller/timeline/internal/sql" + "github.com/TBD54566975/ftl/backend/libdal" + "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 (*CronScheduled) inEvent() {} + +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"` +} + +func (s *Service) insertCronScheduledEvent(ctx context.Context, querier sql.Querier, event *CronScheduled) error { + cronJSON := eventCronScheduledJSON{ + DurationMS: time.Since(event.Time).Milliseconds(), + ScheduledAt: event.ScheduledAt, + Schedule: event.Schedule, + Error: event.Error, + } + + data, err := json.Marshal(cronJSON) + if err != nil { + return fmt.Errorf("failed to marshal cron JSON: %w", err) + } + + var payload ftlencryption.EncryptedTimelineColumn + err = s.encryption.EncryptJSON(json.RawMessage(data), &payload) + if err != nil { + return fmt.Errorf("failed to encrypt cron JSON: %w", err) + } + + err = libdal.TranslatePGError(querier.InsertTimelineCronScheduledEvent(ctx, sql.InsertTimelineCronScheduledEventParams{ + DeploymentKey: event.DeploymentKey, + TimeStamp: event.Time, + Module: event.Verb.Module, + Verb: event.Verb.Name, + Payload: payload, + })) + if err != nil { + return fmt.Errorf("failed to insert cron event: %w", err) + } + return err +} diff --git a/backend/controller/timeline/internal/sql/models.go b/backend/controller/timeline/internal/sql/models.go index ea1201073b..14915868fe 100644 --- a/backend/controller/timeline/internal/sql/models.go +++ b/backend/controller/timeline/internal/sql/models.go @@ -21,6 +21,7 @@ const ( EventTypeDeploymentCreated EventType = "deployment_created" EventTypeDeploymentUpdated EventType = "deployment_updated" EventTypeIngress EventType = "ingress" + EventTypeCronScheduled EventType = "cron_scheduled" ) func (e *EventType) Scan(src interface{}) error { diff --git a/backend/controller/timeline/internal/sql/querier.go b/backend/controller/timeline/internal/sql/querier.go index c6364fc330..f97ea85ecf 100644 --- a/backend/controller/timeline/internal/sql/querier.go +++ b/backend/controller/timeline/internal/sql/querier.go @@ -15,6 +15,7 @@ type Querier interface { // This is a dummy query to ensure that the Timeline model is generated. DummyQueryTimeline(ctx context.Context, id int64) (Timeline, error) InsertTimelineCallEvent(ctx context.Context, arg InsertTimelineCallEventParams) error + InsertTimelineCronScheduledEvent(ctx context.Context, arg InsertTimelineCronScheduledEventParams) error InsertTimelineDeploymentCreatedEvent(ctx context.Context, arg InsertTimelineDeploymentCreatedEventParams) error InsertTimelineDeploymentUpdatedEvent(ctx context.Context, arg InsertTimelineDeploymentUpdatedEventParams) error InsertTimelineIngressEvent(ctx context.Context, arg InsertTimelineIngressEventParams) error diff --git a/backend/controller/timeline/internal/sql/queries.sql b/backend/controller/timeline/internal/sql/queries.sql index e3613de812..a92f3e4380 100644 --- a/backend/controller/timeline/internal/sql/queries.sql +++ b/backend/controller/timeline/internal/sql/queries.sql @@ -80,6 +80,24 @@ VALUES ( sqlc.arg('payload') ); +-- name: InsertTimelineCronScheduledEvent :exec +INSERT INTO timeline ( + deployment_id, + time_stamp, + type, + custom_key_1, + custom_key_2, + payload +) +VALUES ( + (SELECT id FROM deployments d WHERE d.key = sqlc.arg('deployment_key')::deployment_key LIMIT 1), + sqlc.arg('time_stamp')::TIMESTAMPTZ, + 'cron_scheduled', + sqlc.arg('module')::TEXT, + sqlc.arg('verb')::TEXT, + sqlc.arg('payload') +); + -- name: DeleteOldTimelineEvents :one WITH deleted AS ( DELETE FROM timeline diff --git a/backend/controller/timeline/internal/sql/queries.sql.go b/backend/controller/timeline/internal/sql/queries.sql.go index 8010b1adad..4b68c53a76 100644 --- a/backend/controller/timeline/internal/sql/queries.sql.go +++ b/backend/controller/timeline/internal/sql/queries.sql.go @@ -117,6 +117,44 @@ func (q *Queries) InsertTimelineCallEvent(ctx context.Context, arg InsertTimelin return err } +const insertTimelineCronScheduledEvent = `-- name: InsertTimelineCronScheduledEvent :exec +INSERT INTO timeline ( + deployment_id, + time_stamp, + type, + custom_key_1, + custom_key_2, + payload +) +VALUES ( + (SELECT id FROM deployments d WHERE d.key = $1::deployment_key LIMIT 1), + $2::TIMESTAMPTZ, + 'cron_scheduled', + $3::TEXT, + $4::TEXT, + $5 +) +` + +type InsertTimelineCronScheduledEventParams struct { + DeploymentKey model.DeploymentKey + TimeStamp time.Time + Module string + Verb string + Payload api.EncryptedTimelineColumn +} + +func (q *Queries) InsertTimelineCronScheduledEvent(ctx context.Context, arg InsertTimelineCronScheduledEventParams) error { + _, err := q.db.ExecContext(ctx, insertTimelineCronScheduledEvent, + arg.DeploymentKey, + arg.TimeStamp, + arg.Module, + arg.Verb, + arg.Payload, + ) + return err +} + const insertTimelineIngressEvent = `-- name: InsertTimelineIngressEvent :exec INSERT INTO timeline ( deployment_id, diff --git a/backend/controller/timeline/query.go b/backend/controller/timeline/query.go index 8c486797df..cc79a6efa1 100644 --- a/backend/controller/timeline/query.go +++ b/backend/controller/timeline/query.go @@ -370,6 +370,23 @@ func (s *Service) transformRowsToTimelineEvents(deploymentKeys map[int64]model.D 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, + }, + }) default: panic("unknown event type: " + row.Type) diff --git a/backend/controller/timeline/timeline.go b/backend/controller/timeline/timeline.go index 3e186a2c31..d129a32058 100644 --- a/backend/controller/timeline/timeline.go +++ b/backend/controller/timeline/timeline.go @@ -25,6 +25,7 @@ const ( EventTypeDeploymentCreated = sql.EventTypeDeploymentCreated EventTypeDeploymentUpdated = sql.EventTypeDeploymentUpdated EventTypeIngress = sql.EventTypeIngress + EventTypeCronScheduled = sql.EventTypeCronScheduled maxBatchSize = 16 maxBatchDelay = 100 * time.Millisecond @@ -126,6 +127,8 @@ func (s *Service) flushEvents(events []InEvent) { err = s.insertLogEvent(s.ctx, querier, e) case *Ingress: err = s.insertHTTPIngress(s.ctx, querier, e) + case *CronScheduled: + err = s.insertCronScheduledEvent(s.ctx, querier, e) default: panic(fmt.Sprintf("unexpected event type: %T", e)) } diff --git a/backend/controller/timeline/timeline_test.go b/backend/controller/timeline/timeline_test.go index d38fc3fdb0..d33913afc6 100644 --- a/backend/controller/timeline/timeline_test.go +++ b/backend/controller/timeline/timeline_test.go @@ -141,6 +141,29 @@ func TestTimeline(t *testing.T) { time.Sleep(200 * time.Millisecond) }) + cronEvent := &CronScheduledEvent{ + CronScheduled: CronScheduled{ + DeploymentKey: deploymentKey, + Verb: schema.Ref{Module: "time", Name: "time"}, + Time: time.Now().Round(time.Millisecond), + ScheduledAt: time.Now().Add(time.Minute).Round(time.Millisecond).UTC(), + Schedule: "* * * * *", + Error: optional.None[string](), + }, + } + + t.Run("InsertCronScheduledEvent", func(t *testing.T) { + timeline.EnqueueEvent(ctx, &CronScheduled{ + DeploymentKey: cronEvent.DeploymentKey, + Verb: cronEvent.Verb, + Time: cronEvent.Time, + ScheduledAt: cronEvent.ScheduledAt, + Schedule: cronEvent.Schedule, + Error: cronEvent.Error, + }) + time.Sleep(200 * time.Millisecond) + }) + expectedDeploymentUpdatedEvent := &DeploymentUpdatedEvent{ DeploymentKey: deploymentKey, MinReplicas: 1, @@ -156,13 +179,13 @@ func TestTimeline(t *testing.T) { t.Run("NoFilters", func(t *testing.T) { events, err := timeline.QueryTimeline(ctx, 1000) assert.NoError(t, err) - assertEventsEqual(t, []Event{expectedDeploymentUpdatedEvent, callEvent, logEvent, ingressEvent}, events) + assertEventsEqual(t, []Event{expectedDeploymentUpdatedEvent, callEvent, logEvent, ingressEvent, cronEvent}, events) }) t.Run("ByDeployment", func(t *testing.T) { events, err := timeline.QueryTimeline(ctx, 1000, FilterDeployments(deploymentKey)) assert.NoError(t, err) - assertEventsEqual(t, []Event{expectedDeploymentUpdatedEvent, callEvent, logEvent, ingressEvent}, events) + assertEventsEqual(t, []Event{expectedDeploymentUpdatedEvent, callEvent, logEvent, ingressEvent, cronEvent}, events) }) t.Run("ByCall", func(t *testing.T) { diff --git a/backend/protos/xyz/block/ftl/v1/console/console.pb.go b/backend/protos/xyz/block/ftl/v1/console/console.pb.go index 7964c5af8f..c6d3c266d8 100644 --- a/backend/protos/xyz/block/ftl/v1/console/console.pb.go +++ b/backend/protos/xyz/block/ftl/v1/console/console.pb.go @@ -33,6 +33,7 @@ const ( EventType_EVENT_TYPE_DEPLOYMENT_CREATED EventType = 3 EventType_EVENT_TYPE_DEPLOYMENT_UPDATED EventType = 4 EventType_EVENT_TYPE_INGRESS EventType = 5 + EventType_EVENT_TYPE_CRON_SCHEDULED EventType = 6 ) // Enum value maps for EventType. @@ -44,6 +45,7 @@ var ( 3: "EVENT_TYPE_DEPLOYMENT_CREATED", 4: "EVENT_TYPE_DEPLOYMENT_UPDATED", 5: "EVENT_TYPE_INGRESS", + 6: "EVENT_TYPE_CRON_SCHEDULED", } EventType_value = map[string]int32{ "EVENT_TYPE_UNKNOWN": 0, @@ -52,6 +54,7 @@ var ( "EVENT_TYPE_DEPLOYMENT_CREATED": 3, "EVENT_TYPE_DEPLOYMENT_UPDATED": 4, "EVENT_TYPE_INGRESS": 5, + "EVENT_TYPE_CRON_SCHEDULED": 6, } ) @@ -183,7 +186,7 @@ func (x EventsQuery_Order) Number() protoreflect.EnumNumber { // Deprecated: Use EventsQuery_Order.Descriptor instead. func (EventsQuery_Order) EnumDescriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20, 0} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 0} } type LogEvent struct { @@ -693,6 +696,101 @@ func (x *IngressEvent) GetError() string { return "" } +type CronScheduledEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeploymentKey string `protobuf:"bytes,1,opt,name=deployment_key,json=deploymentKey,proto3" json:"deployment_key,omitempty"` + VerbRef *schema.Ref `protobuf:"bytes,2,opt,name=verb_ref,json=verbRef,proto3" json:"verb_ref,omitempty"` + TimeStamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=time_stamp,json=timeStamp,proto3" json:"time_stamp,omitempty"` + Duration *durationpb.Duration `protobuf:"bytes,4,opt,name=duration,proto3" json:"duration,omitempty"` + ScheduledAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=scheduled_at,json=scheduledAt,proto3" json:"scheduled_at,omitempty"` + Schedule string `protobuf:"bytes,6,opt,name=schedule,proto3" json:"schedule,omitempty"` + Error *string `protobuf:"bytes,7,opt,name=error,proto3,oneof" json:"error,omitempty"` +} + +func (x *CronScheduledEvent) Reset() { + *x = CronScheduledEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CronScheduledEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CronScheduledEvent) ProtoMessage() {} + +func (x *CronScheduledEvent) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CronScheduledEvent.ProtoReflect.Descriptor instead. +func (*CronScheduledEvent) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{5} +} + +func (x *CronScheduledEvent) GetDeploymentKey() string { + if x != nil { + return x.DeploymentKey + } + return "" +} + +func (x *CronScheduledEvent) GetVerbRef() *schema.Ref { + if x != nil { + return x.VerbRef + } + return nil +} + +func (x *CronScheduledEvent) GetTimeStamp() *timestamppb.Timestamp { + if x != nil { + return x.TimeStamp + } + return nil +} + +func (x *CronScheduledEvent) GetDuration() *durationpb.Duration { + if x != nil { + return x.Duration + } + return nil +} + +func (x *CronScheduledEvent) GetScheduledAt() *timestamppb.Timestamp { + if x != nil { + return x.ScheduledAt + } + return nil +} + +func (x *CronScheduledEvent) GetSchedule() string { + if x != nil { + return x.Schedule + } + return "" +} + +func (x *CronScheduledEvent) GetError() string { + if x != nil && x.Error != nil { + return *x.Error + } + return "" +} + type Config struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -704,7 +802,7 @@ type Config struct { func (x *Config) Reset() { *x = Config{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[5] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -717,7 +815,7 @@ func (x *Config) String() string { func (*Config) ProtoMessage() {} func (x *Config) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[5] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -730,7 +828,7 @@ func (x *Config) ProtoReflect() protoreflect.Message { // Deprecated: Use Config.ProtoReflect.Descriptor instead. func (*Config) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{5} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{6} } func (x *Config) GetConfig() *schema.Config { @@ -752,7 +850,7 @@ type Data struct { func (x *Data) Reset() { *x = Data{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[6] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -765,7 +863,7 @@ func (x *Data) String() string { func (*Data) ProtoMessage() {} func (x *Data) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[6] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -778,7 +876,7 @@ func (x *Data) ProtoReflect() protoreflect.Message { // Deprecated: Use Data.ProtoReflect.Descriptor instead. func (*Data) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{6} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{7} } func (x *Data) GetData() *schema.Data { @@ -806,7 +904,7 @@ type Database struct { func (x *Database) Reset() { *x = Database{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[7] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -819,7 +917,7 @@ func (x *Database) String() string { func (*Database) ProtoMessage() {} func (x *Database) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[7] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -832,7 +930,7 @@ func (x *Database) ProtoReflect() protoreflect.Message { // Deprecated: Use Database.ProtoReflect.Descriptor instead. func (*Database) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{7} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{8} } func (x *Database) GetDatabase() *schema.Database { @@ -853,7 +951,7 @@ type Enum struct { func (x *Enum) Reset() { *x = Enum{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[8] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -866,7 +964,7 @@ func (x *Enum) String() string { func (*Enum) ProtoMessage() {} func (x *Enum) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[8] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -879,7 +977,7 @@ func (x *Enum) ProtoReflect() protoreflect.Message { // Deprecated: Use Enum.ProtoReflect.Descriptor instead. func (*Enum) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{8} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9} } func (x *Enum) GetEnum() *schema.Enum { @@ -900,7 +998,7 @@ type FSM struct { func (x *FSM) Reset() { *x = FSM{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[9] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -913,7 +1011,7 @@ func (x *FSM) String() string { func (*FSM) ProtoMessage() {} func (x *FSM) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[9] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -926,7 +1024,7 @@ func (x *FSM) ProtoReflect() protoreflect.Message { // Deprecated: Use FSM.ProtoReflect.Descriptor instead. func (*FSM) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{10} } func (x *FSM) GetFsm() *schema.FSM { @@ -947,7 +1045,7 @@ type Topic struct { func (x *Topic) Reset() { *x = Topic{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[10] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -960,7 +1058,7 @@ func (x *Topic) String() string { func (*Topic) ProtoMessage() {} func (x *Topic) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[10] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -973,7 +1071,7 @@ func (x *Topic) ProtoReflect() protoreflect.Message { // Deprecated: Use Topic.ProtoReflect.Descriptor instead. func (*Topic) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{10} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{11} } func (x *Topic) GetTopic() *schema.Topic { @@ -994,7 +1092,7 @@ type TypeAlias struct { func (x *TypeAlias) Reset() { *x = TypeAlias{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[11] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1007,7 +1105,7 @@ func (x *TypeAlias) String() string { func (*TypeAlias) ProtoMessage() {} func (x *TypeAlias) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[11] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1020,7 +1118,7 @@ func (x *TypeAlias) ProtoReflect() protoreflect.Message { // Deprecated: Use TypeAlias.ProtoReflect.Descriptor instead. func (*TypeAlias) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{11} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{12} } func (x *TypeAlias) GetTypealias() *schema.TypeAlias { @@ -1041,7 +1139,7 @@ type Secret struct { func (x *Secret) Reset() { *x = Secret{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[12] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1054,7 +1152,7 @@ func (x *Secret) String() string { func (*Secret) ProtoMessage() {} func (x *Secret) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[12] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1067,7 +1165,7 @@ func (x *Secret) ProtoReflect() protoreflect.Message { // Deprecated: Use Secret.ProtoReflect.Descriptor instead. func (*Secret) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{12} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{13} } func (x *Secret) GetSecret() *schema.Secret { @@ -1088,7 +1186,7 @@ type Subscription struct { func (x *Subscription) Reset() { *x = Subscription{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[13] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1101,7 +1199,7 @@ func (x *Subscription) String() string { func (*Subscription) ProtoMessage() {} func (x *Subscription) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[13] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1114,7 +1212,7 @@ func (x *Subscription) ProtoReflect() protoreflect.Message { // Deprecated: Use Subscription.ProtoReflect.Descriptor instead. func (*Subscription) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{13} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{14} } func (x *Subscription) GetSubscription() *schema.Subscription { @@ -1137,7 +1235,7 @@ type Verb struct { func (x *Verb) Reset() { *x = Verb{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[14] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1150,7 +1248,7 @@ func (x *Verb) String() string { func (*Verb) ProtoMessage() {} func (x *Verb) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[14] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1163,7 +1261,7 @@ func (x *Verb) ProtoReflect() protoreflect.Message { // Deprecated: Use Verb.ProtoReflect.Descriptor instead. func (*Verb) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{14} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{15} } func (x *Verb) GetVerb() *schema.Verb { @@ -1205,7 +1303,7 @@ type Module struct { func (x *Module) Reset() { *x = Module{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[15] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1218,7 +1316,7 @@ func (x *Module) String() string { func (*Module) ProtoMessage() {} func (x *Module) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[15] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1231,7 +1329,7 @@ func (x *Module) ProtoReflect() protoreflect.Message { // Deprecated: Use Module.ProtoReflect.Descriptor instead. func (*Module) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{15} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{16} } func (x *Module) GetName() string { @@ -1301,7 +1399,7 @@ type TopologyGroup struct { func (x *TopologyGroup) Reset() { *x = TopologyGroup{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[16] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1314,7 +1412,7 @@ func (x *TopologyGroup) String() string { func (*TopologyGroup) ProtoMessage() {} func (x *TopologyGroup) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[16] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1327,7 +1425,7 @@ func (x *TopologyGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use TopologyGroup.ProtoReflect.Descriptor instead. func (*TopologyGroup) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{16} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{17} } func (x *TopologyGroup) GetModules() []string { @@ -1348,7 +1446,7 @@ type Topology struct { func (x *Topology) Reset() { *x = Topology{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[17] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1361,7 +1459,7 @@ func (x *Topology) String() string { func (*Topology) ProtoMessage() {} func (x *Topology) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[17] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1374,7 +1472,7 @@ func (x *Topology) ProtoReflect() protoreflect.Message { // Deprecated: Use Topology.ProtoReflect.Descriptor instead. func (*Topology) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{17} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{18} } func (x *Topology) GetLevels() []*TopologyGroup { @@ -1393,7 +1491,7 @@ type GetModulesRequest struct { func (x *GetModulesRequest) Reset() { *x = GetModulesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[18] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1406,7 +1504,7 @@ func (x *GetModulesRequest) String() string { func (*GetModulesRequest) ProtoMessage() {} func (x *GetModulesRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[18] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1419,7 +1517,7 @@ func (x *GetModulesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetModulesRequest.ProtoReflect.Descriptor instead. func (*GetModulesRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{18} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{19} } type GetModulesResponse struct { @@ -1434,7 +1532,7 @@ type GetModulesResponse struct { func (x *GetModulesResponse) Reset() { *x = GetModulesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[19] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1447,7 +1545,7 @@ func (x *GetModulesResponse) String() string { func (*GetModulesResponse) ProtoMessage() {} func (x *GetModulesResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[19] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1460,7 +1558,7 @@ func (x *GetModulesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetModulesResponse.ProtoReflect.Descriptor instead. func (*GetModulesResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{19} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20} } func (x *GetModulesResponse) GetModules() []*Module { @@ -1491,7 +1589,7 @@ type EventsQuery struct { func (x *EventsQuery) Reset() { *x = EventsQuery{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[20] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1504,7 +1602,7 @@ func (x *EventsQuery) String() string { func (*EventsQuery) ProtoMessage() {} func (x *EventsQuery) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[20] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1517,7 +1615,7 @@ func (x *EventsQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery.ProtoReflect.Descriptor instead. func (*EventsQuery) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21} } func (x *EventsQuery) GetFilters() []*EventsQuery_Filter { @@ -1553,7 +1651,7 @@ type StreamEventsRequest struct { func (x *StreamEventsRequest) Reset() { *x = StreamEventsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[21] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1566,7 +1664,7 @@ func (x *StreamEventsRequest) String() string { func (*StreamEventsRequest) ProtoMessage() {} func (x *StreamEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[21] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1579,7 +1677,7 @@ func (x *StreamEventsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamEventsRequest.ProtoReflect.Descriptor instead. func (*StreamEventsRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{22} } func (x *StreamEventsRequest) GetUpdateInterval() *durationpb.Duration { @@ -1607,7 +1705,7 @@ type StreamEventsResponse struct { func (x *StreamEventsResponse) Reset() { *x = StreamEventsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[22] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1620,7 +1718,7 @@ func (x *StreamEventsResponse) String() string { func (*StreamEventsResponse) ProtoMessage() {} func (x *StreamEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[22] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1633,7 +1731,7 @@ func (x *StreamEventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamEventsResponse.ProtoReflect.Descriptor instead. func (*StreamEventsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{22} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23} } func (x *StreamEventsResponse) GetEvents() []*Event { @@ -1658,13 +1756,14 @@ type Event struct { // *Event_DeploymentCreated // *Event_DeploymentUpdated // *Event_Ingress + // *Event_CronScheduled Entry isEvent_Entry `protobuf_oneof:"entry"` } func (x *Event) Reset() { *x = Event{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[23] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1677,7 +1776,7 @@ func (x *Event) String() string { func (*Event) ProtoMessage() {} func (x *Event) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[23] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1690,7 +1789,7 @@ func (x *Event) ProtoReflect() protoreflect.Message { // Deprecated: Use Event.ProtoReflect.Descriptor instead. func (*Event) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{24} } func (x *Event) GetTimeStamp() *timestamppb.Timestamp { @@ -1749,6 +1848,13 @@ func (x *Event) GetIngress() *IngressEvent { return nil } +func (x *Event) GetCronScheduled() *CronScheduledEvent { + if x, ok := x.GetEntry().(*Event_CronScheduled); ok { + return x.CronScheduled + } + return nil +} + type isEvent_Entry interface { isEvent_Entry() } @@ -1773,6 +1879,10 @@ type Event_Ingress struct { Ingress *IngressEvent `protobuf:"bytes,7,opt,name=ingress,proto3,oneof"` } +type Event_CronScheduled struct { + CronScheduled *CronScheduledEvent `protobuf:"bytes,8,opt,name=cron_scheduled,json=cronScheduled,proto3,oneof"` +} + func (*Event_Log) isEvent_Entry() {} func (*Event_Call) isEvent_Entry() {} @@ -1783,6 +1893,8 @@ func (*Event_DeploymentUpdated) isEvent_Entry() {} func (*Event_Ingress) isEvent_Entry() {} +func (*Event_CronScheduled) isEvent_Entry() {} + type GetEventsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1796,7 +1908,7 @@ type GetEventsResponse struct { func (x *GetEventsResponse) Reset() { *x = GetEventsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[24] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1809,7 +1921,7 @@ func (x *GetEventsResponse) String() string { func (*GetEventsResponse) ProtoMessage() {} func (x *GetEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[24] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1822,7 +1934,7 @@ func (x *GetEventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEventsResponse.ProtoReflect.Descriptor instead. func (*GetEventsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{24} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{25} } func (x *GetEventsResponse) GetEvents() []*Event { @@ -1851,7 +1963,7 @@ type EventsQuery_LimitFilter struct { func (x *EventsQuery_LimitFilter) Reset() { *x = EventsQuery_LimitFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[26] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1864,7 +1976,7 @@ func (x *EventsQuery_LimitFilter) String() string { func (*EventsQuery_LimitFilter) ProtoMessage() {} func (x *EventsQuery_LimitFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[26] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1877,7 +1989,7 @@ func (x *EventsQuery_LimitFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_LimitFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_LimitFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20, 0} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 0} } func (x *EventsQuery_LimitFilter) GetLimit() int32 { @@ -1899,7 +2011,7 @@ type EventsQuery_LogLevelFilter struct { func (x *EventsQuery_LogLevelFilter) Reset() { *x = EventsQuery_LogLevelFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[27] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1912,7 +2024,7 @@ func (x *EventsQuery_LogLevelFilter) String() string { func (*EventsQuery_LogLevelFilter) ProtoMessage() {} func (x *EventsQuery_LogLevelFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[27] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1925,7 +2037,7 @@ func (x *EventsQuery_LogLevelFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_LogLevelFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_LogLevelFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20, 1} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 1} } func (x *EventsQuery_LogLevelFilter) GetLogLevel() LogLevel { @@ -1947,7 +2059,7 @@ type EventsQuery_DeploymentFilter struct { func (x *EventsQuery_DeploymentFilter) Reset() { *x = EventsQuery_DeploymentFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[28] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1960,7 +2072,7 @@ func (x *EventsQuery_DeploymentFilter) String() string { func (*EventsQuery_DeploymentFilter) ProtoMessage() {} func (x *EventsQuery_DeploymentFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[28] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1973,7 +2085,7 @@ func (x *EventsQuery_DeploymentFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_DeploymentFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_DeploymentFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20, 2} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 2} } func (x *EventsQuery_DeploymentFilter) GetDeployments() []string { @@ -1995,7 +2107,7 @@ type EventsQuery_RequestFilter struct { func (x *EventsQuery_RequestFilter) Reset() { *x = EventsQuery_RequestFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[29] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2008,7 +2120,7 @@ func (x *EventsQuery_RequestFilter) String() string { func (*EventsQuery_RequestFilter) ProtoMessage() {} func (x *EventsQuery_RequestFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[29] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2021,7 +2133,7 @@ func (x *EventsQuery_RequestFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_RequestFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_RequestFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20, 3} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 3} } func (x *EventsQuery_RequestFilter) GetRequests() []string { @@ -2043,7 +2155,7 @@ type EventsQuery_EventTypeFilter struct { func (x *EventsQuery_EventTypeFilter) Reset() { *x = EventsQuery_EventTypeFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[30] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2056,7 +2168,7 @@ func (x *EventsQuery_EventTypeFilter) String() string { func (*EventsQuery_EventTypeFilter) ProtoMessage() {} func (x *EventsQuery_EventTypeFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[30] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2069,7 +2181,7 @@ func (x *EventsQuery_EventTypeFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_EventTypeFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_EventTypeFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20, 4} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 4} } func (x *EventsQuery_EventTypeFilter) GetEventTypes() []EventType { @@ -2094,7 +2206,7 @@ type EventsQuery_TimeFilter struct { func (x *EventsQuery_TimeFilter) Reset() { *x = EventsQuery_TimeFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[31] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2107,7 +2219,7 @@ func (x *EventsQuery_TimeFilter) String() string { func (*EventsQuery_TimeFilter) ProtoMessage() {} func (x *EventsQuery_TimeFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[31] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2120,7 +2232,7 @@ func (x *EventsQuery_TimeFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_TimeFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_TimeFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20, 5} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 5} } func (x *EventsQuery_TimeFilter) GetOlderThan() *timestamppb.Timestamp { @@ -2152,7 +2264,7 @@ type EventsQuery_IDFilter struct { func (x *EventsQuery_IDFilter) Reset() { *x = EventsQuery_IDFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[32] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2165,7 +2277,7 @@ func (x *EventsQuery_IDFilter) String() string { func (*EventsQuery_IDFilter) ProtoMessage() {} func (x *EventsQuery_IDFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[32] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2178,7 +2290,7 @@ func (x *EventsQuery_IDFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_IDFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_IDFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20, 6} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 6} } func (x *EventsQuery_IDFilter) GetLowerThan() int64 { @@ -2209,7 +2321,7 @@ type EventsQuery_CallFilter struct { func (x *EventsQuery_CallFilter) Reset() { *x = EventsQuery_CallFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[33] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2222,7 +2334,7 @@ func (x *EventsQuery_CallFilter) String() string { func (*EventsQuery_CallFilter) ProtoMessage() {} func (x *EventsQuery_CallFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[33] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2235,7 +2347,7 @@ func (x *EventsQuery_CallFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_CallFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_CallFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20, 7} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 7} } func (x *EventsQuery_CallFilter) GetDestModule() string { @@ -2271,7 +2383,7 @@ type EventsQuery_ModuleFilter struct { func (x *EventsQuery_ModuleFilter) Reset() { *x = EventsQuery_ModuleFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[34] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2284,7 +2396,7 @@ func (x *EventsQuery_ModuleFilter) String() string { func (*EventsQuery_ModuleFilter) ProtoMessage() {} func (x *EventsQuery_ModuleFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[34] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2297,7 +2409,7 @@ func (x *EventsQuery_ModuleFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_ModuleFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_ModuleFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20, 8} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 8} } func (x *EventsQuery_ModuleFilter) GetModule() string { @@ -2338,7 +2450,7 @@ type EventsQuery_Filter struct { func (x *EventsQuery_Filter) Reset() { *x = EventsQuery_Filter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[35] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2351,7 +2463,7 @@ func (x *EventsQuery_Filter) String() string { func (*EventsQuery_Filter) ProtoMessage() {} func (x *EventsQuery_Filter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[35] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2364,7 +2476,7 @@ func (x *EventsQuery_Filter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_Filter.ProtoReflect.Descriptor instead. func (*EventsQuery_Filter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{20, 9} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 9} } func (m *EventsQuery_Filter) GetFilter() isEventsQuery_Filter_Filter { @@ -2623,251 +2735,279 @@ var file_xyz_block_ftl_v1_console_console_proto_rawDesc = []byte{ 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x6b, 0x65, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x22, 0x51, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 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, 0x22, 0x49, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x39, - 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, - 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x35, 0x0a, 0x03, 0x46, 0x53, 0x4d, - 0x12, 0x2e, 0x0a, 0x03, 0x66, 0x73, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x6b, 0x65, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xe6, 0x02, + 0x0a, 0x12, 0x43, 0x72, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x08, 0x76, + 0x65, 0x72, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x53, 0x4d, 0x52, 0x03, 0x66, 0x73, 0x6d, - 0x22, 0x3d, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x22, - 0x4d, 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, - 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x52, 0x09, 0x74, 0x79, 0x70, 0x65, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x41, - 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, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x62, 0x52, 0x65, 0x66, 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x03, 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, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 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, 0x52, 0x08, 0x64, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 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, 0x52, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x12, 0x19, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, + 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x41, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x51, 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, + 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x22, 0x49, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x22, 0x39, 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, 0x76, 0x31, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x65, 0x6e, + 0x75, 0x6d, 0x22, 0x35, 0x0a, 0x03, 0x46, 0x53, 0x4d, 0x12, 0x2e, 0x0a, 0x03, 0x66, 0x73, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x46, 0x53, 0x4d, 0x52, 0x03, 0x66, 0x73, 0x6d, 0x22, 0x3d, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x22, 0x4d, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x22, 0x59, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x49, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, - 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x81, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, - 0x22, 0xd9, 0x02, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x6f, 0x6c, 0x65, 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, 0x76, - 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, - 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 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, + 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x09, 0x74, 0x79, + 0x70, 0x65, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x41, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x59, 0x0a, 0x0c, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x0c, 0x73, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x81, 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, 0x76, 0x31, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x22, 0xd9, 0x02, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, + 0x6c, 0x65, 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, 0x76, - 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, - 0x67, 0x79, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x22, 0xe4, 0x0d, 0x0a, - 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x46, 0x0a, 0x07, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, - 0x75, 0x65, 0x72, 0x79, 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, 0x41, 0x0a, 0x05, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, - 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, 0x51, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 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, 0x76, 0x31, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 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, 0x57, 0x0a, 0x0f, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0b, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, - 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 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, 0xdb, 0x05, 0x0a, 0x06, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x49, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x53, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x6c, 0x65, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x08, 0x74, 0x6f, 0x70, + 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x22, 0xe4, 0x0d, 0x0a, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x46, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 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, 0x41, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 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, 0x5a, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 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, 0x51, 0x0a, 0x0e, 0x4c, + 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3f, 0x0a, + 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 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, 0x57, 0x0a, 0x0f, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, - 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, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x73, 0x6f, 0x6c, 0x65, 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, 0xdb, 0x05, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x49, 0x0a, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, + 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x53, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, + 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, + 0x72, 0x79, 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, 0x5a, 0x0a, + 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 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, 0x58, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 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, 0x46, 0x0a, - 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, + 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 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, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, - 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x72, 0x79, 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, 0x58, 0x0a, 0x0b, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x49, 0x44, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, - 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x61, 0x6c, - 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, - 0x4c, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 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, 0x1a, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, - 0x43, 0x10, 0x01, 0x22, 0xaf, 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, 0x3b, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 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, 0x4f, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, - 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xd8, 0x03, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x03, 0x6c, - 0x6f, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 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, 0x46, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x40, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x2e, 0x49, 0x44, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x46, 0x0a, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x4c, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x03, - 0x6c, 0x6f, 0x67, 0x12, 0x39, 0x0a, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x43, 0x61, 0x6c, - 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x61, - 0x0a, 0x12, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, + 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 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, 0x1a, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, + 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0xaf, 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, 0x3b, 0x0a, + 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, + 0x65, 0x72, 0x79, 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, 0x4f, + 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, + 0xaf, 0x04, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, + 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x67, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x39, 0x0a, 0x04, + 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, - 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, - 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x42, 0x0a, + 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x55, 0x0a, 0x0e, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, + 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x72, 0x6f, 0x6e, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x74, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, @@ -2875,7 +3015,7 @@ var file_xyz_block_ftl_v1_console_console_proto_rawDesc = []byte{ 0x65, 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, 0x2a, 0xaa, 0x01, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, + 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x2a, 0xc9, 0x01, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4c, 0x4f, 0x47, 0x10, @@ -2886,47 +3026,49 @@ var file_xyz_block_ftl_v1_console_console_proto_rawDesc = []byte{ 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x47, 0x52, 0x45, - 0x53, 0x53, 0x10, 0x05, 0x2a, 0x88, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, - 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x01, 0x12, 0x13, 0x0a, - 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, - 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, - 0x56, 0x45, 0x4c, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x0d, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, - 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x11, 0x32, - 0x97, 0x03, 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, + 0x53, 0x53, 0x10, 0x05, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x43, 0x52, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, + 0x44, 0x10, 0x06, 0x2a, 0x88, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, + 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, + 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, + 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x49, + 0x4e, 0x46, 0x4f, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, + 0x45, 0x4c, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x0d, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, + 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x11, 0x32, 0x97, + 0x03, 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, 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, 0x76, 0x31, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 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, + 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, 0x76, 0x31, 0x2e, 0x63, + 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 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, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, - 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x2b, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 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, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, - 0x65, 0x3b, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x2b, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, + 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 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, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, + 0x3b, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2942,7 +3084,7 @@ func file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP() []byte { } var file_xyz_block_ftl_v1_console_console_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_xyz_block_ftl_v1_console_console_proto_msgTypes = make([]protoimpl.MessageInfo, 36) +var file_xyz_block_ftl_v1_console_console_proto_msgTypes = make([]protoimpl.MessageInfo, 37) var file_xyz_block_ftl_v1_console_console_proto_goTypes = []any{ (EventType)(0), // 0: xyz.block.ftl.v1.console.EventType (LogLevel)(0), // 1: xyz.block.ftl.v1.console.LogLevel @@ -2952,118 +3094,124 @@ var file_xyz_block_ftl_v1_console_console_proto_goTypes = []any{ (*DeploymentCreatedEvent)(nil), // 5: xyz.block.ftl.v1.console.DeploymentCreatedEvent (*DeploymentUpdatedEvent)(nil), // 6: xyz.block.ftl.v1.console.DeploymentUpdatedEvent (*IngressEvent)(nil), // 7: xyz.block.ftl.v1.console.IngressEvent - (*Config)(nil), // 8: xyz.block.ftl.v1.console.Config - (*Data)(nil), // 9: xyz.block.ftl.v1.console.Data - (*Database)(nil), // 10: xyz.block.ftl.v1.console.Database - (*Enum)(nil), // 11: xyz.block.ftl.v1.console.Enum - (*FSM)(nil), // 12: xyz.block.ftl.v1.console.FSM - (*Topic)(nil), // 13: xyz.block.ftl.v1.console.Topic - (*TypeAlias)(nil), // 14: xyz.block.ftl.v1.console.TypeAlias - (*Secret)(nil), // 15: xyz.block.ftl.v1.console.Secret - (*Subscription)(nil), // 16: xyz.block.ftl.v1.console.Subscription - (*Verb)(nil), // 17: xyz.block.ftl.v1.console.Verb - (*Module)(nil), // 18: xyz.block.ftl.v1.console.Module - (*TopologyGroup)(nil), // 19: xyz.block.ftl.v1.console.TopologyGroup - (*Topology)(nil), // 20: xyz.block.ftl.v1.console.Topology - (*GetModulesRequest)(nil), // 21: xyz.block.ftl.v1.console.GetModulesRequest - (*GetModulesResponse)(nil), // 22: xyz.block.ftl.v1.console.GetModulesResponse - (*EventsQuery)(nil), // 23: xyz.block.ftl.v1.console.EventsQuery - (*StreamEventsRequest)(nil), // 24: xyz.block.ftl.v1.console.StreamEventsRequest - (*StreamEventsResponse)(nil), // 25: xyz.block.ftl.v1.console.StreamEventsResponse - (*Event)(nil), // 26: xyz.block.ftl.v1.console.Event - (*GetEventsResponse)(nil), // 27: xyz.block.ftl.v1.console.GetEventsResponse - nil, // 28: xyz.block.ftl.v1.console.LogEvent.AttributesEntry - (*EventsQuery_LimitFilter)(nil), // 29: xyz.block.ftl.v1.console.EventsQuery.LimitFilter - (*EventsQuery_LogLevelFilter)(nil), // 30: xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter - (*EventsQuery_DeploymentFilter)(nil), // 31: xyz.block.ftl.v1.console.EventsQuery.DeploymentFilter - (*EventsQuery_RequestFilter)(nil), // 32: xyz.block.ftl.v1.console.EventsQuery.RequestFilter - (*EventsQuery_EventTypeFilter)(nil), // 33: xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter - (*EventsQuery_TimeFilter)(nil), // 34: xyz.block.ftl.v1.console.EventsQuery.TimeFilter - (*EventsQuery_IDFilter)(nil), // 35: xyz.block.ftl.v1.console.EventsQuery.IDFilter - (*EventsQuery_CallFilter)(nil), // 36: xyz.block.ftl.v1.console.EventsQuery.CallFilter - (*EventsQuery_ModuleFilter)(nil), // 37: xyz.block.ftl.v1.console.EventsQuery.ModuleFilter - (*EventsQuery_Filter)(nil), // 38: xyz.block.ftl.v1.console.EventsQuery.Filter - (*timestamppb.Timestamp)(nil), // 39: google.protobuf.Timestamp - (*schema.Ref)(nil), // 40: xyz.block.ftl.v1.schema.Ref - (*durationpb.Duration)(nil), // 41: google.protobuf.Duration - (*schema.Config)(nil), // 42: xyz.block.ftl.v1.schema.Config - (*schema.Data)(nil), // 43: xyz.block.ftl.v1.schema.Data - (*schema.Database)(nil), // 44: xyz.block.ftl.v1.schema.Database - (*schema.Enum)(nil), // 45: xyz.block.ftl.v1.schema.Enum - (*schema.FSM)(nil), // 46: xyz.block.ftl.v1.schema.FSM - (*schema.Topic)(nil), // 47: xyz.block.ftl.v1.schema.Topic - (*schema.TypeAlias)(nil), // 48: xyz.block.ftl.v1.schema.TypeAlias - (*schema.Secret)(nil), // 49: xyz.block.ftl.v1.schema.Secret - (*schema.Subscription)(nil), // 50: xyz.block.ftl.v1.schema.Subscription - (*schema.Verb)(nil), // 51: xyz.block.ftl.v1.schema.Verb - (*v1.PingRequest)(nil), // 52: xyz.block.ftl.v1.PingRequest - (*v1.PingResponse)(nil), // 53: xyz.block.ftl.v1.PingResponse + (*CronScheduledEvent)(nil), // 8: xyz.block.ftl.v1.console.CronScheduledEvent + (*Config)(nil), // 9: xyz.block.ftl.v1.console.Config + (*Data)(nil), // 10: xyz.block.ftl.v1.console.Data + (*Database)(nil), // 11: xyz.block.ftl.v1.console.Database + (*Enum)(nil), // 12: xyz.block.ftl.v1.console.Enum + (*FSM)(nil), // 13: xyz.block.ftl.v1.console.FSM + (*Topic)(nil), // 14: xyz.block.ftl.v1.console.Topic + (*TypeAlias)(nil), // 15: xyz.block.ftl.v1.console.TypeAlias + (*Secret)(nil), // 16: xyz.block.ftl.v1.console.Secret + (*Subscription)(nil), // 17: xyz.block.ftl.v1.console.Subscription + (*Verb)(nil), // 18: xyz.block.ftl.v1.console.Verb + (*Module)(nil), // 19: xyz.block.ftl.v1.console.Module + (*TopologyGroup)(nil), // 20: xyz.block.ftl.v1.console.TopologyGroup + (*Topology)(nil), // 21: xyz.block.ftl.v1.console.Topology + (*GetModulesRequest)(nil), // 22: xyz.block.ftl.v1.console.GetModulesRequest + (*GetModulesResponse)(nil), // 23: xyz.block.ftl.v1.console.GetModulesResponse + (*EventsQuery)(nil), // 24: xyz.block.ftl.v1.console.EventsQuery + (*StreamEventsRequest)(nil), // 25: xyz.block.ftl.v1.console.StreamEventsRequest + (*StreamEventsResponse)(nil), // 26: xyz.block.ftl.v1.console.StreamEventsResponse + (*Event)(nil), // 27: xyz.block.ftl.v1.console.Event + (*GetEventsResponse)(nil), // 28: xyz.block.ftl.v1.console.GetEventsResponse + nil, // 29: xyz.block.ftl.v1.console.LogEvent.AttributesEntry + (*EventsQuery_LimitFilter)(nil), // 30: xyz.block.ftl.v1.console.EventsQuery.LimitFilter + (*EventsQuery_LogLevelFilter)(nil), // 31: xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter + (*EventsQuery_DeploymentFilter)(nil), // 32: xyz.block.ftl.v1.console.EventsQuery.DeploymentFilter + (*EventsQuery_RequestFilter)(nil), // 33: xyz.block.ftl.v1.console.EventsQuery.RequestFilter + (*EventsQuery_EventTypeFilter)(nil), // 34: xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter + (*EventsQuery_TimeFilter)(nil), // 35: xyz.block.ftl.v1.console.EventsQuery.TimeFilter + (*EventsQuery_IDFilter)(nil), // 36: xyz.block.ftl.v1.console.EventsQuery.IDFilter + (*EventsQuery_CallFilter)(nil), // 37: xyz.block.ftl.v1.console.EventsQuery.CallFilter + (*EventsQuery_ModuleFilter)(nil), // 38: xyz.block.ftl.v1.console.EventsQuery.ModuleFilter + (*EventsQuery_Filter)(nil), // 39: xyz.block.ftl.v1.console.EventsQuery.Filter + (*timestamppb.Timestamp)(nil), // 40: google.protobuf.Timestamp + (*schema.Ref)(nil), // 41: xyz.block.ftl.v1.schema.Ref + (*durationpb.Duration)(nil), // 42: google.protobuf.Duration + (*schema.Config)(nil), // 43: xyz.block.ftl.v1.schema.Config + (*schema.Data)(nil), // 44: xyz.block.ftl.v1.schema.Data + (*schema.Database)(nil), // 45: xyz.block.ftl.v1.schema.Database + (*schema.Enum)(nil), // 46: xyz.block.ftl.v1.schema.Enum + (*schema.FSM)(nil), // 47: xyz.block.ftl.v1.schema.FSM + (*schema.Topic)(nil), // 48: xyz.block.ftl.v1.schema.Topic + (*schema.TypeAlias)(nil), // 49: xyz.block.ftl.v1.schema.TypeAlias + (*schema.Secret)(nil), // 50: xyz.block.ftl.v1.schema.Secret + (*schema.Subscription)(nil), // 51: xyz.block.ftl.v1.schema.Subscription + (*schema.Verb)(nil), // 52: xyz.block.ftl.v1.schema.Verb + (*v1.PingRequest)(nil), // 53: xyz.block.ftl.v1.PingRequest + (*v1.PingResponse)(nil), // 54: xyz.block.ftl.v1.PingResponse } var file_xyz_block_ftl_v1_console_console_proto_depIdxs = []int32{ - 39, // 0: xyz.block.ftl.v1.console.LogEvent.time_stamp:type_name -> google.protobuf.Timestamp - 28, // 1: xyz.block.ftl.v1.console.LogEvent.attributes:type_name -> xyz.block.ftl.v1.console.LogEvent.AttributesEntry - 39, // 2: xyz.block.ftl.v1.console.CallEvent.time_stamp:type_name -> google.protobuf.Timestamp - 40, // 3: xyz.block.ftl.v1.console.CallEvent.source_verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref - 40, // 4: xyz.block.ftl.v1.console.CallEvent.destination_verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref - 41, // 5: xyz.block.ftl.v1.console.CallEvent.duration:type_name -> google.protobuf.Duration - 40, // 6: xyz.block.ftl.v1.console.IngressEvent.verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref - 39, // 7: xyz.block.ftl.v1.console.IngressEvent.time_stamp:type_name -> google.protobuf.Timestamp - 41, // 8: xyz.block.ftl.v1.console.IngressEvent.duration:type_name -> google.protobuf.Duration - 42, // 9: xyz.block.ftl.v1.console.Config.config:type_name -> xyz.block.ftl.v1.schema.Config - 43, // 10: xyz.block.ftl.v1.console.Data.data:type_name -> xyz.block.ftl.v1.schema.Data - 44, // 11: xyz.block.ftl.v1.console.Database.database:type_name -> xyz.block.ftl.v1.schema.Database - 45, // 12: xyz.block.ftl.v1.console.Enum.enum:type_name -> xyz.block.ftl.v1.schema.Enum - 46, // 13: xyz.block.ftl.v1.console.FSM.fsm:type_name -> xyz.block.ftl.v1.schema.FSM - 47, // 14: xyz.block.ftl.v1.console.Topic.topic:type_name -> xyz.block.ftl.v1.schema.Topic - 48, // 15: xyz.block.ftl.v1.console.TypeAlias.typealias:type_name -> xyz.block.ftl.v1.schema.TypeAlias - 49, // 16: xyz.block.ftl.v1.console.Secret.secret:type_name -> xyz.block.ftl.v1.schema.Secret - 50, // 17: xyz.block.ftl.v1.console.Subscription.subscription:type_name -> xyz.block.ftl.v1.schema.Subscription - 51, // 18: xyz.block.ftl.v1.console.Verb.verb:type_name -> xyz.block.ftl.v1.schema.Verb - 17, // 19: xyz.block.ftl.v1.console.Module.verbs:type_name -> xyz.block.ftl.v1.console.Verb - 9, // 20: xyz.block.ftl.v1.console.Module.data:type_name -> xyz.block.ftl.v1.console.Data - 15, // 21: xyz.block.ftl.v1.console.Module.secrets:type_name -> xyz.block.ftl.v1.console.Secret - 8, // 22: xyz.block.ftl.v1.console.Module.configs:type_name -> xyz.block.ftl.v1.console.Config - 19, // 23: xyz.block.ftl.v1.console.Topology.levels:type_name -> xyz.block.ftl.v1.console.TopologyGroup - 18, // 24: xyz.block.ftl.v1.console.GetModulesResponse.modules:type_name -> xyz.block.ftl.v1.console.Module - 20, // 25: xyz.block.ftl.v1.console.GetModulesResponse.topology:type_name -> xyz.block.ftl.v1.console.Topology - 38, // 26: xyz.block.ftl.v1.console.EventsQuery.filters:type_name -> xyz.block.ftl.v1.console.EventsQuery.Filter - 2, // 27: xyz.block.ftl.v1.console.EventsQuery.order:type_name -> xyz.block.ftl.v1.console.EventsQuery.Order - 41, // 28: xyz.block.ftl.v1.console.StreamEventsRequest.update_interval:type_name -> google.protobuf.Duration - 23, // 29: xyz.block.ftl.v1.console.StreamEventsRequest.query:type_name -> xyz.block.ftl.v1.console.EventsQuery - 26, // 30: xyz.block.ftl.v1.console.StreamEventsResponse.events:type_name -> xyz.block.ftl.v1.console.Event - 39, // 31: xyz.block.ftl.v1.console.Event.time_stamp:type_name -> google.protobuf.Timestamp - 3, // 32: xyz.block.ftl.v1.console.Event.log:type_name -> xyz.block.ftl.v1.console.LogEvent - 4, // 33: xyz.block.ftl.v1.console.Event.call:type_name -> xyz.block.ftl.v1.console.CallEvent - 5, // 34: xyz.block.ftl.v1.console.Event.deployment_created:type_name -> xyz.block.ftl.v1.console.DeploymentCreatedEvent - 6, // 35: xyz.block.ftl.v1.console.Event.deployment_updated:type_name -> xyz.block.ftl.v1.console.DeploymentUpdatedEvent - 7, // 36: xyz.block.ftl.v1.console.Event.ingress:type_name -> xyz.block.ftl.v1.console.IngressEvent - 26, // 37: xyz.block.ftl.v1.console.GetEventsResponse.events:type_name -> xyz.block.ftl.v1.console.Event - 1, // 38: xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter.log_level:type_name -> xyz.block.ftl.v1.console.LogLevel - 0, // 39: xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter.event_types:type_name -> xyz.block.ftl.v1.console.EventType - 39, // 40: xyz.block.ftl.v1.console.EventsQuery.TimeFilter.older_than:type_name -> google.protobuf.Timestamp - 39, // 41: xyz.block.ftl.v1.console.EventsQuery.TimeFilter.newer_than:type_name -> google.protobuf.Timestamp - 29, // 42: xyz.block.ftl.v1.console.EventsQuery.Filter.limit:type_name -> xyz.block.ftl.v1.console.EventsQuery.LimitFilter - 30, // 43: xyz.block.ftl.v1.console.EventsQuery.Filter.log_level:type_name -> xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter - 31, // 44: xyz.block.ftl.v1.console.EventsQuery.Filter.deployments:type_name -> xyz.block.ftl.v1.console.EventsQuery.DeploymentFilter - 32, // 45: xyz.block.ftl.v1.console.EventsQuery.Filter.requests:type_name -> xyz.block.ftl.v1.console.EventsQuery.RequestFilter - 33, // 46: xyz.block.ftl.v1.console.EventsQuery.Filter.event_types:type_name -> xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter - 34, // 47: xyz.block.ftl.v1.console.EventsQuery.Filter.time:type_name -> xyz.block.ftl.v1.console.EventsQuery.TimeFilter - 35, // 48: xyz.block.ftl.v1.console.EventsQuery.Filter.id:type_name -> xyz.block.ftl.v1.console.EventsQuery.IDFilter - 36, // 49: xyz.block.ftl.v1.console.EventsQuery.Filter.call:type_name -> xyz.block.ftl.v1.console.EventsQuery.CallFilter - 37, // 50: xyz.block.ftl.v1.console.EventsQuery.Filter.module:type_name -> xyz.block.ftl.v1.console.EventsQuery.ModuleFilter - 52, // 51: xyz.block.ftl.v1.console.ConsoleService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 21, // 52: xyz.block.ftl.v1.console.ConsoleService.GetModules:input_type -> xyz.block.ftl.v1.console.GetModulesRequest - 24, // 53: xyz.block.ftl.v1.console.ConsoleService.StreamEvents:input_type -> xyz.block.ftl.v1.console.StreamEventsRequest - 23, // 54: xyz.block.ftl.v1.console.ConsoleService.GetEvents:input_type -> xyz.block.ftl.v1.console.EventsQuery - 53, // 55: xyz.block.ftl.v1.console.ConsoleService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 22, // 56: xyz.block.ftl.v1.console.ConsoleService.GetModules:output_type -> xyz.block.ftl.v1.console.GetModulesResponse - 25, // 57: xyz.block.ftl.v1.console.ConsoleService.StreamEvents:output_type -> xyz.block.ftl.v1.console.StreamEventsResponse - 27, // 58: xyz.block.ftl.v1.console.ConsoleService.GetEvents:output_type -> xyz.block.ftl.v1.console.GetEventsResponse - 55, // [55:59] is the sub-list for method output_type - 51, // [51:55] is the sub-list for method input_type - 51, // [51:51] is the sub-list for extension type_name - 51, // [51:51] is the sub-list for extension extendee - 0, // [0:51] is the sub-list for field type_name + 40, // 0: xyz.block.ftl.v1.console.LogEvent.time_stamp:type_name -> google.protobuf.Timestamp + 29, // 1: xyz.block.ftl.v1.console.LogEvent.attributes:type_name -> xyz.block.ftl.v1.console.LogEvent.AttributesEntry + 40, // 2: xyz.block.ftl.v1.console.CallEvent.time_stamp:type_name -> google.protobuf.Timestamp + 41, // 3: xyz.block.ftl.v1.console.CallEvent.source_verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref + 41, // 4: xyz.block.ftl.v1.console.CallEvent.destination_verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref + 42, // 5: xyz.block.ftl.v1.console.CallEvent.duration:type_name -> google.protobuf.Duration + 41, // 6: xyz.block.ftl.v1.console.IngressEvent.verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref + 40, // 7: xyz.block.ftl.v1.console.IngressEvent.time_stamp:type_name -> google.protobuf.Timestamp + 42, // 8: xyz.block.ftl.v1.console.IngressEvent.duration:type_name -> google.protobuf.Duration + 41, // 9: xyz.block.ftl.v1.console.CronScheduledEvent.verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref + 40, // 10: xyz.block.ftl.v1.console.CronScheduledEvent.time_stamp:type_name -> google.protobuf.Timestamp + 42, // 11: xyz.block.ftl.v1.console.CronScheduledEvent.duration:type_name -> google.protobuf.Duration + 40, // 12: xyz.block.ftl.v1.console.CronScheduledEvent.scheduled_at:type_name -> google.protobuf.Timestamp + 43, // 13: xyz.block.ftl.v1.console.Config.config:type_name -> xyz.block.ftl.v1.schema.Config + 44, // 14: xyz.block.ftl.v1.console.Data.data:type_name -> xyz.block.ftl.v1.schema.Data + 45, // 15: xyz.block.ftl.v1.console.Database.database:type_name -> xyz.block.ftl.v1.schema.Database + 46, // 16: xyz.block.ftl.v1.console.Enum.enum:type_name -> xyz.block.ftl.v1.schema.Enum + 47, // 17: xyz.block.ftl.v1.console.FSM.fsm:type_name -> xyz.block.ftl.v1.schema.FSM + 48, // 18: xyz.block.ftl.v1.console.Topic.topic:type_name -> xyz.block.ftl.v1.schema.Topic + 49, // 19: xyz.block.ftl.v1.console.TypeAlias.typealias:type_name -> xyz.block.ftl.v1.schema.TypeAlias + 50, // 20: xyz.block.ftl.v1.console.Secret.secret:type_name -> xyz.block.ftl.v1.schema.Secret + 51, // 21: xyz.block.ftl.v1.console.Subscription.subscription:type_name -> xyz.block.ftl.v1.schema.Subscription + 52, // 22: xyz.block.ftl.v1.console.Verb.verb:type_name -> xyz.block.ftl.v1.schema.Verb + 18, // 23: xyz.block.ftl.v1.console.Module.verbs:type_name -> xyz.block.ftl.v1.console.Verb + 10, // 24: xyz.block.ftl.v1.console.Module.data:type_name -> xyz.block.ftl.v1.console.Data + 16, // 25: xyz.block.ftl.v1.console.Module.secrets:type_name -> xyz.block.ftl.v1.console.Secret + 9, // 26: xyz.block.ftl.v1.console.Module.configs:type_name -> xyz.block.ftl.v1.console.Config + 20, // 27: xyz.block.ftl.v1.console.Topology.levels:type_name -> xyz.block.ftl.v1.console.TopologyGroup + 19, // 28: xyz.block.ftl.v1.console.GetModulesResponse.modules:type_name -> xyz.block.ftl.v1.console.Module + 21, // 29: xyz.block.ftl.v1.console.GetModulesResponse.topology:type_name -> xyz.block.ftl.v1.console.Topology + 39, // 30: xyz.block.ftl.v1.console.EventsQuery.filters:type_name -> xyz.block.ftl.v1.console.EventsQuery.Filter + 2, // 31: xyz.block.ftl.v1.console.EventsQuery.order:type_name -> xyz.block.ftl.v1.console.EventsQuery.Order + 42, // 32: xyz.block.ftl.v1.console.StreamEventsRequest.update_interval:type_name -> google.protobuf.Duration + 24, // 33: xyz.block.ftl.v1.console.StreamEventsRequest.query:type_name -> xyz.block.ftl.v1.console.EventsQuery + 27, // 34: xyz.block.ftl.v1.console.StreamEventsResponse.events:type_name -> xyz.block.ftl.v1.console.Event + 40, // 35: xyz.block.ftl.v1.console.Event.time_stamp:type_name -> google.protobuf.Timestamp + 3, // 36: xyz.block.ftl.v1.console.Event.log:type_name -> xyz.block.ftl.v1.console.LogEvent + 4, // 37: xyz.block.ftl.v1.console.Event.call:type_name -> xyz.block.ftl.v1.console.CallEvent + 5, // 38: xyz.block.ftl.v1.console.Event.deployment_created:type_name -> xyz.block.ftl.v1.console.DeploymentCreatedEvent + 6, // 39: xyz.block.ftl.v1.console.Event.deployment_updated:type_name -> xyz.block.ftl.v1.console.DeploymentUpdatedEvent + 7, // 40: xyz.block.ftl.v1.console.Event.ingress:type_name -> xyz.block.ftl.v1.console.IngressEvent + 8, // 41: xyz.block.ftl.v1.console.Event.cron_scheduled:type_name -> xyz.block.ftl.v1.console.CronScheduledEvent + 27, // 42: xyz.block.ftl.v1.console.GetEventsResponse.events:type_name -> xyz.block.ftl.v1.console.Event + 1, // 43: xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter.log_level:type_name -> xyz.block.ftl.v1.console.LogLevel + 0, // 44: xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter.event_types:type_name -> xyz.block.ftl.v1.console.EventType + 40, // 45: xyz.block.ftl.v1.console.EventsQuery.TimeFilter.older_than:type_name -> google.protobuf.Timestamp + 40, // 46: xyz.block.ftl.v1.console.EventsQuery.TimeFilter.newer_than:type_name -> google.protobuf.Timestamp + 30, // 47: xyz.block.ftl.v1.console.EventsQuery.Filter.limit:type_name -> xyz.block.ftl.v1.console.EventsQuery.LimitFilter + 31, // 48: xyz.block.ftl.v1.console.EventsQuery.Filter.log_level:type_name -> xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter + 32, // 49: xyz.block.ftl.v1.console.EventsQuery.Filter.deployments:type_name -> xyz.block.ftl.v1.console.EventsQuery.DeploymentFilter + 33, // 50: xyz.block.ftl.v1.console.EventsQuery.Filter.requests:type_name -> xyz.block.ftl.v1.console.EventsQuery.RequestFilter + 34, // 51: xyz.block.ftl.v1.console.EventsQuery.Filter.event_types:type_name -> xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter + 35, // 52: xyz.block.ftl.v1.console.EventsQuery.Filter.time:type_name -> xyz.block.ftl.v1.console.EventsQuery.TimeFilter + 36, // 53: xyz.block.ftl.v1.console.EventsQuery.Filter.id:type_name -> xyz.block.ftl.v1.console.EventsQuery.IDFilter + 37, // 54: xyz.block.ftl.v1.console.EventsQuery.Filter.call:type_name -> xyz.block.ftl.v1.console.EventsQuery.CallFilter + 38, // 55: xyz.block.ftl.v1.console.EventsQuery.Filter.module:type_name -> xyz.block.ftl.v1.console.EventsQuery.ModuleFilter + 53, // 56: xyz.block.ftl.v1.console.ConsoleService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 22, // 57: xyz.block.ftl.v1.console.ConsoleService.GetModules:input_type -> xyz.block.ftl.v1.console.GetModulesRequest + 25, // 58: xyz.block.ftl.v1.console.ConsoleService.StreamEvents:input_type -> xyz.block.ftl.v1.console.StreamEventsRequest + 24, // 59: xyz.block.ftl.v1.console.ConsoleService.GetEvents:input_type -> xyz.block.ftl.v1.console.EventsQuery + 54, // 60: xyz.block.ftl.v1.console.ConsoleService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 23, // 61: xyz.block.ftl.v1.console.ConsoleService.GetModules:output_type -> xyz.block.ftl.v1.console.GetModulesResponse + 26, // 62: xyz.block.ftl.v1.console.ConsoleService.StreamEvents:output_type -> xyz.block.ftl.v1.console.StreamEventsResponse + 28, // 63: xyz.block.ftl.v1.console.ConsoleService.GetEvents:output_type -> xyz.block.ftl.v1.console.GetEventsResponse + 60, // [60:64] is the sub-list for method output_type + 56, // [56:60] is the sub-list for method input_type + 56, // [56:56] is the sub-list for extension type_name + 56, // [56:56] is the sub-list for extension extendee + 0, // [0:56] is the sub-list for field type_name } func init() { file_xyz_block_ftl_v1_console_console_proto_init() } @@ -3133,7 +3281,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*Config); i { + switch v := v.(*CronScheduledEvent); i { case 0: return &v.state case 1: @@ -3145,7 +3293,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*Data); i { + switch v := v.(*Config); i { case 0: return &v.state case 1: @@ -3157,7 +3305,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*Database); i { + switch v := v.(*Data); i { case 0: return &v.state case 1: @@ -3169,7 +3317,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*Enum); i { + switch v := v.(*Database); i { case 0: return &v.state case 1: @@ -3181,7 +3329,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*FSM); i { + switch v := v.(*Enum); i { case 0: return &v.state case 1: @@ -3193,7 +3341,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*Topic); i { + switch v := v.(*FSM); i { case 0: return &v.state case 1: @@ -3205,7 +3353,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*TypeAlias); i { + switch v := v.(*Topic); i { case 0: return &v.state case 1: @@ -3217,7 +3365,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*Secret); i { + switch v := v.(*TypeAlias); i { case 0: return &v.state case 1: @@ -3229,7 +3377,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*Subscription); i { + switch v := v.(*Secret); i { case 0: return &v.state case 1: @@ -3241,7 +3389,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*Verb); i { + switch v := v.(*Subscription); i { case 0: return &v.state case 1: @@ -3253,7 +3401,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*Module); i { + switch v := v.(*Verb); i { case 0: return &v.state case 1: @@ -3265,7 +3413,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*TopologyGroup); i { + switch v := v.(*Module); i { case 0: return &v.state case 1: @@ -3277,7 +3425,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*Topology); i { + switch v := v.(*TopologyGroup); i { case 0: return &v.state case 1: @@ -3289,7 +3437,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*GetModulesRequest); i { + switch v := v.(*Topology); i { case 0: return &v.state case 1: @@ -3301,7 +3449,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*GetModulesResponse); i { + switch v := v.(*GetModulesRequest); i { case 0: return &v.state case 1: @@ -3313,7 +3461,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*EventsQuery); i { + switch v := v.(*GetModulesResponse); i { case 0: return &v.state case 1: @@ -3325,7 +3473,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*StreamEventsRequest); i { + switch v := v.(*EventsQuery); i { case 0: return &v.state case 1: @@ -3337,7 +3485,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*StreamEventsResponse); i { + switch v := v.(*StreamEventsRequest); i { case 0: return &v.state case 1: @@ -3349,7 +3497,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*Event); i { + switch v := v.(*StreamEventsResponse); i { case 0: return &v.state case 1: @@ -3361,6 +3509,18 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[24].Exporter = func(v any, i int) any { + switch v := v.(*Event); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_console_console_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*GetEventsResponse); i { case 0: return &v.state @@ -3372,7 +3532,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[26].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_LimitFilter); i { case 0: return &v.state @@ -3384,7 +3544,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[27].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_LogLevelFilter); i { case 0: return &v.state @@ -3396,7 +3556,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[28].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_DeploymentFilter); i { case 0: return &v.state @@ -3408,7 +3568,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[29].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_RequestFilter); i { case 0: return &v.state @@ -3420,7 +3580,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[30].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_EventTypeFilter); i { case 0: return &v.state @@ -3432,7 +3592,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[31].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_TimeFilter); i { case 0: return &v.state @@ -3444,7 +3604,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[32].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_IDFilter); i { case 0: return &v.state @@ -3456,7 +3616,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[33].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[34].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_CallFilter); i { case 0: return &v.state @@ -3468,7 +3628,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[34].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[35].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_ModuleFilter); i { case 0: return &v.state @@ -3480,7 +3640,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[35].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[36].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_Filter); i { case 0: return &v.state @@ -3497,20 +3657,22 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { file_xyz_block_ftl_v1_console_console_proto_msgTypes[1].OneofWrappers = []any{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[2].OneofWrappers = []any{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[4].OneofWrappers = []any{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[21].OneofWrappers = []any{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[23].OneofWrappers = []any{ + file_xyz_block_ftl_v1_console_console_proto_msgTypes[5].OneofWrappers = []any{} + file_xyz_block_ftl_v1_console_console_proto_msgTypes[22].OneofWrappers = []any{} + file_xyz_block_ftl_v1_console_console_proto_msgTypes[24].OneofWrappers = []any{ (*Event_Log)(nil), (*Event_Call)(nil), (*Event_DeploymentCreated)(nil), (*Event_DeploymentUpdated)(nil), (*Event_Ingress)(nil), + (*Event_CronScheduled)(nil), } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[24].OneofWrappers = []any{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[31].OneofWrappers = []any{} + file_xyz_block_ftl_v1_console_console_proto_msgTypes[25].OneofWrappers = []any{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[32].OneofWrappers = []any{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[33].OneofWrappers = []any{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[34].OneofWrappers = []any{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[35].OneofWrappers = []any{ + file_xyz_block_ftl_v1_console_console_proto_msgTypes[35].OneofWrappers = []any{} + file_xyz_block_ftl_v1_console_console_proto_msgTypes[36].OneofWrappers = []any{ (*EventsQuery_Filter_Limit)(nil), (*EventsQuery_Filter_LogLevel)(nil), (*EventsQuery_Filter_Deployments)(nil), @@ -3527,7 +3689,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xyz_block_ftl_v1_console_console_proto_rawDesc, NumEnums: 3, - NumMessages: 36, + NumMessages: 37, NumExtensions: 0, NumServices: 1, }, diff --git a/backend/protos/xyz/block/ftl/v1/console/console.proto b/backend/protos/xyz/block/ftl/v1/console/console.proto index c3148b83d4..835bdadbae 100644 --- a/backend/protos/xyz/block/ftl/v1/console/console.proto +++ b/backend/protos/xyz/block/ftl/v1/console/console.proto @@ -17,6 +17,7 @@ enum EventType { EVENT_TYPE_DEPLOYMENT_CREATED = 3; EVENT_TYPE_DEPLOYMENT_UPDATED = 4; EVENT_TYPE_INGRESS = 5; + EVENT_TYPE_CRON_SCHEDULED = 6; } enum LogLevel { @@ -84,6 +85,16 @@ message IngressEvent { optional string error = 14; } +message CronScheduledEvent { + string deployment_key = 1; + schema.Ref verb_ref = 2; + google.protobuf.Timestamp time_stamp = 3; + google.protobuf.Duration duration = 4; + google.protobuf.Timestamp scheduled_at = 5; + string schedule = 6; + optional string error = 7; +} + message Config { schema.Config config = 1; } @@ -243,6 +254,7 @@ message Event { DeploymentCreatedEvent deployment_created = 5; DeploymentUpdatedEvent deployment_updated = 6; IngressEvent ingress = 7; + CronScheduledEvent cron_scheduled = 8; } } diff --git a/deployment/base/db-migrate/kustomization.yml b/deployment/base/db-migrate/kustomization.yml index 25b3cb3f5b..f258d63cf8 100644 --- a/deployment/base/db-migrate/kustomization.yml +++ b/deployment/base/db-migrate/kustomization.yml @@ -29,3 +29,4 @@ configMapGenerator: - ./schema/20240917015216_add_ingress_event_type.sql - ./schema/20240917062716_change_deployments_index.sql - ./schema/20240919001309_create_identity_keys_table.sql + - ./schema/20240926231955_timeline_async_call_event_types.sql diff --git a/frontend/console/src/features/timeline/Timeline.tsx b/frontend/console/src/features/timeline/Timeline.tsx index cc5299662d..329956762a 100644 --- a/frontend/console/src/features/timeline/Timeline.tsx +++ b/frontend/console/src/features/timeline/Timeline.tsx @@ -6,6 +6,7 @@ import type { Event, EventsQuery_Filter } from '../../protos/xyz/block/ftl/v1/co import { SidePanelContext } from '../../providers/side-panel-provider.tsx' import TimelineEventList from './TimelineEventList.tsx' import { TimelineCallDetails } from './details/TimelineCallDetails.tsx' +import { TimelineCronScheduledDetails } from './details/TimelineCronScheduledDetails.tsx' import { TimelineDeploymentCreatedDetails } from './details/TimelineDeploymentCreatedDetails.tsx' import { TimelineDeploymentUpdatedDetails } from './details/TimelineDeploymentUpdatedDetails.tsx' import { TimelineIngressDetails } from './details/TimelineIngressDetails.tsx' @@ -61,6 +62,9 @@ export const Timeline = ({ timeSettings, filters }: { timeSettings: TimeSettings case 'ingress': openPanel(, handlePanelClosed) break + case 'cronScheduled': + openPanel(, handlePanelClosed) + break default: break } diff --git a/frontend/console/src/features/timeline/TimelineCronScheduled.tsx b/frontend/console/src/features/timeline/TimelineCronScheduled.tsx new file mode 100644 index 0000000000..25da1034b0 --- /dev/null +++ b/frontend/console/src/features/timeline/TimelineCronScheduled.tsx @@ -0,0 +1,19 @@ +import type { CronScheduledEvent } from '../../protos/xyz/block/ftl/v1/console/console_pb' +import { formatTimestampShort } from '../../utils/date.utils.ts' +import { verbRefString } from '../verbs/verb.utils' + +export const TimelineCronScheduled = ({ cron }: { cron: CronScheduledEvent }) => { + const verbRef = (cron.verbRef?.module && verbRefString(cron.verbRef)) || 'unknown' + const scheduledAt = formatTimestampShort(cron.scheduledAt) + const title = `Cron ${cron.schedule} verb ${verbRef} scheduled for ${scheduledAt}` + return ( + + {'Cron '} + {cron.schedule} + {' verb '} + {verbRef} + {' scheduled for '} + {scheduledAt} + + ) +} diff --git a/frontend/console/src/features/timeline/TimelineEventList.tsx b/frontend/console/src/features/timeline/TimelineEventList.tsx index e7f71ab478..ceea819a20 100644 --- a/frontend/console/src/features/timeline/TimelineEventList.tsx +++ b/frontend/console/src/features/timeline/TimelineEventList.tsx @@ -2,6 +2,7 @@ import type { Event } from '../../protos/xyz/block/ftl/v1/console/console_pb' import { formatTimestampShort } from '../../utils' import { deploymentTextColor } from '../deployments/deployment.utils' import { TimelineCall } from './TimelineCall' +import { TimelineCronScheduled } from './TimelineCronScheduled.tsx' import { TimelineDeploymentCreated } from './TimelineDeploymentCreated' import { TimelineDeploymentUpdated } from './TimelineDeploymentUpdated' import { TimelineIcon } from './TimelineIcon' @@ -26,6 +27,8 @@ const deploymentKey = (event: Event) => { return event.entry.value.key case 'ingress': return event.entry.value.deploymentKey + case 'cronScheduled': + return event.entry.value.deploymentKey default: return '' } @@ -72,6 +75,8 @@ export const TimelineEventList = ({ events, selectedEventId, handleEntryClicked return case 'ingress': return + case 'cronScheduled': + return default: return null } diff --git a/frontend/console/src/features/timeline/TimelineIcon.tsx b/frontend/console/src/features/timeline/TimelineIcon.tsx index d344f69a9a..af22963ddd 100644 --- a/frontend/console/src/features/timeline/TimelineIcon.tsx +++ b/frontend/console/src/features/timeline/TimelineIcon.tsx @@ -1,4 +1,4 @@ -import { Call02Icon, CallIncoming04Icon, Menu01Icon, PackageReceiveIcon, Rocket01Icon } from 'hugeicons-react' +import { Call02Icon, CallIncoming04Icon, Menu01Icon, PackageReceiveIcon, Rocket01Icon, TimeQuarterPassIcon } from 'hugeicons-react' import type { Event } from '../../protos/xyz/block/ftl/v1/console/console_pb' import { LogLevelBadgeSmall } from '../logs/LogLevelBadgeSmall' import { eventTextColor } from './timeline.utils' @@ -18,9 +18,10 @@ export const TimelineIcon = ({ event }: { event: Event }) => { return case 'log': return - case 'ingress': { + case 'ingress': return - } + case 'cronScheduled': + return default: return } diff --git a/frontend/console/src/features/timeline/details/TimelineCronScheduledDetails.tsx b/frontend/console/src/features/timeline/details/TimelineCronScheduledDetails.tsx new file mode 100644 index 0000000000..4145af7cc2 --- /dev/null +++ b/frontend/console/src/features/timeline/details/TimelineCronScheduledDetails.tsx @@ -0,0 +1,68 @@ +import { useContext } from 'react' +import { AttributeBadge } from '../../../components/AttributeBadge' +import { CloseButton } from '../../../components/CloseButton' +import { CodeBlock } from '../../../components/CodeBlock' +import type { CronScheduledEvent, Event } from '../../../protos/xyz/block/ftl/v1/console/console_pb' +import { SidePanelContext } from '../../../providers/side-panel-provider' +import { formatDuration, formatTimestampShort } from '../../../utils/date.utils' +import { DeploymentCard } from '../../deployments/DeploymentCard' +import { verbRefString } from '../../verbs/verb.utils' +import { TimelineDetailsColorBar } from './TimelineDetailsColorBar' +import { TimelineTimestamp } from './TimelineTimestamp' + +export const TimelineCronScheduledDetails = ({ event }: { event: Event }) => { + const { closePanel } = useContext(SidePanelContext) + + const cron = event.entry.value as CronScheduledEvent + + return ( + <> + +
+
+
+
+ {cron.verbRef && ( +
+ {verbRefString(cron.verbRef)} +
+ )} +
+ +
+ +
+ + {cron.error && ( + <> +

Error

+ + + )} + + + +
    +
  • + +
  • + {cron.verbRef && ( +
  • + +
  • + )} + {cron.schedule && ( +
  • + +
  • + )} + {cron.scheduledAt && ( +
  • + +
  • + )} +
+
+ + ) +} diff --git a/frontend/console/src/features/timeline/filters/TimelineFilterPanel.tsx b/frontend/console/src/features/timeline/filters/TimelineFilterPanel.tsx index d352bc255c..bf1b798161 100644 --- a/frontend/console/src/features/timeline/filters/TimelineFilterPanel.tsx +++ b/frontend/console/src/features/timeline/filters/TimelineFilterPanel.tsx @@ -1,4 +1,4 @@ -import { Call02Icon, PackageReceiveIcon, Rocket01Icon } from 'hugeicons-react' +import { Call02Icon, PackageReceiveIcon, Rocket01Icon, TimeQuarterPassIcon } from 'hugeicons-react' import type React from 'react' import { useEffect, useState } from 'react' import { useModules } from '../../../api/modules/use-modules' @@ -29,6 +29,7 @@ const EVENT_TYPES: Record = { icon: , }, ingress: { label: 'Ingress', type: EventType.INGRESS, icon: }, + cronScheduled: { label: 'Cron Scheduled', type: EventType.CRON_SCHEDULED, icon: }, } const LOG_LEVELS: Record = { diff --git a/frontend/console/src/features/timeline/timeline.utils.ts b/frontend/console/src/features/timeline/timeline.utils.ts index ebba3b6d12..ac15376622 100644 --- a/frontend/console/src/features/timeline/timeline.utils.ts +++ b/frontend/console/src/features/timeline/timeline.utils.ts @@ -6,6 +6,7 @@ const eventBackgroundColorMap: Record = { ingress: 'bg-sky-400', deploymentCreated: 'bg-green-500 dark:bg-green-300', deploymentUpdated: 'bg-green-500 dark:bg-green-300', + cronScheduled: 'bg-blue-500', '': 'bg-gray-500', } @@ -17,6 +18,7 @@ const eventTextColorMap: Record = { ingress: 'text-sky-400', deploymentCreated: 'text-green-500 dark:text-green-300', deploymentUpdated: 'text-green-500 dark:text-green-300', + cronScheduled: 'text-blue-500', '': 'text-gray-500', } diff --git a/frontend/console/src/protos/xyz/block/ftl/v1/console/console_pb.ts b/frontend/console/src/protos/xyz/block/ftl/v1/console/console_pb.ts index 461e198901..e4eee1d998 100644 --- a/frontend/console/src/protos/xyz/block/ftl/v1/console/console_pb.ts +++ b/frontend/console/src/protos/xyz/block/ftl/v1/console/console_pb.ts @@ -40,6 +40,11 @@ export enum EventType { * @generated from enum value: EVENT_TYPE_INGRESS = 5; */ INGRESS = 5, + + /** + * @generated from enum value: EVENT_TYPE_CRON_SCHEDULED = 6; + */ + CRON_SCHEDULED = 6, } // Retrieve enum metadata with: proto3.getEnumType(EventType) proto3.util.setEnumType(EventType, "xyz.block.ftl.v1.console.EventType", [ @@ -49,6 +54,7 @@ proto3.util.setEnumType(EventType, "xyz.block.ftl.v1.console.EventType", [ { no: 3, name: "EVENT_TYPE_DEPLOYMENT_CREATED" }, { no: 4, name: "EVENT_TYPE_DEPLOYMENT_UPDATED" }, { no: 5, name: "EVENT_TYPE_INGRESS" }, + { no: 6, name: "EVENT_TYPE_CRON_SCHEDULED" }, ]); /** @@ -484,6 +490,79 @@ export class IngressEvent extends Message { } } +/** + * @generated from message xyz.block.ftl.v1.console.CronScheduledEvent + */ +export class CronScheduledEvent extends Message { + /** + * @generated from field: string deployment_key = 1; + */ + deploymentKey = ""; + + /** + * @generated from field: xyz.block.ftl.v1.schema.Ref verb_ref = 2; + */ + verbRef?: Ref; + + /** + * @generated from field: google.protobuf.Timestamp time_stamp = 3; + */ + timeStamp?: Timestamp; + + /** + * @generated from field: google.protobuf.Duration duration = 4; + */ + duration?: Duration; + + /** + * @generated from field: google.protobuf.Timestamp scheduled_at = 5; + */ + scheduledAt?: Timestamp; + + /** + * @generated from field: string schedule = 6; + */ + schedule = ""; + + /** + * @generated from field: optional string error = 7; + */ + error?: string; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.console.CronScheduledEvent"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "deployment_key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "verb_ref", kind: "message", T: Ref }, + { no: 3, name: "time_stamp", kind: "message", T: Timestamp }, + { no: 4, name: "duration", kind: "message", T: Duration }, + { no: 5, name: "scheduled_at", kind: "message", T: Timestamp }, + { no: 6, name: "schedule", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 7, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CronScheduledEvent { + return new CronScheduledEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CronScheduledEvent { + return new CronScheduledEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CronScheduledEvent { + return new CronScheduledEvent().fromJsonString(jsonString, options); + } + + static equals(a: CronScheduledEvent | PlainMessage | undefined, b: CronScheduledEvent | PlainMessage | undefined): boolean { + return proto3.util.equals(CronScheduledEvent, a, b); + } +} + /** * @generated from message xyz.block.ftl.v1.console.Config */ @@ -1783,6 +1862,12 @@ export class Event extends Message { */ value: IngressEvent; case: "ingress"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.console.CronScheduledEvent cron_scheduled = 8; + */ + value: CronScheduledEvent; + case: "cronScheduled"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -1800,6 +1885,7 @@ export class Event extends Message { { no: 5, name: "deployment_created", kind: "message", T: DeploymentCreatedEvent, oneof: "entry" }, { no: 6, name: "deployment_updated", kind: "message", T: DeploymentUpdatedEvent, oneof: "entry" }, { no: 7, name: "ingress", kind: "message", T: IngressEvent, oneof: "entry" }, + { no: 8, name: "cron_scheduled", kind: "message", T: CronScheduledEvent, oneof: "entry" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Event {