From dd080ec427075e269c66489a10ebc2442c60c36d Mon Sep 17 00:00:00 2001 From: Wes Date: Thu, 21 Sep 2023 09:01:47 -0700 Subject: [PATCH] feat: add new deployment events and update console (#415) Fixes #300 Screenshot 2023-09-21 at 8 40 27 AM Screenshot 2023-09-21 at 8 41 53 AM Screenshot 2023-09-21 at 8 41 58 AM --------- Co-authored-by: github-actions[bot] --- .gitignore | 2 +- backend/controller/console.go | 155 ++- backend/controller/internal/dal/dal.go | 50 +- backend/controller/internal/dal/dal_test.go | 10 +- backend/controller/internal/dal/events.go | 73 +- backend/controller/internal/sql/models.go | 7 +- backend/controller/internal/sql/querier.go | 3 +- backend/controller/internal/sql/queries.sql | 26 +- .../controller/internal/sql/queries.sql.go | 66 +- .../internal/sql/schema/001_init.sql | 3 +- cmd/ftl/cmd_update.go | 2 +- .../src/features/requests/RequestGraph.tsx | 12 +- .../client/src/features/timeline/Timeline.tsx | 21 +- .../src/features/timeline/TimelineCall.tsx | 4 +- .../features/timeline/TimelineDeployment.tsx | 28 - .../timeline/TimelineDeploymentCreated.tsx | 14 + .../timeline/TimelineDeploymentUpdated.tsx | 15 + .../src/features/timeline/TimelineIcon.tsx | 6 +- .../src/features/timeline/TimelineLog.tsx | 4 +- .../timeline/details/TimelineCallDetails.tsx | 6 +- .../TimelineDeploymentCreatedDetails.tsx | 56 ++ .../details/TimelineDeploymentDetails.tsx | 80 -- .../TimelineDeploymentUpdatedDetails.tsx | 48 + .../timeline/details/TimelineLogDetails.tsx | 4 +- .../timeline/filters/TimelineFilterPanel.tsx | 11 +- .../client/src/features/verbs/VerbCalls.tsx | 6 +- .../xyz/block/ftl/v1/console/console_pb.ts | 276 ++--- .../client/src/services/console.service.ts | 10 +- protos/xyz/block/ftl/v1/console/console.pb.go | 940 +++++++++--------- protos/xyz/block/ftl/v1/console/console.proto | 76 +- 30 files changed, 1086 insertions(+), 928 deletions(-) delete mode 100644 console/client/src/features/timeline/TimelineDeployment.tsx create mode 100644 console/client/src/features/timeline/TimelineDeploymentCreated.tsx create mode 100644 console/client/src/features/timeline/TimelineDeploymentUpdated.tsx create mode 100644 console/client/src/features/timeline/details/TimelineDeploymentCreatedDetails.tsx delete mode 100644 console/client/src/features/timeline/details/TimelineDeploymentDetails.tsx create mode 100644 console/client/src/features/timeline/details/TimelineDeploymentUpdatedDetails.tsx diff --git a/.gitignore b/.gitignore index 61e379347d..ee7c879418 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ deploy/ .DS_Store reflex.conf /logs/ -node_modules +/node_modules *.tsbuildinfo generated_ftl_module.go diff --git a/backend/controller/console.go b/backend/controller/console.go index c2ed30b8d9..554117c3a7 100644 --- a/backend/controller/console.go +++ b/backend/controller/console.go @@ -186,87 +186,6 @@ func (c *ConsoleService) StreamEvents(ctx context.Context, req *connect.Request[ } } -func callEventToCall(event *dal.CallEvent) *pbconsole.Call { - var requestName *string - if r, ok := event.RequestName.Get(); ok { - rstr := r.String() - requestName = &rstr - } - var sourceVerbRef *pschema.VerbRef - if sourceVerb, ok := event.SourceVerb.Get(); ok { - sourceVerbRef = sourceVerb.ToProto().(*pschema.VerbRef) //nolint:forcetypeassert - } - return &pbconsole.Call{ - RequestName: requestName, - DeploymentName: event.DeploymentName.String(), - TimeStamp: timestamppb.New(event.Time), - SourceVerbRef: sourceVerbRef, - DestinationVerbRef: &pschema.VerbRef{ - Module: event.DestVerb.Module, - Name: event.DestVerb.Name, - }, - Duration: durationpb.New(event.Duration), - Request: string(event.Request), - Response: string(event.Response), - Error: event.Error.Ptr(), - } -} - -func logEventToLogEntry(event *dal.LogEvent) *pbconsole.LogEntry { - var requestName *string - if r, ok := event.RequestName.Get(); ok { - rstr := r.String() - requestName = &rstr - } - return &pbconsole.LogEntry{ - DeploymentName: event.DeploymentName.String(), - RequestName: requestName, - TimeStamp: timestamppb.New(event.Time), - LogLevel: event.Level, - Attributes: event.Attributes, - Message: event.Message, - Error: event.Error.Ptr(), - } -} - -func deploymentEventToDeployment(event *dal.DeploymentEvent) *pbconsole.Deployment { - var eventType pbconsole.DeploymentEventType - switch event.Type { - case dal.DeploymentCreated: - eventType = pbconsole.DeploymentEventType_DEPLOYMENT_CREATED - case dal.DeploymentUpdated: - eventType = pbconsole.DeploymentEventType_DEPLOYMENT_UPDATED - case dal.DeploymentReplaced: - eventType = pbconsole.DeploymentEventType_DEPLOYMENT_REPLACED - default: - panic(errors.Errorf("unknown deployment event type %v", event.Type)) - } - - var replaced *string - if r, ok := event.ReplacedDeployment.Get(); ok { - rstr := r.String() - replaced = &rstr - } - return &pbconsole.Deployment{ - Name: event.DeploymentName.String(), - Language: event.Language, - ModuleName: event.ModuleName, - MinReplicas: 0, - EventType: eventType, - Replaced: replaced, - } -} - -func filterEvents[E dal.Event](events []dal.Event) []E { - var filtered []E - for _, event := range events { - if e, ok := event.(E); ok { - filtered = append(filtered, e) - } - } - return filtered -} - func eventsQueryProtoToDAL(pb *pbconsole.EventsQuery) ([]dal.EventFilter, error) { var query []dal.EventFilter @@ -306,8 +225,10 @@ func eventsQueryProtoToDAL(pb *pbconsole.EventsQuery) ([]dal.EventFilter, error) eventTypes = append(eventTypes, dal.EventTypeCall) case pbconsole.EventType_EVENT_TYPE_LOG: eventTypes = append(eventTypes, dal.EventTypeLog) - case pbconsole.EventType_EVENT_TYPE_DEPLOYMENT: - eventTypes = append(eventTypes, dal.EventTypeDeployment) + case pbconsole.EventType_EVENT_TYPE_DEPLOYMENT_CREATED: + eventTypes = append(eventTypes, dal.EventTypeDeploymentCreated) + case pbconsole.EventType_EVENT_TYPE_DEPLOYMENT_UPDATED: + eventTypes = append(eventTypes, dal.EventTypeDeploymentUpdated) default: return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("unknown event type %v", eventType)) } @@ -361,29 +282,87 @@ func eventsQueryProtoToDAL(pb *pbconsole.EventsQuery) ([]dal.EventFilter, error) func eventDALToProto(event dal.Event) *pbconsole.Event { switch event := event.(type) { case *dal.CallEvent: + var requestName *string + if r, ok := event.RequestName.Get(); ok { + rstr := r.String() + requestName = &rstr + } + var sourceVerbRef *pschema.VerbRef + if sourceVerb, ok := event.SourceVerb.Get(); ok { + sourceVerbRef = sourceVerb.ToProto().(*pschema.VerbRef) //nolint:forcetypeassert + } return &pbconsole.Event{ TimeStamp: timestamppb.New(event.Time), Id: event.ID, Entry: &pbconsole.Event_Call{ - Call: callEventToCall(event), + Call: &pbconsole.CallEvent{ + RequestName: requestName, + DeploymentName: event.DeploymentName.String(), + TimeStamp: timestamppb.New(event.Time), + SourceVerbRef: sourceVerbRef, + DestinationVerbRef: &pschema.VerbRef{ + Module: event.DestVerb.Module, + Name: event.DestVerb.Name, + }, + Duration: durationpb.New(event.Duration), + Request: string(event.Request), + Response: string(event.Response), + Error: event.Error.Ptr(), + }, }, } case *dal.LogEvent: + var requestName *string + if r, ok := event.RequestName.Get(); ok { + rstr := r.String() + requestName = &rstr + } return &pbconsole.Event{ TimeStamp: timestamppb.New(event.Time), Id: event.ID, Entry: &pbconsole.Event_Log{ - Log: logEventToLogEntry(event), + Log: &pbconsole.LogEvent{ + DeploymentName: event.DeploymentName.String(), + RequestName: requestName, + TimeStamp: timestamppb.New(event.Time), + LogLevel: event.Level, + Attributes: event.Attributes, + Message: event.Message, + Error: event.Error.Ptr(), + }, }, } - case *dal.DeploymentEvent: + case *dal.DeploymentCreatedEvent: + var replaced *string + if r, ok := event.ReplacedDeployment.Get(); ok { + rstr := r.String() + replaced = &rstr + } + return &pbconsole.Event{ + TimeStamp: timestamppb.New(event.Time), + Id: event.ID, + Entry: &pbconsole.Event_DeploymentCreated{ + DeploymentCreated: &pbconsole.DeploymentCreatedEvent{ + Name: event.DeploymentName.String(), + Language: event.Language, + ModuleName: event.ModuleName, + MinReplicas: int32(event.MinReplicas), + Replaced: replaced, + }, + }, + } + case *dal.DeploymentUpdatedEvent: return &pbconsole.Event{ TimeStamp: timestamppb.New(event.Time), Id: event.ID, - Entry: &pbconsole.Event_Deployment{ - Deployment: deploymentEventToDeployment(event), + Entry: &pbconsole.Event_DeploymentUpdated{ + DeploymentUpdated: &pbconsole.DeploymentUpdatedEvent{ + Name: event.DeploymentName.String(), + MinReplicas: int32(event.MinReplicas), + PrevMinReplicas: int32(event.PrevMinReplicas), + }, }, } diff --git a/backend/controller/internal/dal/dal.go b/backend/controller/internal/dal/dal.go index 7aa4950c5d..dda72ce469 100644 --- a/backend/controller/internal/dal/dal.go +++ b/backend/controller/internal/dal/dal.go @@ -480,15 +480,6 @@ func (d *DAL) CreateDeployment(ctx context.Context, language string, schema *sch } } - err = tx.InsertDeploymentEvent(ctx, sql.InsertDeploymentEventParams{ - DeploymentName: deploymentName.String(), - Type: string(DeploymentCreated), - Language: language, - ModuleName: schema.Name, - }) - if err != nil { - return "", errors.Wrap(translatePGError(err), "failed to insert deployment event") - } return deploymentName, nil } @@ -621,10 +612,33 @@ func (p *postgresClaim) Runner() Runner { return p.runner } // SetDeploymentReplicas activates the given deployment. func (d *DAL) SetDeploymentReplicas(ctx context.Context, key model.DeploymentName, minReplicas int) error { - err := d.db.SetDeploymentDesiredReplicas(ctx, key, int32(minReplicas)) + // Start the transaction + tx, err := d.db.Begin(ctx) + if err != nil { + return errors.WithStack(translatePGError(err)) + } + + defer tx.CommitOrRollback(ctx, &err) + + deployment, err := d.db.GetDeployment(ctx, key) + if err != nil { + return errors.WithStack(translatePGError(err)) + } + + err = d.db.SetDeploymentDesiredReplicas(ctx, key, int32(minReplicas)) + if err != nil { + return errors.WithStack(translatePGError(err)) + } + + err = tx.InsertDeploymentUpdatedEvent(ctx, sql.InsertDeploymentUpdatedEventParams{ + DeploymentName: key.String(), + MinReplicas: int32(minReplicas), + PrevMinReplicas: deployment.MinReplicas, + }) if err != nil { return errors.WithStack(translatePGError(err)) } + return nil } @@ -642,7 +656,6 @@ func (d *DAL) ReplaceDeployment(ctx context.Context, newDeploymentName model.Dep return errors.WithStack(translatePGError(err)) } - var updateType DeploymentEventType var replacedDeployment types.Option[string] // If there's an existing deployment, set its desired replicas to 0 @@ -655,7 +668,6 @@ func (d *DAL) ReplaceDeployment(ctx context.Context, newDeploymentName model.Dep if count == 1 { return errors.Wrap(ErrConflict, "deployment already exists") } - updateType = DeploymentReplaced replacedDeployment = types.Some(oldDeployment.Name.String()) } else if !isNotFound(err) { return errors.WithStack(translatePGError(err)) @@ -665,12 +677,10 @@ func (d *DAL) ReplaceDeployment(ctx context.Context, newDeploymentName model.Dep if err != nil { return errors.WithStack(translatePGError(err)) } - updateType = DeploymentUpdated } - err = tx.InsertDeploymentEvent(ctx, sql.InsertDeploymentEventParams{ + err = tx.InsertDeploymentCreatedEvent(ctx, sql.InsertDeploymentCreatedEventParams{ DeploymentName: newDeploymentName.String(), - Type: string(updateType), Language: newDeployment.Language, ModuleName: newDeployment.ModuleName, MinReplicas: int32(minReplicas), @@ -971,16 +981,6 @@ func (d *DAL) InsertCallEvent(ctx context.Context, call *CallEvent) error { }))) } -func (d *DAL) InsertDeploymentEvent(ctx context.Context, deployment *DeploymentEvent) error { - return errors.WithStack(translatePGError(d.db.InsertDeploymentEvent(ctx, sql.InsertDeploymentEventParams{ - DeploymentName: deployment.DeploymentName.String(), - Type: string(deployment.Type), - Language: deployment.Language, - ModuleName: deployment.ModuleName, - MinReplicas: int32(deployment.MinReplicas), - }))) -} - func (d *DAL) GetActiveRunners(ctx context.Context) ([]Runner, error) { rows, err := d.db.GetActiveRunners(ctx, false) if err != nil { diff --git a/backend/controller/internal/dal/dal_test.go b/backend/controller/internal/dal/dal_test.go index d12b52cd88..6537052c00 100644 --- a/backend/controller/internal/dal/dal_test.go +++ b/backend/controller/internal/dal/dal_test.go @@ -246,11 +246,9 @@ func TestDAL(t *testing.T) { assert.NoError(t, err) }) - expectedDeploymentEvent := &DeploymentEvent{ + expectedDeploymentUpdatedEvent := &DeploymentUpdatedEvent{ DeploymentName: deploymentName, - Type: DeploymentEventType("created"), - Language: "go", - ModuleName: "test", + MinReplicas: 1, } t.Run("QueryEvents", func(t *testing.T) { @@ -263,13 +261,13 @@ func TestDAL(t *testing.T) { t.Run("NoFilters", func(t *testing.T) { events, err := dal.QueryEvents(ctx, 1000) assert.NoError(t, err) - assertEventsEqual(t, []Event{expectedDeploymentEvent, callEvent, logEvent}, events) + assertEventsEqual(t, []Event{expectedDeploymentUpdatedEvent, callEvent, logEvent}, events) }) t.Run("ByDeployment", func(t *testing.T) { events, err := dal.QueryEvents(ctx, 1000, FilterDeployments(deploymentName)) assert.NoError(t, err) - assertEventsEqual(t, []Event{expectedDeploymentEvent, callEvent, logEvent}, events) + assertEventsEqual(t, []Event{expectedDeploymentUpdatedEvent, callEvent, logEvent}, events) }) t.Run("ByCall", func(t *testing.T) { diff --git a/backend/controller/internal/dal/events.go b/backend/controller/internal/dal/events.go index 32d835d4c6..3b2966fb4a 100644 --- a/backend/controller/internal/dal/events.go +++ b/backend/controller/internal/dal/events.go @@ -9,6 +9,7 @@ import ( "github.com/alecthomas/errors" "github.com/alecthomas/types" + "github.com/jackc/pgx/v5" "github.com/TBD54566975/ftl/backend/common/log" "github.com/TBD54566975/ftl/backend/common/model" @@ -20,17 +21,10 @@ type EventType = sql.EventType // Supported event types. const ( - EventTypeLog = sql.EventTypeLog - EventTypeCall = sql.EventTypeCall - EventTypeDeployment = sql.EventTypeDeployment -) - -type DeploymentEventType string - -const ( - DeploymentCreated DeploymentEventType = "created" - DeploymentUpdated DeploymentEventType = "updated" - DeploymentReplaced DeploymentEventType = "replaced" + EventTypeLog = sql.EventTypeLog + EventTypeCall = sql.EventTypeCall + EventTypeDeploymentCreated = sql.EventTypeDeploymentCreated + EventTypeDeploymentUpdated = sql.EventTypeDeploymentUpdated ) // Event types. @@ -71,19 +65,29 @@ type CallEvent struct { func (e *CallEvent) GetID() int64 { return e.ID } func (e *CallEvent) event() {} -type DeploymentEvent struct { +type DeploymentCreatedEvent struct { ID int64 DeploymentName model.DeploymentName Time time.Time - Type DeploymentEventType Language string ModuleName string MinReplicas int ReplacedDeployment types.Option[model.DeploymentName] } -func (e *DeploymentEvent) GetID() int64 { return e.ID } -func (e *DeploymentEvent) event() {} +func (e *DeploymentCreatedEvent) GetID() int64 { return e.ID } +func (e *DeploymentCreatedEvent) event() {} + +type DeploymentUpdatedEvent struct { + ID int64 + DeploymentName model.DeploymentName + Time time.Time + MinReplicas int + PrevMinReplicas int +} + +func (e *DeploymentUpdatedEvent) GetID() int64 { return e.ID } +func (e *DeploymentUpdatedEvent) event() {} type eventFilterCall struct { sourceModule types.Option[string] @@ -182,11 +186,16 @@ type eventLogJSON struct { Error types.Option[string] `json:"error,omitempty"` } -type eventDeploymentJSON struct { +type eventDeploymentCreatedJSON struct { MinReplicas int `json:"min_replicas"` ReplacedDeployment types.Option[model.DeploymentName] `json:"replaced,omitempty"` } +type eventDeploymentUpdatedJSON struct { + MinReplicas int `json:"min_replicas"` + PrevMinReplicas int `json:"prev_min_replicas"` +} + type eventRow struct { sql.Event DeploymentName model.DeploymentName @@ -284,7 +293,14 @@ func (d *DAL) QueryEvents(ctx context.Context, limit int, filters ...EventFilter } defer rows.Close() - // Translate events to concrete Go types. + events, err := transformRowsToEvents(rows) + if err != nil { + return nil, errors.WithStack(err) + } + return events, nil +} + +func transformRowsToEvents(rows pgx.Rows) ([]Event, error) { var out []Event for rows.Next() { row := eventRow{} @@ -345,21 +361,32 @@ func (d *DAL) QueryEvents(ctx context.Context, limit int, filters ...EventFilter Response: jsonPayload.Response, Error: jsonPayload.Error, }) - case sql.EventTypeDeployment: - var jsonPayload eventDeploymentJSON + case sql.EventTypeDeploymentCreated: + var jsonPayload eventDeploymentCreatedJSON if err := json.Unmarshal(row.Payload, &jsonPayload); err != nil { return nil, errors.WithStack(err) } - out = append(out, &DeploymentEvent{ + out = append(out, &DeploymentCreatedEvent{ ID: row.ID, DeploymentName: row.DeploymentName, Time: row.TimeStamp, - Type: DeploymentEventType(row.CustomKey1.MustGet()), - Language: row.CustomKey2.MustGet(), - ModuleName: row.CustomKey3.MustGet(), + Language: row.CustomKey1.MustGet(), + ModuleName: row.CustomKey2.MustGet(), MinReplicas: jsonPayload.MinReplicas, ReplacedDeployment: jsonPayload.ReplacedDeployment, }) + case sql.EventTypeDeploymentUpdated: + var jsonPayload eventDeploymentUpdatedJSON + if err := json.Unmarshal(row.Payload, &jsonPayload); err != nil { + return nil, errors.WithStack(err) + } + out = append(out, &DeploymentUpdatedEvent{ + ID: row.ID, + DeploymentName: row.DeploymentName, + Time: row.TimeStamp, + MinReplicas: jsonPayload.MinReplicas, + PrevMinReplicas: jsonPayload.PrevMinReplicas, + }) default: panic("unknown event type: " + row.Type) } diff --git a/backend/controller/internal/sql/models.go b/backend/controller/internal/sql/models.go index 1f8314cccd..01255edf1a 100644 --- a/backend/controller/internal/sql/models.go +++ b/backend/controller/internal/sql/models.go @@ -60,9 +60,10 @@ func (ns NullControllerState) Value() (driver.Value, error) { type EventType string const ( - EventTypeCall EventType = "call" - EventTypeLog EventType = "log" - EventTypeDeployment EventType = "deployment" + EventTypeCall EventType = "call" + EventTypeLog EventType = "log" + EventTypeDeploymentCreated EventType = "deployment_created" + EventTypeDeploymentUpdated EventType = "deployment_updated" ) func (e *EventType) Scan(src interface{}) error { diff --git a/backend/controller/internal/sql/querier.go b/backend/controller/internal/sql/querier.go index 3404320dc1..b9168a3446 100644 --- a/backend/controller/internal/sql/querier.go +++ b/backend/controller/internal/sql/querier.go @@ -50,7 +50,8 @@ type Querier interface { GetRunnerState(ctx context.Context, key sqltypes.Key) (RunnerState, error) GetRunnersForDeployment(ctx context.Context, name model.DeploymentName) ([]GetRunnersForDeploymentRow, error) InsertCallEvent(ctx context.Context, arg InsertCallEventParams) error - InsertDeploymentEvent(ctx context.Context, arg InsertDeploymentEventParams) error + InsertDeploymentCreatedEvent(ctx context.Context, arg InsertDeploymentCreatedEventParams) error + InsertDeploymentUpdatedEvent(ctx context.Context, arg InsertDeploymentUpdatedEventParams) error InsertEvent(ctx context.Context, arg InsertEventParams) error InsertLogEvent(ctx context.Context, arg InsertLogEventParams) error // Mark any controller entries that haven't been updated recently as dead. diff --git a/backend/controller/internal/sql/queries.sql b/backend/controller/internal/sql/queries.sql index 8680795550..8fc30ed1ec 100644 --- a/backend/controller/internal/sql/queries.sql +++ b/backend/controller/internal/sql/queries.sql @@ -54,7 +54,7 @@ SELECT COUNT(*) FROM update_container; -- name: GetDeployment :one -SELECT sqlc.embed(d), m.language, m.name AS module_name +SELECT sqlc.embed(d), m.language, m.name AS module_name, d.min_replicas FROM deployments d INNER JOIN modules m ON m.id = d.module_id WHERE d.name = $1; @@ -282,11 +282,12 @@ VALUES ((SELECT id FROM deployments d WHERE d.name = sqlc.arg('deployment_name') 'error', sqlc.narg('error')::TEXT )); --- name: InsertDeploymentEvent :exec -INSERT INTO events (deployment_id, type, custom_key_1, custom_key_2, custom_key_3, payload) -VALUES ((SELECT id FROM deployments WHERE deployments.name = sqlc.arg('deployment_name')::TEXT), - 'deployment', - sqlc.arg('type')::TEXT, +-- name: InsertDeploymentCreatedEvent :exec +INSERT INTO events (deployment_id, type, custom_key_1, custom_key_2, payload) +VALUES ((SELECT id + FROM deployments + WHERE deployments.name = sqlc.arg('deployment_name')::TEXT), + 'deployment_created', sqlc.arg('language')::TEXT, sqlc.arg('module_name')::TEXT, jsonb_build_object( @@ -294,6 +295,19 @@ VALUES ((SELECT id FROM deployments WHERE deployments.name = sqlc.arg('deploymen 'replaced', sqlc.narg('replaced')::TEXT )); +-- name: InsertDeploymentUpdatedEvent :exec +INSERT INTO events (deployment_id, type, custom_key_1, custom_key_2, payload) +VALUES ((SELECT id + FROM deployments + WHERE deployments.name = sqlc.arg('deployment_name')::TEXT), + 'deployment_updated', + sqlc.arg('language')::TEXT, + sqlc.arg('module_name')::TEXT, + jsonb_build_object( + 'prev_min_replicas', sqlc.arg('prev_min_replicas')::INT, + 'min_replicas', sqlc.arg('min_replicas')::INT + )); + -- name: InsertCallEvent :exec INSERT INTO events (deployment_id, request_id, time_stamp, type, custom_key_1, custom_key_2, custom_key_3, custom_key_4, payload) diff --git a/backend/controller/internal/sql/queries.sql.go b/backend/controller/internal/sql/queries.sql.go index 37312350b0..47a0678e52 100644 --- a/backend/controller/internal/sql/queries.sql.go +++ b/backend/controller/internal/sql/queries.sql.go @@ -310,16 +310,17 @@ func (q *Queries) GetControllers(ctx context.Context, all bool) ([]Controller, e } const getDeployment = `-- name: GetDeployment :one -SELECT d.id, d.created_at, d.module_id, d.name, d.schema, d.labels, d.min_replicas, m.language, m.name AS module_name +SELECT d.id, d.created_at, d.module_id, d.name, d.schema, d.labels, d.min_replicas, m.language, m.name AS module_name, d.min_replicas FROM deployments d INNER JOIN modules m ON m.id = d.module_id WHERE d.name = $1 ` type GetDeploymentRow struct { - Deployment Deployment - Language string - ModuleName string + Deployment Deployment + Language string + ModuleName string + MinReplicas int32 } func (q *Queries) GetDeployment(ctx context.Context, name model.DeploymentName) (GetDeploymentRow, error) { @@ -335,6 +336,7 @@ func (q *Queries) GetDeployment(ctx context.Context, name model.DeploymentName) &i.Deployment.MinReplicas, &i.Language, &i.ModuleName, + &i.MinReplicas, ) return i, err } @@ -994,32 +996,31 @@ func (q *Queries) InsertCallEvent(ctx context.Context, arg InsertCallEventParams return err } -const insertDeploymentEvent = `-- name: InsertDeploymentEvent :exec -INSERT INTO events (deployment_id, type, custom_key_1, custom_key_2, custom_key_3, payload) -VALUES ((SELECT id FROM deployments WHERE deployments.name = $1::TEXT), - 'deployment', +const insertDeploymentCreatedEvent = `-- name: InsertDeploymentCreatedEvent :exec +INSERT INTO events (deployment_id, type, custom_key_1, custom_key_2, payload) +VALUES ((SELECT id + FROM deployments + WHERE deployments.name = $1::TEXT), + 'deployment_created', $2::TEXT, $3::TEXT, - $4::TEXT, jsonb_build_object( - 'min_replicas', $5::INT, - 'replaced', $6::TEXT + 'min_replicas', $4::INT, + 'replaced', $5::TEXT )) ` -type InsertDeploymentEventParams struct { +type InsertDeploymentCreatedEventParams struct { DeploymentName string - Type string Language string ModuleName string MinReplicas int32 Replaced types.Option[string] } -func (q *Queries) InsertDeploymentEvent(ctx context.Context, arg InsertDeploymentEventParams) error { - _, err := q.db.Exec(ctx, insertDeploymentEvent, +func (q *Queries) InsertDeploymentCreatedEvent(ctx context.Context, arg InsertDeploymentCreatedEventParams) error { + _, err := q.db.Exec(ctx, insertDeploymentCreatedEvent, arg.DeploymentName, - arg.Type, arg.Language, arg.ModuleName, arg.MinReplicas, @@ -1028,6 +1029,39 @@ func (q *Queries) InsertDeploymentEvent(ctx context.Context, arg InsertDeploymen return err } +const insertDeploymentUpdatedEvent = `-- name: InsertDeploymentUpdatedEvent :exec +INSERT INTO events (deployment_id, type, custom_key_1, custom_key_2, payload) +VALUES ((SELECT id + FROM deployments + WHERE deployments.name = $1::TEXT), + 'deployment_updated', + $2::TEXT, + $3::TEXT, + jsonb_build_object( + 'prev_min_replicas', $4::INT, + 'min_replicas', $5::INT + )) +` + +type InsertDeploymentUpdatedEventParams struct { + DeploymentName string + Language string + ModuleName string + PrevMinReplicas int32 + MinReplicas int32 +} + +func (q *Queries) InsertDeploymentUpdatedEvent(ctx context.Context, arg InsertDeploymentUpdatedEventParams) error { + _, err := q.db.Exec(ctx, insertDeploymentUpdatedEvent, + arg.DeploymentName, + arg.Language, + arg.ModuleName, + arg.PrevMinReplicas, + arg.MinReplicas, + ) + return err +} + const insertEvent = `-- name: InsertEvent :exec INSERT INTO events (deployment_id, request_id, type, custom_key_1, custom_key_2, custom_key_3, custom_key_4, diff --git a/backend/controller/internal/sql/schema/001_init.sql b/backend/controller/internal/sql/schema/001_init.sql index f242133ce9..28a35a54a5 100644 --- a/backend/controller/internal/sql/schema/001_init.sql +++ b/backend/controller/internal/sql/schema/001_init.sql @@ -219,7 +219,8 @@ CREATE UNIQUE INDEX controller_endpoint_not_dead_idx ON controller (endpoint) WH CREATE TYPE event_type AS ENUM ( 'call', 'log', - 'deployment' + 'deployment_created', + 'deployment_updated' ); CREATE TABLE events diff --git a/cmd/ftl/cmd_update.go b/cmd/ftl/cmd_update.go index 37f101a535..e24fc3cb56 100644 --- a/cmd/ftl/cmd_update.go +++ b/cmd/ftl/cmd_update.go @@ -13,7 +13,7 @@ import ( type updateCmd struct { Replicas int32 `short:"n" help:"Number of replicas to deploy." default:"1"` - Deployment model.DeploymentName `arg:"" help:"Deployment to kill."` + Deployment model.DeploymentName `arg:"" help:"Deployment to update."` } func (u *updateCmd) Run(ctx context.Context, client ftlv1connect.ControllerServiceClient) error { diff --git a/console/client/src/features/requests/RequestGraph.tsx b/console/client/src/features/requests/RequestGraph.tsx index 7657856b71..1b745ab93c 100644 --- a/console/client/src/features/requests/RequestGraph.tsx +++ b/console/client/src/features/requests/RequestGraph.tsx @@ -1,10 +1,10 @@ import { Duration, Timestamp } from '@bufbuild/protobuf' -import { Call } from '../../protos/xyz/block/ftl/v1/console/console_pb' +import { CallEvent } from '../../protos/xyz/block/ftl/v1/console/console_pb' import { verbRefString } from '../verbs/verb.utils' interface CallBlockProps { - call: Call - selectedCall?: Call + call: CallEvent + selectedCall?: CallEvent firstTimeStamp: Timestamp firstDuration: Duration } @@ -47,9 +47,9 @@ const CallBlock = ({ call, selectedCall, firstTimeStamp, firstDuration }: CallBl } interface Props { - calls: Call[] - call?: Call - setSelectedCall: React.Dispatch> + calls: CallEvent[] + call?: CallEvent + setSelectedCall: React.Dispatch> } export const RequestGraph = ({ calls, call, setSelectedCall }: Props) => { diff --git a/console/client/src/features/timeline/Timeline.tsx b/console/client/src/features/timeline/Timeline.tsx index 4645b7e8cb..e05a1ab2fe 100644 --- a/console/client/src/features/timeline/Timeline.tsx +++ b/console/client/src/features/timeline/Timeline.tsx @@ -6,11 +6,13 @@ import { getEvents, streamEvents, timeFilter } from '../../services/console.serv import { formatTimestampShort } from '../../utils/date.utils.ts' import { panelColor } from '../../utils/style.utils.ts' import { TimelineCall } from './TimelineCall.tsx' -import { TimelineDeployment } from './TimelineDeployment.tsx' +import { TimelineDeploymentCreated } from './TimelineDeploymentCreated.tsx' +import { TimelineDeploymentUpdated } from './TimelineDeploymentUpdated.tsx' import { TimelineIcon } from './TimelineIcon.tsx' import { TimelineLog } from './TimelineLog.tsx' import { TimelineCallDetails } from './details/TimelineCallDetails.tsx' -import { TimelineDeploymentDetails } from './details/TimelineDeploymentDetails.tsx' +import { TimelineDeploymentCreatedDetails } from './details/TimelineDeploymentCreatedDetails.tsx' +import { TimelineDeploymentUpdatedDetails } from './details/TimelineDeploymentUpdatedDetails.tsx' import { TimelineLogDetails } from './details/TimelineLogDetails.tsx' import { TimeSettings } from './filters/TimelineTimeControls.tsx' @@ -25,7 +27,7 @@ export const Timeline = ({ timeSettings, filters }: Props) => { const { openPanel, closePanel, isOpen } = React.useContext(SidePanelContext) const [entries, setEntries] = React.useState([]) const [selectedEntry, setSelectedEntry] = React.useState(null) - const [selectedEventTypes] = React.useState(['log', 'call', 'deployment']) + const [selectedEventTypes] = React.useState(['log', 'call', 'deploymentCreated', 'deploymentUpdated']) const [selectedLogLevels] = React.useState([1, 5, 9, 13, 17]) React.useEffect(() => { @@ -79,8 +81,11 @@ export const Timeline = ({ timeSettings, filters }: Props) => { case 'log': openPanel() break - case 'deployment': - openPanel() + case 'deploymentCreated': + openPanel() + break + case 'deploymentUpdated': + openPanel() break default: break @@ -132,8 +137,10 @@ export const Timeline = ({ timeSettings, filters }: Props) => { return case 'log': return - case 'deployment': - return + case 'deploymentCreated': + return + case 'deploymentUpdated': + return } })()} diff --git a/console/client/src/features/timeline/TimelineCall.tsx b/console/client/src/features/timeline/TimelineCall.tsx index 2feee9695c..4c8e73b307 100644 --- a/console/client/src/features/timeline/TimelineCall.tsx +++ b/console/client/src/features/timeline/TimelineCall.tsx @@ -1,8 +1,8 @@ -import { Call } from '../../protos/xyz/block/ftl/v1/console/console_pb' +import { CallEvent } from '../../protos/xyz/block/ftl/v1/console/console_pb' import { verbRefString } from '../verbs/verb.utils' interface Props { - call: Call + call: CallEvent } export const TimelineCall = ({ call }: Props) => { diff --git a/console/client/src/features/timeline/TimelineDeployment.tsx b/console/client/src/features/timeline/TimelineDeployment.tsx deleted file mode 100644 index 85880004d4..0000000000 --- a/console/client/src/features/timeline/TimelineDeployment.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { Deployment, DeploymentEventType } from '../../protos/xyz/block/ftl/v1/console/console_pb' - -interface Props { - deployment: Deployment -} - -const deploymentType = (type: DeploymentEventType) => { - switch (type) { - case DeploymentEventType.DEPLOYMENT_CREATED: - return 'Created' - case DeploymentEventType.DEPLOYMENT_UPDATED: - return 'Updated' - case DeploymentEventType.DEPLOYMENT_REPLACED: - return 'Replaced' - default: - return 'Unknown' - } -} - -export const TimelineDeployment = ({ deployment }: Props) => { - return ( - <> - {deploymentType(deployment.eventType)} deployment{' '} - {deployment.name} for language{' '} - {deployment.language} - - ) -} diff --git a/console/client/src/features/timeline/TimelineDeploymentCreated.tsx b/console/client/src/features/timeline/TimelineDeploymentCreated.tsx new file mode 100644 index 0000000000..3b5df4aecb --- /dev/null +++ b/console/client/src/features/timeline/TimelineDeploymentCreated.tsx @@ -0,0 +1,14 @@ +import { DeploymentCreatedEvent } from '../../protos/xyz/block/ftl/v1/console/console_pb' + +interface Props { + deployment: DeploymentCreatedEvent +} + +export const TimelineDeploymentCreated = ({ deployment }: Props) => { + return ( + <> + Created deployment {deployment.name} for language{' '} + {deployment.language} + + ) +} diff --git a/console/client/src/features/timeline/TimelineDeploymentUpdated.tsx b/console/client/src/features/timeline/TimelineDeploymentUpdated.tsx new file mode 100644 index 0000000000..2d30699370 --- /dev/null +++ b/console/client/src/features/timeline/TimelineDeploymentUpdated.tsx @@ -0,0 +1,15 @@ +import { DeploymentUpdatedEvent } from '../../protos/xyz/block/ftl/v1/console/console_pb' + +interface Props { + deployment: DeploymentUpdatedEvent +} + +export const TimelineDeploymentUpdated = ({ deployment }: Props) => { + return ( + <> + Updated deployment {deployment.name} min replicas to{' '} + {deployment.minReplicas} (previously{' '} + {deployment.prevMinReplicas}) + + ) +} diff --git a/console/client/src/features/timeline/TimelineIcon.tsx b/console/client/src/features/timeline/TimelineIcon.tsx index 0ff1e21574..d4ab840f5a 100644 --- a/console/client/src/features/timeline/TimelineIcon.tsx +++ b/console/client/src/features/timeline/TimelineIcon.tsx @@ -18,8 +18,10 @@ export const TimelineIcon = ({ event }: Props) => { ) } - case 'deployment': - return + case 'deploymentCreated': + return + case 'deploymentUpdated': + return case 'log': return default: diff --git a/console/client/src/features/timeline/TimelineLog.tsx b/console/client/src/features/timeline/TimelineLog.tsx index edd5fa8543..ec7cab5419 100644 --- a/console/client/src/features/timeline/TimelineLog.tsx +++ b/console/client/src/features/timeline/TimelineLog.tsx @@ -1,7 +1,7 @@ -import { LogEntry } from '../../protos/xyz/block/ftl/v1/console/console_pb' +import { LogEvent } from '../../protos/xyz/block/ftl/v1/console/console_pb' interface Props { - log: LogEntry + log: LogEvent } export const TimelineLog = ({ log }: Props) => { diff --git a/console/client/src/features/timeline/details/TimelineCallDetails.tsx b/console/client/src/features/timeline/details/TimelineCallDetails.tsx index b91e9fc55f..f907b88837 100644 --- a/console/client/src/features/timeline/details/TimelineCallDetails.tsx +++ b/console/client/src/features/timeline/details/TimelineCallDetails.tsx @@ -5,7 +5,7 @@ import { CloseButton } from '../../../components/CloseButton' import { CodeBlock } from '../../../components/CodeBlock' import { useClient } from '../../../hooks/use-client' import { ConsoleService } from '../../../protos/xyz/block/ftl/v1/console/console_connect' -import { Call } from '../../../protos/xyz/block/ftl/v1/console/console_pb' +import { CallEvent } from '../../../protos/xyz/block/ftl/v1/console/console_pb' import { SidePanelContext } from '../../../providers/side-panel-provider' import { getRequestCalls } from '../../../services/console.service' import { formatDuration } from '../../../utils/date.utils' @@ -15,13 +15,13 @@ import { TimelineTimestamp } from './TimelineTimestamp' interface Props { timestamp: Timestamp - call: Call + call: CallEvent } export const TimelineCallDetails = ({ timestamp, call }: Props) => { const client = useClient(ConsoleService) const { closePanel } = React.useContext(SidePanelContext) - const [requestCalls, setRequestCalls] = useState([]) + const [requestCalls, setRequestCalls] = useState([]) const [selectedCall, setSelectedCall] = useState(call) useEffect(() => { diff --git a/console/client/src/features/timeline/details/TimelineDeploymentCreatedDetails.tsx b/console/client/src/features/timeline/details/TimelineDeploymentCreatedDetails.tsx new file mode 100644 index 0000000000..7694b821c6 --- /dev/null +++ b/console/client/src/features/timeline/details/TimelineDeploymentCreatedDetails.tsx @@ -0,0 +1,56 @@ +import { Timestamp } from '@bufbuild/protobuf' +import React from 'react' +import { AttributeBadge } from '../../../components/AttributeBadge' +import { CloseButton } from '../../../components/CloseButton' +import { DeploymentCreatedEvent, Event } from '../../../protos/xyz/block/ftl/v1/console/console_pb' +import { SidePanelContext } from '../../../providers/side-panel-provider' +import { TimelineTimestamp } from './TimelineTimestamp' + +interface Props { + event: Event + deployment: DeploymentCreatedEvent +} + +export const TimelineDeploymentCreatedDetails = ({ event, deployment }: Props) => { + const { closePanel } = React.useContext(SidePanelContext) + return ( + <> +
+
+
+
+ + Deployment Created + + +
+ +
+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • + {deployment.replaced && ( +
  • + +
  • + )} +
+
+ + ) +} diff --git a/console/client/src/features/timeline/details/TimelineDeploymentDetails.tsx b/console/client/src/features/timeline/details/TimelineDeploymentDetails.tsx deleted file mode 100644 index 7aa2fd8f3b..0000000000 --- a/console/client/src/features/timeline/details/TimelineDeploymentDetails.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { Timestamp } from '@bufbuild/protobuf' -import React from 'react' -import { AttributeBadge } from '../../../components/AttributeBadge' -import { CloseButton } from '../../../components/CloseButton' -import { Deployment, DeploymentEventType, Event } from '../../../protos/xyz/block/ftl/v1/console/console_pb' -import { SidePanelContext } from '../../../providers/side-panel-provider' -import { classNames } from '../../../utils/react.utils' -import { TimelineTimestamp } from './TimelineTimestamp' - -interface Props { - event: Event - deployment: Deployment -} - -export const deploymentTypeText: { [key in DeploymentEventType]: string } = { - [DeploymentEventType.DEPLOYMENT_UNKNOWN]: 'Unknown', - [DeploymentEventType.DEPLOYMENT_CREATED]: 'Created', - [DeploymentEventType.DEPLOYMENT_UPDATED]: 'Updated', - [DeploymentEventType.DEPLOYMENT_REPLACED]: 'Replaced', -} - -export const deploymentTypeBarColor: { [key in DeploymentEventType]: string } = { - [DeploymentEventType.DEPLOYMENT_UNKNOWN]: '', - [DeploymentEventType.DEPLOYMENT_CREATED]: 'bg-green-500 dark:bg-green-300', - [DeploymentEventType.DEPLOYMENT_UPDATED]: 'bg-blue-500 dark:bg-blue-300', - [DeploymentEventType.DEPLOYMENT_REPLACED]: 'bg-indigo-600 dark:bg-indigo-300', -} - -export const deploymentTypeBadge: { [key in DeploymentEventType]: string } = { - [DeploymentEventType.DEPLOYMENT_UNKNOWN]: '', - [DeploymentEventType.DEPLOYMENT_CREATED]: 'text-green-500 bg-green-400/30 dark:text-green-300 dark:bg-green-700/10', - [DeploymentEventType.DEPLOYMENT_UPDATED]: 'text-blue-500 bg-blue-300/30 dark:text-blue-300 dark:bg-blue-700/30', - [DeploymentEventType.DEPLOYMENT_REPLACED]: - 'text-indigo-600 bg-indigo-400/30 dark:text-indigo-300 dark:bg-indigo-700/50', -} - -export const TimelineDeploymentDetails = ({ event, deployment }: Props) => { - const { closePanel } = React.useContext(SidePanelContext) - return ( - <> -
-
-
-
- - {deploymentTypeText[deployment.eventType]} - - -
- -
- -
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • - {deployment.replaced && ( -
  • - -
  • - )} -
-
- - ) -} diff --git a/console/client/src/features/timeline/details/TimelineDeploymentUpdatedDetails.tsx b/console/client/src/features/timeline/details/TimelineDeploymentUpdatedDetails.tsx new file mode 100644 index 0000000000..c0af219036 --- /dev/null +++ b/console/client/src/features/timeline/details/TimelineDeploymentUpdatedDetails.tsx @@ -0,0 +1,48 @@ +import { Timestamp } from '@bufbuild/protobuf' +import React from 'react' +import { AttributeBadge } from '../../../components/AttributeBadge' +import { CloseButton } from '../../../components/CloseButton' +import { DeploymentUpdatedEvent, Event } from '../../../protos/xyz/block/ftl/v1/console/console_pb' +import { SidePanelContext } from '../../../providers/side-panel-provider' +import { TimelineTimestamp } from './TimelineTimestamp' + +interface Props { + event: Event + deployment: DeploymentUpdatedEvent +} + +export const TimelineDeploymentUpdatedDetails = ({ event, deployment }: Props) => { + const { closePanel } = React.useContext(SidePanelContext) + return ( + <> +
+
+
+
+ + Deployment Updated + + +
+ +
+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+ + ) +} diff --git a/console/client/src/features/timeline/details/TimelineLogDetails.tsx b/console/client/src/features/timeline/details/TimelineLogDetails.tsx index 595b85476b..bdbe45a721 100644 --- a/console/client/src/features/timeline/details/TimelineLogDetails.tsx +++ b/console/client/src/features/timeline/details/TimelineLogDetails.tsx @@ -3,7 +3,7 @@ import React from 'react' import { AttributeBadge } from '../../../components/AttributeBadge' import { CloseButton } from '../../../components/CloseButton' import { CodeBlock } from '../../../components/CodeBlock' -import { Event, LogEntry } from '../../../protos/xyz/block/ftl/v1/console/console_pb' +import { Event, LogEvent } from '../../../protos/xyz/block/ftl/v1/console/console_pb' import { SidePanelContext } from '../../../providers/side-panel-provider' import { textColor } from '../../../utils/style.utils' import { LogLevelBadge } from '../../logs/LogLevelBadge' @@ -12,7 +12,7 @@ import { TimelineTimestamp } from './TimelineTimestamp' interface Props { event: Event - log: LogEntry + log: LogEvent } export const TimelineLogDetails = ({ event, log }: Props) => { diff --git a/console/client/src/features/timeline/filters/TimelineFilterPanel.tsx b/console/client/src/features/timeline/filters/TimelineFilterPanel.tsx index 9a64e2f6be..9f25aedaf5 100644 --- a/console/client/src/features/timeline/filters/TimelineFilterPanel.tsx +++ b/console/client/src/features/timeline/filters/TimelineFilterPanel.tsx @@ -17,9 +17,14 @@ interface EventFilter { const EVENT_TYPES: Record = { call: { label: 'Call', type: EventType.CALL, icon: }, log: { label: 'Log', type: EventType.LOG, icon: }, - deployment: { - label: 'Deployment', - type: EventType.DEPLOYMENT, + deploymentCreated: { + label: 'Deployment Created', + type: EventType.DEPLOYMENT_CREATED, + icon: , + }, + deploymentUpdated: { + label: 'Deployment Updated', + type: EventType.DEPLOYMENT_UPDATED, icon: , }, } diff --git a/console/client/src/features/verbs/VerbCalls.tsx b/console/client/src/features/verbs/VerbCalls.tsx index 741b0095e0..aeb4b3ba00 100644 --- a/console/client/src/features/verbs/VerbCalls.tsx +++ b/console/client/src/features/verbs/VerbCalls.tsx @@ -2,7 +2,7 @@ import { Timestamp } from '@bufbuild/protobuf' import React from 'react' import { useClient } from '../../hooks/use-client.ts' import { ConsoleService } from '../../protos/xyz/block/ftl/v1/console/console_connect.ts' -import { Call, Module, Verb } from '../../protos/xyz/block/ftl/v1/console/console_pb' +import { CallEvent, Module, Verb } from '../../protos/xyz/block/ftl/v1/console/console_pb' import { SidePanelContext } from '../../providers/side-panel-provider.tsx' import { getCalls } from '../../services/console.service.ts' import { formatDuration, formatTimestamp } from '../../utils/date.utils.ts' @@ -15,7 +15,7 @@ interface Props { export const VerbCalls = ({ module, verb }: Props) => { const client = useClient(ConsoleService) - const [calls, setCalls] = React.useState([]) + const [calls, setCalls] = React.useState([]) const { openPanel } = React.useContext(SidePanelContext) React.useEffect(() => { @@ -31,7 +31,7 @@ export const VerbCalls = ({ module, verb }: Props) => { fetchCalls() }, [client, module, verb]) - const handleClick = (call: Call) => { + const handleClick = (call: CallEvent) => { openPanel() } diff --git a/console/client/src/protos/xyz/block/ftl/v1/console/console_pb.ts b/console/client/src/protos/xyz/block/ftl/v1/console/console_pb.ts index 3a28657b34..f0508e7cf4 100644 --- a/console/client/src/protos/xyz/block/ftl/v1/console/console_pb.ts +++ b/console/client/src/protos/xyz/block/ftl/v1/console/console_pb.ts @@ -17,9 +17,9 @@ export enum EventType { UNKNOWN = 0, /** - * @generated from enum value: EVENT_TYPE_DEPLOYMENT = 1; + * @generated from enum value: EVENT_TYPE_LOG = 1; */ - DEPLOYMENT = 1, + LOG = 1, /** * @generated from enum value: EVENT_TYPE_CALL = 2; @@ -27,48 +27,22 @@ export enum EventType { CALL = 2, /** - * @generated from enum value: EVENT_TYPE_LOG = 3; + * @generated from enum value: EVENT_TYPE_DEPLOYMENT_CREATED = 3; */ - LOG = 3, + DEPLOYMENT_CREATED = 3, + + /** + * @generated from enum value: EVENT_TYPE_DEPLOYMENT_UPDATED = 4; + */ + DEPLOYMENT_UPDATED = 4, } // Retrieve enum metadata with: proto3.getEnumType(EventType) proto3.util.setEnumType(EventType, "xyz.block.ftl.v1.console.EventType", [ { no: 0, name: "EVENT_TYPE_UNKNOWN" }, - { no: 1, name: "EVENT_TYPE_DEPLOYMENT" }, + { no: 1, name: "EVENT_TYPE_LOG" }, { no: 2, name: "EVENT_TYPE_CALL" }, - { no: 3, name: "EVENT_TYPE_LOG" }, -]); - -/** - * @generated from enum xyz.block.ftl.v1.console.DeploymentEventType - */ -export enum DeploymentEventType { - /** - * @generated from enum value: DEPLOYMENT_UNKNOWN = 0; - */ - DEPLOYMENT_UNKNOWN = 0, - - /** - * @generated from enum value: DEPLOYMENT_CREATED = 1; - */ - DEPLOYMENT_CREATED = 1, - - /** - * @generated from enum value: DEPLOYMENT_UPDATED = 2; - */ - DEPLOYMENT_UPDATED = 2, - - /** - * @generated from enum value: DEPLOYMENT_REPLACED = 3; - */ - DEPLOYMENT_REPLACED = 3, -} -// Retrieve enum metadata with: proto3.getEnumType(DeploymentEventType) -proto3.util.setEnumType(DeploymentEventType, "xyz.block.ftl.v1.console.DeploymentEventType", [ - { no: 0, name: "DEPLOYMENT_UNKNOWN" }, - { no: 1, name: "DEPLOYMENT_CREATED" }, - { no: 2, name: "DEPLOYMENT_UPDATED" }, - { no: 3, name: "DEPLOYMENT_REPLACED" }, + { no: 3, name: "EVENT_TYPE_DEPLOYMENT_CREATED" }, + { no: 4, name: "EVENT_TYPE_DEPLOYMENT_UPDATED" }, ]); /** @@ -116,9 +90,82 @@ proto3.util.setEnumType(LogLevel, "xyz.block.ftl.v1.console.LogLevel", [ ]); /** - * @generated from message xyz.block.ftl.v1.console.Call + * @generated from message xyz.block.ftl.v1.console.LogEvent */ -export class Call extends Message { +export class LogEvent extends Message { + /** + * @generated from field: string deployment_name = 1; + */ + deploymentName = ""; + + /** + * @generated from field: optional string request_name = 2; + */ + requestName?: string; + + /** + * @generated from field: google.protobuf.Timestamp time_stamp = 3; + */ + timeStamp?: Timestamp; + + /** + * @generated from field: int32 log_level = 4; + */ + logLevel = 0; + + /** + * @generated from field: map attributes = 5; + */ + attributes: { [key: string]: string } = {}; + + /** + * @generated from field: string message = 6; + */ + message = ""; + + /** + * @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.LogEvent"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "deployment_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "request_name", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 3, name: "time_stamp", kind: "message", T: Timestamp }, + { no: 4, name: "log_level", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, + { no: 5, name: "attributes", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 9 /* ScalarType.STRING */} }, + { no: 6, name: "message", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 7, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): LogEvent { + return new LogEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): LogEvent { + return new LogEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): LogEvent { + return new LogEvent().fromJsonString(jsonString, options); + } + + static equals(a: LogEvent | PlainMessage | undefined, b: LogEvent | PlainMessage | undefined): boolean { + return proto3.util.equals(LogEvent, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.console.CallEvent + */ +export class CallEvent extends Message { /** * @generated from field: optional string request_name = 1; */ @@ -164,13 +211,13 @@ export class Call extends Message { */ error?: string; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.v1.console.Call"; + static readonly typeName = "xyz.block.ftl.v1.console.CallEvent"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "request_name", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, { no: 2, name: "deployment_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, @@ -183,27 +230,27 @@ export class Call extends Message { { no: 9, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): Call { - return new Call().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): CallEvent { + return new CallEvent().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): Call { - return new Call().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): CallEvent { + return new CallEvent().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): Call { - return new Call().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): CallEvent { + return new CallEvent().fromJsonString(jsonString, options); } - static equals(a: Call | PlainMessage | undefined, b: Call | PlainMessage | undefined): boolean { - return proto3.util.equals(Call, a, b); + static equals(a: CallEvent | PlainMessage | undefined, b: CallEvent | PlainMessage | undefined): boolean { + return proto3.util.equals(CallEvent, a, b); } } /** - * @generated from message xyz.block.ftl.v1.console.Deployment + * @generated from message xyz.block.ftl.v1.console.DeploymentCreatedEvent */ -export class Deployment extends Message { +export class DeploymentCreatedEvent extends Message { /** * @generated from field: string name = 1; */ @@ -225,118 +272,88 @@ export class Deployment extends Message { minReplicas = 0; /** - * @generated from field: xyz.block.ftl.v1.console.DeploymentEventType event_type = 5; - */ - eventType = DeploymentEventType.DEPLOYMENT_UNKNOWN; - - /** - * @generated from field: optional string replaced = 6; + * @generated from field: optional string replaced = 5; */ replaced?: string; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.v1.console.Deployment"; + static readonly typeName = "xyz.block.ftl.v1.console.DeploymentCreatedEvent"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 2, name: "language", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 3, name: "module_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 4, name: "min_replicas", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, - { no: 5, name: "event_type", kind: "enum", T: proto3.getEnumType(DeploymentEventType) }, - { no: 6, name: "replaced", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 5, name: "replaced", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): Deployment { - return new Deployment().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): DeploymentCreatedEvent { + return new DeploymentCreatedEvent().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): Deployment { - return new Deployment().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): DeploymentCreatedEvent { + return new DeploymentCreatedEvent().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): Deployment { - return new Deployment().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): DeploymentCreatedEvent { + return new DeploymentCreatedEvent().fromJsonString(jsonString, options); } - static equals(a: Deployment | PlainMessage | undefined, b: Deployment | PlainMessage | undefined): boolean { - return proto3.util.equals(Deployment, a, b); + static equals(a: DeploymentCreatedEvent | PlainMessage | undefined, b: DeploymentCreatedEvent | PlainMessage | undefined): boolean { + return proto3.util.equals(DeploymentCreatedEvent, a, b); } } /** - * @generated from message xyz.block.ftl.v1.console.LogEntry + * @generated from message xyz.block.ftl.v1.console.DeploymentUpdatedEvent */ -export class LogEntry extends Message { - /** - * @generated from field: string deployment_name = 1; - */ - deploymentName = ""; - - /** - * @generated from field: optional string request_name = 2; - */ - requestName?: string; - - /** - * @generated from field: google.protobuf.Timestamp time_stamp = 3; - */ - timeStamp?: Timestamp; - +export class DeploymentUpdatedEvent extends Message { /** - * @generated from field: int32 log_level = 4; + * @generated from field: string name = 1; */ - logLevel = 0; + name = ""; /** - * @generated from field: map attributes = 5; + * @generated from field: int32 min_replicas = 2; */ - attributes: { [key: string]: string } = {}; + minReplicas = 0; /** - * @generated from field: string message = 6; + * @generated from field: int32 prev_min_replicas = 3; */ - message = ""; + prevMinReplicas = 0; - /** - * @generated from field: optional string error = 7; - */ - error?: string; - - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.v1.console.LogEntry"; + static readonly typeName = "xyz.block.ftl.v1.console.DeploymentUpdatedEvent"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "deployment_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "request_name", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, - { no: 3, name: "time_stamp", kind: "message", T: Timestamp }, - { no: 4, name: "log_level", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, - { no: 5, name: "attributes", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 9 /* ScalarType.STRING */} }, - { no: 6, name: "message", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 7, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "min_replicas", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, + { no: 3, name: "prev_min_replicas", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): LogEntry { - return new LogEntry().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): DeploymentUpdatedEvent { + return new DeploymentUpdatedEvent().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): LogEntry { - return new LogEntry().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): DeploymentUpdatedEvent { + return new DeploymentUpdatedEvent().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): LogEntry { - return new LogEntry().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): DeploymentUpdatedEvent { + return new DeploymentUpdatedEvent().fromJsonString(jsonString, options); } - static equals(a: LogEntry | PlainMessage | undefined, b: LogEntry | PlainMessage | undefined): boolean { - return proto3.util.equals(LogEntry, a, b); + static equals(a: DeploymentUpdatedEvent | PlainMessage | undefined, b: DeploymentUpdatedEvent | PlainMessage | undefined): boolean { + return proto3.util.equals(DeploymentUpdatedEvent, a, b); } } @@ -1182,22 +1199,28 @@ export class Event extends Message { */ entry: { /** - * @generated from field: xyz.block.ftl.v1.console.Call call = 3; + * @generated from field: xyz.block.ftl.v1.console.LogEvent log = 3; */ - value: Call; + value: LogEvent; + case: "log"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.console.CallEvent call = 4; + */ + value: CallEvent; case: "call"; } | { /** - * @generated from field: xyz.block.ftl.v1.console.Deployment deployment = 4; + * @generated from field: xyz.block.ftl.v1.console.DeploymentCreatedEvent deployment_created = 5; */ - value: Deployment; - case: "deployment"; + value: DeploymentCreatedEvent; + case: "deploymentCreated"; } | { /** - * @generated from field: xyz.block.ftl.v1.console.LogEntry log = 5; + * @generated from field: xyz.block.ftl.v1.console.DeploymentUpdatedEvent deployment_updated = 6; */ - value: LogEntry; - case: "log"; + value: DeploymentUpdatedEvent; + case: "deploymentUpdated"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -1210,9 +1233,10 @@ export class Event extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "time_stamp", kind: "message", T: Timestamp }, { no: 2, name: "id", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, - { no: 3, name: "call", kind: "message", T: Call, oneof: "entry" }, - { no: 4, name: "deployment", kind: "message", T: Deployment, oneof: "entry" }, - { no: 5, name: "log", kind: "message", T: LogEntry, oneof: "entry" }, + { no: 3, name: "log", kind: "message", T: LogEvent, oneof: "entry" }, + { no: 4, name: "call", kind: "message", T: CallEvent, oneof: "entry" }, + { no: 5, name: "deployment_created", kind: "message", T: DeploymentCreatedEvent, oneof: "entry" }, + { no: 6, name: "deployment_updated", kind: "message", T: DeploymentUpdatedEvent, oneof: "entry" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Event { diff --git a/console/client/src/services/console.service.ts b/console/client/src/services/console.service.ts index 3a9b67638c..6e3269dd27 100644 --- a/console/client/src/services/console.service.ts +++ b/console/client/src/services/console.service.ts @@ -3,7 +3,7 @@ import { Timestamp } from '@bufbuild/protobuf' import { createClient } from '../hooks/use-client' import { ConsoleService } from '../protos/xyz/block/ftl/v1/console/console_connect' import { - Call, + CallEvent, Event, EventType, EventsQuery_CallFilter, @@ -92,22 +92,22 @@ export const timeFilter = (olderThan: Timestamp | undefined, newerThan: Timestam return filter } -export const getRequestCalls = async (requestKey: string): Promise => { +export const getRequestCalls = async (requestKey: string): Promise => { const allEvents = await getEvents({ filters: [requestKeysFilter([requestKey]), eventTypesFilter([EventType.CALL])], }) - return allEvents.map((e) => e.entry.value) as Call[] + return allEvents.map((e) => e.entry.value) as CallEvent[] } export const getCalls = async ( destModule: string, destVerb: string | undefined = undefined, sourceModule: string | undefined = undefined, -): Promise => { +): Promise => { const allEvents = await getEvents({ filters: [callFilter(destModule, destVerb, sourceModule), eventTypesFilter([EventType.CALL])], }) - return allEvents.map((e) => e.entry.value) as Call[] + return allEvents.map((e) => e.entry.value) as CallEvent[] } interface GetEventsParams { diff --git a/protos/xyz/block/ftl/v1/console/console.pb.go b/protos/xyz/block/ftl/v1/console/console.pb.go index 11b703f429..9cfd45cde0 100644 --- a/protos/xyz/block/ftl/v1/console/console.pb.go +++ b/protos/xyz/block/ftl/v1/console/console.pb.go @@ -27,25 +27,28 @@ const ( type EventType int32 const ( - EventType_EVENT_TYPE_UNKNOWN EventType = 0 - EventType_EVENT_TYPE_DEPLOYMENT EventType = 1 - EventType_EVENT_TYPE_CALL EventType = 2 - EventType_EVENT_TYPE_LOG EventType = 3 + EventType_EVENT_TYPE_UNKNOWN EventType = 0 + EventType_EVENT_TYPE_LOG EventType = 1 + EventType_EVENT_TYPE_CALL EventType = 2 + EventType_EVENT_TYPE_DEPLOYMENT_CREATED EventType = 3 + EventType_EVENT_TYPE_DEPLOYMENT_UPDATED EventType = 4 ) // Enum value maps for EventType. var ( EventType_name = map[int32]string{ 0: "EVENT_TYPE_UNKNOWN", - 1: "EVENT_TYPE_DEPLOYMENT", + 1: "EVENT_TYPE_LOG", 2: "EVENT_TYPE_CALL", - 3: "EVENT_TYPE_LOG", + 3: "EVENT_TYPE_DEPLOYMENT_CREATED", + 4: "EVENT_TYPE_DEPLOYMENT_UPDATED", } EventType_value = map[string]int32{ - "EVENT_TYPE_UNKNOWN": 0, - "EVENT_TYPE_DEPLOYMENT": 1, - "EVENT_TYPE_CALL": 2, - "EVENT_TYPE_LOG": 3, + "EVENT_TYPE_UNKNOWN": 0, + "EVENT_TYPE_LOG": 1, + "EVENT_TYPE_CALL": 2, + "EVENT_TYPE_DEPLOYMENT_CREATED": 3, + "EVENT_TYPE_DEPLOYMENT_UPDATED": 4, } ) @@ -76,58 +79,6 @@ func (EventType) EnumDescriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{0} } -type DeploymentEventType int32 - -const ( - DeploymentEventType_DEPLOYMENT_UNKNOWN DeploymentEventType = 0 - DeploymentEventType_DEPLOYMENT_CREATED DeploymentEventType = 1 - DeploymentEventType_DEPLOYMENT_UPDATED DeploymentEventType = 2 - DeploymentEventType_DEPLOYMENT_REPLACED DeploymentEventType = 3 -) - -// Enum value maps for DeploymentEventType. -var ( - DeploymentEventType_name = map[int32]string{ - 0: "DEPLOYMENT_UNKNOWN", - 1: "DEPLOYMENT_CREATED", - 2: "DEPLOYMENT_UPDATED", - 3: "DEPLOYMENT_REPLACED", - } - DeploymentEventType_value = map[string]int32{ - "DEPLOYMENT_UNKNOWN": 0, - "DEPLOYMENT_CREATED": 1, - "DEPLOYMENT_UPDATED": 2, - "DEPLOYMENT_REPLACED": 3, - } -) - -func (x DeploymentEventType) Enum() *DeploymentEventType { - p := new(DeploymentEventType) - *p = x - return p -} - -func (x DeploymentEventType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (DeploymentEventType) Descriptor() protoreflect.EnumDescriptor { - return file_xyz_block_ftl_v1_console_console_proto_enumTypes[1].Descriptor() -} - -func (DeploymentEventType) Type() protoreflect.EnumType { - return &file_xyz_block_ftl_v1_console_console_proto_enumTypes[1] -} - -func (x DeploymentEventType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use DeploymentEventType.Descriptor instead. -func (DeploymentEventType) EnumDescriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{1} -} - type LogLevel int32 const ( @@ -170,11 +121,11 @@ func (x LogLevel) String() string { } func (LogLevel) Descriptor() protoreflect.EnumDescriptor { - return file_xyz_block_ftl_v1_console_console_proto_enumTypes[2].Descriptor() + return file_xyz_block_ftl_v1_console_console_proto_enumTypes[1].Descriptor() } func (LogLevel) Type() protoreflect.EnumType { - return &file_xyz_block_ftl_v1_console_console_proto_enumTypes[2] + return &file_xyz_block_ftl_v1_console_console_proto_enumTypes[1] } func (x LogLevel) Number() protoreflect.EnumNumber { @@ -183,7 +134,7 @@ func (x LogLevel) Number() protoreflect.EnumNumber { // Deprecated: Use LogLevel.Descriptor instead. func (LogLevel) EnumDescriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{2} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{1} } type EventsQuery_Order int32 @@ -216,11 +167,11 @@ func (x EventsQuery_Order) String() string { } func (EventsQuery_Order) Descriptor() protoreflect.EnumDescriptor { - return file_xyz_block_ftl_v1_console_console_proto_enumTypes[3].Descriptor() + return file_xyz_block_ftl_v1_console_console_proto_enumTypes[2].Descriptor() } func (EventsQuery_Order) Type() protoreflect.EnumType { - return &file_xyz_block_ftl_v1_console_console_proto_enumTypes[3] + return &file_xyz_block_ftl_v1_console_console_proto_enumTypes[2] } func (x EventsQuery_Order) Number() protoreflect.EnumNumber { @@ -229,10 +180,105 @@ 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{8, 0} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9, 0} } -type Call struct { +type LogEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeploymentName string `protobuf:"bytes,1,opt,name=deployment_name,json=deploymentName,proto3" json:"deployment_name,omitempty"` + RequestName *string `protobuf:"bytes,2,opt,name=request_name,json=requestName,proto3,oneof" json:"request_name,omitempty"` + TimeStamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=time_stamp,json=timeStamp,proto3" json:"time_stamp,omitempty"` + LogLevel int32 `protobuf:"varint,4,opt,name=log_level,json=logLevel,proto3" json:"log_level,omitempty"` + Attributes map[string]string `protobuf:"bytes,5,rep,name=attributes,proto3" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Message string `protobuf:"bytes,6,opt,name=message,proto3" json:"message,omitempty"` + Error *string `protobuf:"bytes,7,opt,name=error,proto3,oneof" json:"error,omitempty"` +} + +func (x *LogEvent) Reset() { + *x = LogEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogEvent) ProtoMessage() {} + +func (x *LogEvent) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[0] + 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 LogEvent.ProtoReflect.Descriptor instead. +func (*LogEvent) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{0} +} + +func (x *LogEvent) GetDeploymentName() string { + if x != nil { + return x.DeploymentName + } + return "" +} + +func (x *LogEvent) GetRequestName() string { + if x != nil && x.RequestName != nil { + return *x.RequestName + } + return "" +} + +func (x *LogEvent) GetTimeStamp() *timestamppb.Timestamp { + if x != nil { + return x.TimeStamp + } + return nil +} + +func (x *LogEvent) GetLogLevel() int32 { + if x != nil { + return x.LogLevel + } + return 0 +} + +func (x *LogEvent) GetAttributes() map[string]string { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *LogEvent) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *LogEvent) GetError() string { + if x != nil && x.Error != nil { + return *x.Error + } + return "" +} + +type CallEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -248,23 +294,23 @@ type Call struct { Error *string `protobuf:"bytes,9,opt,name=error,proto3,oneof" json:"error,omitempty"` } -func (x *Call) Reset() { - *x = Call{} +func (x *CallEvent) Reset() { + *x = CallEvent{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[0] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Call) String() string { +func (x *CallEvent) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Call) ProtoMessage() {} +func (*CallEvent) ProtoMessage() {} -func (x *Call) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[0] +func (x *CallEvent) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -275,104 +321,103 @@ func (x *Call) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Call.ProtoReflect.Descriptor instead. -func (*Call) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{0} +// Deprecated: Use CallEvent.ProtoReflect.Descriptor instead. +func (*CallEvent) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{1} } -func (x *Call) GetRequestName() string { +func (x *CallEvent) GetRequestName() string { if x != nil && x.RequestName != nil { return *x.RequestName } return "" } -func (x *Call) GetDeploymentName() string { +func (x *CallEvent) GetDeploymentName() string { if x != nil { return x.DeploymentName } return "" } -func (x *Call) GetTimeStamp() *timestamppb.Timestamp { +func (x *CallEvent) GetTimeStamp() *timestamppb.Timestamp { if x != nil { return x.TimeStamp } return nil } -func (x *Call) GetSourceVerbRef() *schema.VerbRef { +func (x *CallEvent) GetSourceVerbRef() *schema.VerbRef { if x != nil { return x.SourceVerbRef } return nil } -func (x *Call) GetDestinationVerbRef() *schema.VerbRef { +func (x *CallEvent) GetDestinationVerbRef() *schema.VerbRef { if x != nil { return x.DestinationVerbRef } return nil } -func (x *Call) GetDuration() *durationpb.Duration { +func (x *CallEvent) GetDuration() *durationpb.Duration { if x != nil { return x.Duration } return nil } -func (x *Call) GetRequest() string { +func (x *CallEvent) GetRequest() string { if x != nil { return x.Request } return "" } -func (x *Call) GetResponse() string { +func (x *CallEvent) GetResponse() string { if x != nil { return x.Response } return "" } -func (x *Call) GetError() string { +func (x *CallEvent) GetError() string { if x != nil && x.Error != nil { return *x.Error } return "" } -type Deployment struct { +type DeploymentCreatedEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"` - ModuleName string `protobuf:"bytes,3,opt,name=module_name,json=moduleName,proto3" json:"module_name,omitempty"` - MinReplicas int32 `protobuf:"varint,4,opt,name=min_replicas,json=minReplicas,proto3" json:"min_replicas,omitempty"` - EventType DeploymentEventType `protobuf:"varint,5,opt,name=event_type,json=eventType,proto3,enum=xyz.block.ftl.v1.console.DeploymentEventType" json:"event_type,omitempty"` - Replaced *string `protobuf:"bytes,6,opt,name=replaced,proto3,oneof" json:"replaced,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"` + ModuleName string `protobuf:"bytes,3,opt,name=module_name,json=moduleName,proto3" json:"module_name,omitempty"` + MinReplicas int32 `protobuf:"varint,4,opt,name=min_replicas,json=minReplicas,proto3" json:"min_replicas,omitempty"` + Replaced *string `protobuf:"bytes,5,opt,name=replaced,proto3,oneof" json:"replaced,omitempty"` } -func (x *Deployment) Reset() { - *x = Deployment{} +func (x *DeploymentCreatedEvent) Reset() { + *x = DeploymentCreatedEvent{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[1] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Deployment) String() string { +func (x *DeploymentCreatedEvent) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Deployment) ProtoMessage() {} +func (*DeploymentCreatedEvent) ProtoMessage() {} -func (x *Deployment) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[1] +func (x *DeploymentCreatedEvent) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -383,84 +428,73 @@ func (x *Deployment) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Deployment.ProtoReflect.Descriptor instead. -func (*Deployment) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{1} +// Deprecated: Use DeploymentCreatedEvent.ProtoReflect.Descriptor instead. +func (*DeploymentCreatedEvent) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{2} } -func (x *Deployment) GetName() string { +func (x *DeploymentCreatedEvent) GetName() string { if x != nil { return x.Name } return "" } -func (x *Deployment) GetLanguage() string { +func (x *DeploymentCreatedEvent) GetLanguage() string { if x != nil { return x.Language } return "" } -func (x *Deployment) GetModuleName() string { +func (x *DeploymentCreatedEvent) GetModuleName() string { if x != nil { return x.ModuleName } return "" } -func (x *Deployment) GetMinReplicas() int32 { +func (x *DeploymentCreatedEvent) GetMinReplicas() int32 { if x != nil { return x.MinReplicas } return 0 } -func (x *Deployment) GetEventType() DeploymentEventType { - if x != nil { - return x.EventType - } - return DeploymentEventType_DEPLOYMENT_UNKNOWN -} - -func (x *Deployment) GetReplaced() string { +func (x *DeploymentCreatedEvent) GetReplaced() string { if x != nil && x.Replaced != nil { return *x.Replaced } return "" } -type LogEntry struct { +type DeploymentUpdatedEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DeploymentName string `protobuf:"bytes,1,opt,name=deployment_name,json=deploymentName,proto3" json:"deployment_name,omitempty"` - RequestName *string `protobuf:"bytes,2,opt,name=request_name,json=requestName,proto3,oneof" json:"request_name,omitempty"` - TimeStamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=time_stamp,json=timeStamp,proto3" json:"time_stamp,omitempty"` - LogLevel int32 `protobuf:"varint,4,opt,name=log_level,json=logLevel,proto3" json:"log_level,omitempty"` - Attributes map[string]string `protobuf:"bytes,5,rep,name=attributes,proto3" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Message string `protobuf:"bytes,6,opt,name=message,proto3" json:"message,omitempty"` - Error *string `protobuf:"bytes,7,opt,name=error,proto3,oneof" json:"error,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + MinReplicas int32 `protobuf:"varint,2,opt,name=min_replicas,json=minReplicas,proto3" json:"min_replicas,omitempty"` + PrevMinReplicas int32 `protobuf:"varint,3,opt,name=prev_min_replicas,json=prevMinReplicas,proto3" json:"prev_min_replicas,omitempty"` } -func (x *LogEntry) Reset() { - *x = LogEntry{} +func (x *DeploymentUpdatedEvent) Reset() { + *x = DeploymentUpdatedEvent{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[2] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LogEntry) String() string { +func (x *DeploymentUpdatedEvent) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LogEntry) ProtoMessage() {} +func (*DeploymentUpdatedEvent) ProtoMessage() {} -func (x *LogEntry) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[2] +func (x *DeploymentUpdatedEvent) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -471,58 +505,30 @@ func (x *LogEntry) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LogEntry.ProtoReflect.Descriptor instead. -func (*LogEntry) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{2} +// Deprecated: Use DeploymentUpdatedEvent.ProtoReflect.Descriptor instead. +func (*DeploymentUpdatedEvent) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{3} } -func (x *LogEntry) GetDeploymentName() string { +func (x *DeploymentUpdatedEvent) GetName() string { if x != nil { - return x.DeploymentName - } - return "" -} - -func (x *LogEntry) GetRequestName() string { - if x != nil && x.RequestName != nil { - return *x.RequestName + return x.Name } return "" } -func (x *LogEntry) GetTimeStamp() *timestamppb.Timestamp { +func (x *DeploymentUpdatedEvent) GetMinReplicas() int32 { if x != nil { - return x.TimeStamp - } - return nil -} - -func (x *LogEntry) GetLogLevel() int32 { - if x != nil { - return x.LogLevel + return x.MinReplicas } return 0 } -func (x *LogEntry) GetAttributes() map[string]string { +func (x *DeploymentUpdatedEvent) GetPrevMinReplicas() int32 { if x != nil { - return x.Attributes - } - return nil -} - -func (x *LogEntry) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -func (x *LogEntry) GetError() string { - if x != nil && x.Error != nil { - return *x.Error + return x.PrevMinReplicas } - return "" + return 0 } type Verb struct { @@ -538,7 +544,7 @@ type Verb struct { func (x *Verb) Reset() { *x = Verb{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[3] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -551,7 +557,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[3] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -564,7 +570,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{3} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{4} } func (x *Verb) GetVerb() *schema.Verb { @@ -600,7 +606,7 @@ type Data struct { func (x *Data) Reset() { *x = Data{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[4] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -613,7 +619,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[4] + 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 { @@ -626,7 +632,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{4} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{5} } func (x *Data) GetData() *schema.Data { @@ -659,7 +665,7 @@ type Module struct { func (x *Module) Reset() { *x = Module{} 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) } @@ -672,7 +678,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[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 { @@ -685,7 +691,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{5} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{6} } func (x *Module) GetName() string { @@ -739,7 +745,7 @@ type GetModulesRequest struct { func (x *GetModulesRequest) Reset() { *x = GetModulesRequest{} 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) } @@ -752,7 +758,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[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 { @@ -765,7 +771,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{6} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{7} } type GetModulesResponse struct { @@ -779,7 +785,7 @@ type GetModulesResponse struct { func (x *GetModulesResponse) Reset() { *x = GetModulesResponse{} 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) } @@ -792,7 +798,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[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 { @@ -805,7 +811,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{7} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{8} } func (x *GetModulesResponse) GetModules() []*Module { @@ -829,7 +835,7 @@ type EventsQuery struct { func (x *EventsQuery) Reset() { *x = EventsQuery{} 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) } @@ -842,7 +848,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[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 { @@ -855,7 +861,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{8} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9} } func (x *EventsQuery) GetFilters() []*EventsQuery_Filter { @@ -891,7 +897,7 @@ type StreamEventsRequest struct { func (x *StreamEventsRequest) Reset() { *x = StreamEventsRequest{} 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) } @@ -904,7 +910,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[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 { @@ -917,7 +923,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{9} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{10} } func (x *StreamEventsRequest) GetUpdateInterval() *durationpb.Duration { @@ -948,7 +954,7 @@ type StreamEventsResponse struct { func (x *StreamEventsResponse) Reset() { *x = StreamEventsResponse{} 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) } @@ -961,7 +967,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[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 { @@ -974,7 +980,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{10} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{11} } func (x *StreamEventsResponse) GetEvent() *Event { @@ -1000,16 +1006,17 @@ type Event struct { // Unique ID for event. Id int64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"` // Types that are assignable to Entry: - // *Event_Call - // *Event_Deployment // *Event_Log + // *Event_Call + // *Event_DeploymentCreated + // *Event_DeploymentUpdated 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[11] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1022,7 +1029,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[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 { @@ -1035,7 +1042,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{11} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{12} } func (x *Event) GetTimeStamp() *timestamppb.Timestamp { @@ -1059,23 +1066,30 @@ func (m *Event) GetEntry() isEvent_Entry { return nil } -func (x *Event) GetCall() *Call { +func (x *Event) GetLog() *LogEvent { + if x, ok := x.GetEntry().(*Event_Log); ok { + return x.Log + } + return nil +} + +func (x *Event) GetCall() *CallEvent { if x, ok := x.GetEntry().(*Event_Call); ok { return x.Call } return nil } -func (x *Event) GetDeployment() *Deployment { - if x, ok := x.GetEntry().(*Event_Deployment); ok { - return x.Deployment +func (x *Event) GetDeploymentCreated() *DeploymentCreatedEvent { + if x, ok := x.GetEntry().(*Event_DeploymentCreated); ok { + return x.DeploymentCreated } return nil } -func (x *Event) GetLog() *LogEntry { - if x, ok := x.GetEntry().(*Event_Log); ok { - return x.Log +func (x *Event) GetDeploymentUpdated() *DeploymentUpdatedEvent { + if x, ok := x.GetEntry().(*Event_DeploymentUpdated); ok { + return x.DeploymentUpdated } return nil } @@ -1084,23 +1098,29 @@ type isEvent_Entry interface { isEvent_Entry() } +type Event_Log struct { + Log *LogEvent `protobuf:"bytes,3,opt,name=log,proto3,oneof"` +} + type Event_Call struct { - Call *Call `protobuf:"bytes,3,opt,name=call,proto3,oneof"` + Call *CallEvent `protobuf:"bytes,4,opt,name=call,proto3,oneof"` } -type Event_Deployment struct { - Deployment *Deployment `protobuf:"bytes,4,opt,name=deployment,proto3,oneof"` +type Event_DeploymentCreated struct { + DeploymentCreated *DeploymentCreatedEvent `protobuf:"bytes,5,opt,name=deployment_created,json=deploymentCreated,proto3,oneof"` } -type Event_Log struct { - Log *LogEntry `protobuf:"bytes,5,opt,name=log,proto3,oneof"` +type Event_DeploymentUpdated struct { + DeploymentUpdated *DeploymentUpdatedEvent `protobuf:"bytes,6,opt,name=deployment_updated,json=deploymentUpdated,proto3,oneof"` } +func (*Event_Log) isEvent_Entry() {} + func (*Event_Call) isEvent_Entry() {} -func (*Event_Deployment) isEvent_Entry() {} +func (*Event_DeploymentCreated) isEvent_Entry() {} -func (*Event_Log) isEvent_Entry() {} +func (*Event_DeploymentUpdated) isEvent_Entry() {} type GetEventsResponse struct { state protoimpl.MessageState @@ -1115,7 +1135,7 @@ type GetEventsResponse struct { func (x *GetEventsResponse) Reset() { *x = GetEventsResponse{} 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) } @@ -1128,7 +1148,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[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 { @@ -1141,7 +1161,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{12} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{13} } func (x *GetEventsResponse) GetEvents() []*Event { @@ -1170,7 +1190,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[14] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1183,7 +1203,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[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 { @@ -1196,7 +1216,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{8, 0} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9, 0} } func (x *EventsQuery_LimitFilter) GetLimit() int32 { @@ -1218,7 +1238,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[15] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1231,7 +1251,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[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 { @@ -1244,7 +1264,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{8, 1} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9, 1} } func (x *EventsQuery_LogLevelFilter) GetLogLevel() LogLevel { @@ -1266,7 +1286,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[16] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1279,7 +1299,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[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 { @@ -1292,7 +1312,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{8, 2} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9, 2} } func (x *EventsQuery_DeploymentFilter) GetDeployments() []string { @@ -1314,7 +1334,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[17] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1327,7 +1347,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[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 { @@ -1340,7 +1360,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{8, 3} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9, 3} } func (x *EventsQuery_RequestFilter) GetRequests() []string { @@ -1362,7 +1382,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[18] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1375,7 +1395,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[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 { @@ -1388,7 +1408,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{8, 4} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9, 4} } func (x *EventsQuery_EventTypeFilter) GetEventTypes() []EventType { @@ -1413,7 +1433,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[19] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1426,7 +1446,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[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 { @@ -1439,7 +1459,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{8, 5} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9, 5} } func (x *EventsQuery_TimeFilter) GetOlderThan() *timestamppb.Timestamp { @@ -1471,7 +1491,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[20] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1484,7 +1504,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[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 { @@ -1497,7 +1517,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{8, 6} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9, 6} } func (x *EventsQuery_IDFilter) GetLowerThan() int64 { @@ -1528,7 +1548,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[21] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1541,7 +1561,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[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 { @@ -1554,7 +1574,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{8, 7} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9, 7} } func (x *EventsQuery_CallFilter) GetDestModule() string { @@ -1600,7 +1620,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[22] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1613,7 +1633,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[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 { @@ -1626,7 +1646,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{8, 8} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{9, 8} } func (m *EventsQuery_Filter) GetFilter() isEventsQuery_Filter_Filter { @@ -1759,79 +1779,83 @@ var file_xyz_block_ftl_v1_console_console_proto_rawDesc = []byte{ 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x74, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xec, 0x03, 0x0a, 0x04, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x26, - 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 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, 0x4d, 0x0a, 0x0f, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x20, 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, 0x65, 0x66, 0x48, 0x01, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, - 0x65, 0x72, 0x62, 0x52, 0x65, 0x66, 0x88, 0x01, 0x01, 0x12, 0x52, 0x0a, 0x14, 0x64, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x5f, 0x72, 0x65, - 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 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, 0x65, 0x66, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x65, 0x66, 0x12, 0x35, 0x0a, - 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 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, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0xfc, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, - 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x4c, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 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, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x64, 0x22, 0x96, 0x03, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, - 0x01, 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, 0x1b, 0x0a, 0x09, - 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x52, 0x0a, 0x0a, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 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, 0x6e, 0x74, 0x72, - 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x88, - 0x01, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x81, 0x01, 0x0a, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x96, 0x03, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x88, 0x01, 0x01, 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, 0x1b, + 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x52, 0x0a, 0x0a, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 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, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x88, 0x01, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xf1, + 0x03, 0x0a, 0x09, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0c, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 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, 0x4d, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x20, 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, 0x65, 0x66, 0x48, 0x01, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, + 0x62, 0x52, 0x65, 0x66, 0x88, 0x01, 0x01, 0x12, 0x52, 0x0a, 0x14, 0x64, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 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, 0x65, 0x66, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x65, 0x66, 0x12, 0x35, 0x0a, 0x08, 0x64, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 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, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x76, 0x65, 0x72, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0xba, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x73, 0x12, 0x1f, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x88, + 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x22, + 0x7b, 0x0a, 0x16, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, + 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x70, 0x72, 0x65, + 0x76, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 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, @@ -1984,85 +2008,88 @@ var file_xyz_block_ftl_v1_console_console_proto_rawDesc = []byte{ 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, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, - 0x6d, 0x6f, 0x72, 0x65, 0x22, 0x91, 0x02, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x39, + 0x6d, 0x6f, 0x72, 0x65, 0x22, 0x94, 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, 0x34, 0x0a, 0x04, 0x63, 0x61, 0x6c, - 0x6c, 0x18, 0x03, 0x20, 0x01, 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, 0x43, 0x61, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, - 0x46, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 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, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x05, - 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, 0x6e, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x6f, 0x67, 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, 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, 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, 0x67, - 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, 0x19, 0x0a, 0x15, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x13, - 0x0a, 0x0f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x4c, - 0x4c, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x4c, 0x4f, 0x47, 0x10, 0x03, 0x2a, 0x76, 0x0a, 0x13, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, - 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, - 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x16, - 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, - 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x44, 0x10, 0x03, 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, 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, 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, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 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, 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, 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, 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, + 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, 0x92, 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, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x45, + 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x4c, 0x4c, 0x10, 0x02, + 0x12, 0x21, 0x0a, 0x1d, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, + 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, + 0x44, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x45, 0x56, 0x45, 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, 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, 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, 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, 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, 0x48, 0x50, 0x01, 0x5a, 0x44, 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, 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, + 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, 0x48, 0x50, 0x01, 0x5a, + 0x44, 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, 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 ( @@ -2077,16 +2104,16 @@ func file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP() []byte { return file_xyz_block_ftl_v1_console_console_proto_rawDescData } -var file_xyz_block_ftl_v1_console_console_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_xyz_block_ftl_v1_console_console_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +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, 24) var file_xyz_block_ftl_v1_console_console_proto_goTypes = []interface{}{ (EventType)(0), // 0: xyz.block.ftl.v1.console.EventType - (DeploymentEventType)(0), // 1: xyz.block.ftl.v1.console.DeploymentEventType - (LogLevel)(0), // 2: xyz.block.ftl.v1.console.LogLevel - (EventsQuery_Order)(0), // 3: xyz.block.ftl.v1.console.EventsQuery.Order - (*Call)(nil), // 4: xyz.block.ftl.v1.console.Call - (*Deployment)(nil), // 5: xyz.block.ftl.v1.console.Deployment - (*LogEntry)(nil), // 6: xyz.block.ftl.v1.console.LogEntry + (LogLevel)(0), // 1: xyz.block.ftl.v1.console.LogLevel + (EventsQuery_Order)(0), // 2: xyz.block.ftl.v1.console.EventsQuery.Order + (*LogEvent)(nil), // 3: xyz.block.ftl.v1.console.LogEvent + (*CallEvent)(nil), // 4: xyz.block.ftl.v1.console.CallEvent + (*DeploymentCreatedEvent)(nil), // 5: xyz.block.ftl.v1.console.DeploymentCreatedEvent + (*DeploymentUpdatedEvent)(nil), // 6: xyz.block.ftl.v1.console.DeploymentUpdatedEvent (*Verb)(nil), // 7: xyz.block.ftl.v1.console.Verb (*Data)(nil), // 8: xyz.block.ftl.v1.console.Data (*Module)(nil), // 9: xyz.block.ftl.v1.console.Module @@ -2097,7 +2124,7 @@ var file_xyz_block_ftl_v1_console_console_proto_goTypes = []interface{}{ (*StreamEventsResponse)(nil), // 14: xyz.block.ftl.v1.console.StreamEventsResponse (*Event)(nil), // 15: xyz.block.ftl.v1.console.Event (*GetEventsResponse)(nil), // 16: xyz.block.ftl.v1.console.GetEventsResponse - nil, // 17: xyz.block.ftl.v1.console.LogEntry.AttributesEntry + nil, // 17: xyz.block.ftl.v1.console.LogEvent.AttributesEntry (*EventsQuery_LimitFilter)(nil), // 18: xyz.block.ftl.v1.console.EventsQuery.LimitFilter (*EventsQuery_LogLevelFilter)(nil), // 19: xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter (*EventsQuery_DeploymentFilter)(nil), // 20: xyz.block.ftl.v1.console.EventsQuery.DeploymentFilter @@ -2116,29 +2143,29 @@ var file_xyz_block_ftl_v1_console_console_proto_goTypes = []interface{}{ (*v1.PingResponse)(nil), // 33: xyz.block.ftl.v1.PingResponse } var file_xyz_block_ftl_v1_console_console_proto_depIdxs = []int32{ - 27, // 0: xyz.block.ftl.v1.console.Call.time_stamp:type_name -> google.protobuf.Timestamp - 28, // 1: xyz.block.ftl.v1.console.Call.source_verb_ref:type_name -> xyz.block.ftl.v1.schema.VerbRef - 28, // 2: xyz.block.ftl.v1.console.Call.destination_verb_ref:type_name -> xyz.block.ftl.v1.schema.VerbRef - 29, // 3: xyz.block.ftl.v1.console.Call.duration:type_name -> google.protobuf.Duration - 1, // 4: xyz.block.ftl.v1.console.Deployment.event_type:type_name -> xyz.block.ftl.v1.console.DeploymentEventType - 27, // 5: xyz.block.ftl.v1.console.LogEntry.time_stamp:type_name -> google.protobuf.Timestamp - 17, // 6: xyz.block.ftl.v1.console.LogEntry.attributes:type_name -> xyz.block.ftl.v1.console.LogEntry.AttributesEntry - 30, // 7: xyz.block.ftl.v1.console.Verb.verb:type_name -> xyz.block.ftl.v1.schema.Verb - 31, // 8: xyz.block.ftl.v1.console.Data.data:type_name -> xyz.block.ftl.v1.schema.Data - 7, // 9: xyz.block.ftl.v1.console.Module.verbs:type_name -> xyz.block.ftl.v1.console.Verb - 8, // 10: xyz.block.ftl.v1.console.Module.data:type_name -> xyz.block.ftl.v1.console.Data - 9, // 11: xyz.block.ftl.v1.console.GetModulesResponse.modules:type_name -> xyz.block.ftl.v1.console.Module - 26, // 12: xyz.block.ftl.v1.console.EventsQuery.filters:type_name -> xyz.block.ftl.v1.console.EventsQuery.Filter - 3, // 13: xyz.block.ftl.v1.console.EventsQuery.order:type_name -> xyz.block.ftl.v1.console.EventsQuery.Order - 29, // 14: xyz.block.ftl.v1.console.StreamEventsRequest.update_interval:type_name -> google.protobuf.Duration - 12, // 15: xyz.block.ftl.v1.console.StreamEventsRequest.query:type_name -> xyz.block.ftl.v1.console.EventsQuery - 15, // 16: xyz.block.ftl.v1.console.StreamEventsResponse.event:type_name -> xyz.block.ftl.v1.console.Event - 27, // 17: xyz.block.ftl.v1.console.Event.time_stamp:type_name -> google.protobuf.Timestamp - 4, // 18: xyz.block.ftl.v1.console.Event.call:type_name -> xyz.block.ftl.v1.console.Call - 5, // 19: xyz.block.ftl.v1.console.Event.deployment:type_name -> xyz.block.ftl.v1.console.Deployment - 6, // 20: xyz.block.ftl.v1.console.Event.log:type_name -> xyz.block.ftl.v1.console.LogEntry + 27, // 0: xyz.block.ftl.v1.console.LogEvent.time_stamp:type_name -> google.protobuf.Timestamp + 17, // 1: xyz.block.ftl.v1.console.LogEvent.attributes:type_name -> xyz.block.ftl.v1.console.LogEvent.AttributesEntry + 27, // 2: xyz.block.ftl.v1.console.CallEvent.time_stamp:type_name -> google.protobuf.Timestamp + 28, // 3: xyz.block.ftl.v1.console.CallEvent.source_verb_ref:type_name -> xyz.block.ftl.v1.schema.VerbRef + 28, // 4: xyz.block.ftl.v1.console.CallEvent.destination_verb_ref:type_name -> xyz.block.ftl.v1.schema.VerbRef + 29, // 5: xyz.block.ftl.v1.console.CallEvent.duration:type_name -> google.protobuf.Duration + 30, // 6: xyz.block.ftl.v1.console.Verb.verb:type_name -> xyz.block.ftl.v1.schema.Verb + 31, // 7: xyz.block.ftl.v1.console.Data.data:type_name -> xyz.block.ftl.v1.schema.Data + 7, // 8: xyz.block.ftl.v1.console.Module.verbs:type_name -> xyz.block.ftl.v1.console.Verb + 8, // 9: xyz.block.ftl.v1.console.Module.data:type_name -> xyz.block.ftl.v1.console.Data + 9, // 10: xyz.block.ftl.v1.console.GetModulesResponse.modules:type_name -> xyz.block.ftl.v1.console.Module + 26, // 11: xyz.block.ftl.v1.console.EventsQuery.filters:type_name -> xyz.block.ftl.v1.console.EventsQuery.Filter + 2, // 12: xyz.block.ftl.v1.console.EventsQuery.order:type_name -> xyz.block.ftl.v1.console.EventsQuery.Order + 29, // 13: xyz.block.ftl.v1.console.StreamEventsRequest.update_interval:type_name -> google.protobuf.Duration + 12, // 14: xyz.block.ftl.v1.console.StreamEventsRequest.query:type_name -> xyz.block.ftl.v1.console.EventsQuery + 15, // 15: xyz.block.ftl.v1.console.StreamEventsResponse.event:type_name -> xyz.block.ftl.v1.console.Event + 27, // 16: xyz.block.ftl.v1.console.Event.time_stamp:type_name -> google.protobuf.Timestamp + 3, // 17: xyz.block.ftl.v1.console.Event.log:type_name -> xyz.block.ftl.v1.console.LogEvent + 4, // 18: xyz.block.ftl.v1.console.Event.call:type_name -> xyz.block.ftl.v1.console.CallEvent + 5, // 19: xyz.block.ftl.v1.console.Event.deployment_created:type_name -> xyz.block.ftl.v1.console.DeploymentCreatedEvent + 6, // 20: xyz.block.ftl.v1.console.Event.deployment_updated:type_name -> xyz.block.ftl.v1.console.DeploymentUpdatedEvent 15, // 21: xyz.block.ftl.v1.console.GetEventsResponse.events:type_name -> xyz.block.ftl.v1.console.Event - 2, // 22: xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter.log_level:type_name -> xyz.block.ftl.v1.console.LogLevel + 1, // 22: xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter.log_level:type_name -> xyz.block.ftl.v1.console.LogLevel 0, // 23: xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter.event_types:type_name -> xyz.block.ftl.v1.console.EventType 27, // 24: xyz.block.ftl.v1.console.EventsQuery.TimeFilter.older_than:type_name -> google.protobuf.Timestamp 27, // 25: xyz.block.ftl.v1.console.EventsQuery.TimeFilter.newer_than:type_name -> google.protobuf.Timestamp @@ -2172,7 +2199,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } if !protoimpl.UnsafeEnabled { file_xyz_block_ftl_v1_console_console_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Call); i { + switch v := v.(*LogEvent); i { case 0: return &v.state case 1: @@ -2184,7 +2211,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Deployment); i { + switch v := v.(*CallEvent); i { case 0: return &v.state case 1: @@ -2196,7 +2223,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogEntry); i { + switch v := v.(*DeploymentCreatedEvent); i { case 0: return &v.state case 1: @@ -2208,7 +2235,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Verb); i { + switch v := v.(*DeploymentUpdatedEvent); i { case 0: return &v.state case 1: @@ -2220,7 +2247,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Data); i { + switch v := v.(*Verb); i { case 0: return &v.state case 1: @@ -2232,7 +2259,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Module); i { + switch v := v.(*Data); i { case 0: return &v.state case 1: @@ -2244,7 +2271,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetModulesRequest); i { + switch v := v.(*Module); i { case 0: return &v.state case 1: @@ -2256,7 +2283,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetModulesResponse); i { + switch v := v.(*GetModulesRequest); i { case 0: return &v.state case 1: @@ -2268,7 +2295,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EventsQuery); i { + switch v := v.(*GetModulesResponse); i { case 0: return &v.state case 1: @@ -2280,7 +2307,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEventsRequest); i { + switch v := v.(*EventsQuery); i { case 0: return &v.state case 1: @@ -2292,7 +2319,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEventsResponse); i { + switch v := v.(*StreamEventsRequest); i { case 0: return &v.state case 1: @@ -2304,7 +2331,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Event); i { + switch v := v.(*StreamEventsResponse); i { case 0: return &v.state case 1: @@ -2316,6 +2343,18 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + 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[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetEventsResponse); i { case 0: return &v.state @@ -2327,7 +2366,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventsQuery_LimitFilter); i { case 0: return &v.state @@ -2339,7 +2378,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventsQuery_LogLevelFilter); i { case 0: return &v.state @@ -2351,7 +2390,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventsQuery_DeploymentFilter); i { case 0: return &v.state @@ -2363,7 +2402,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventsQuery_RequestFilter); i { case 0: return &v.state @@ -2375,7 +2414,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventsQuery_EventTypeFilter); i { case 0: return &v.state @@ -2387,7 +2426,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventsQuery_TimeFilter); i { case 0: return &v.state @@ -2399,7 +2438,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventsQuery_IDFilter); i { case 0: return &v.state @@ -2411,7 +2450,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventsQuery_CallFilter); i { case 0: return &v.state @@ -2423,7 +2462,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventsQuery_Filter); i { case 0: return &v.state @@ -2439,17 +2478,18 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { file_xyz_block_ftl_v1_console_console_proto_msgTypes[0].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[1].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[2].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[9].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[11].OneofWrappers = []interface{}{ - (*Event_Call)(nil), - (*Event_Deployment)(nil), + file_xyz_block_ftl_v1_console_console_proto_msgTypes[10].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_console_console_proto_msgTypes[12].OneofWrappers = []interface{}{ (*Event_Log)(nil), + (*Event_Call)(nil), + (*Event_DeploymentCreated)(nil), + (*Event_DeploymentUpdated)(nil), } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[12].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[19].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_console_console_proto_msgTypes[13].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[20].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[21].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[22].OneofWrappers = []interface{}{ + file_xyz_block_ftl_v1_console_console_proto_msgTypes[22].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_console_console_proto_msgTypes[23].OneofWrappers = []interface{}{ (*EventsQuery_Filter_Limit)(nil), (*EventsQuery_Filter_LogLevel)(nil), (*EventsQuery_Filter_Deployments)(nil), @@ -2464,8 +2504,8 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xyz_block_ftl_v1_console_console_proto_rawDesc, - NumEnums: 4, - NumMessages: 23, + NumEnums: 3, + NumMessages: 24, NumExtensions: 0, NumServices: 1, }, diff --git a/protos/xyz/block/ftl/v1/console/console.proto b/protos/xyz/block/ftl/v1/console/console.proto index c299321e81..4be0099dad 100644 --- a/protos/xyz/block/ftl/v1/console/console.proto +++ b/protos/xyz/block/ftl/v1/console/console.proto @@ -10,7 +10,34 @@ import "xyz/block/ftl/v1/schema/schema.proto"; option go_package = "github.com/TBD54566975/ftl/protos/xyz/block/ftl/v1/console;pbconsole"; option java_multiple_files = true; -message Call { +enum EventType { + EVENT_TYPE_UNKNOWN = 0; + EVENT_TYPE_LOG = 1; + EVENT_TYPE_CALL = 2; + EVENT_TYPE_DEPLOYMENT_CREATED = 3; + EVENT_TYPE_DEPLOYMENT_UPDATED = 4; +} + +enum LogLevel { + LOG_LEVEL_UNKNOWN = 0; + LOG_LEVEL_TRACE = 1; + LOG_LEVEL_DEBUG = 5; + LOG_LEVEL_INFO = 9; + LOG_LEVEL_WARN = 13; + LOG_LEVEL_ERROR = 17; +} + +message LogEvent { + string deployment_name = 1; + optional string request_name = 2; + google.protobuf.Timestamp time_stamp = 3; + int32 log_level = 4; + map attributes = 5; + string message = 6; + optional string error = 7; +} + +message CallEvent { optional string request_name = 1; string deployment_name = 2; google.protobuf.Timestamp time_stamp = 3; @@ -22,37 +49,18 @@ message Call { optional string error = 9; } -enum EventType { - EVENT_TYPE_UNKNOWN = 0; - EVENT_TYPE_DEPLOYMENT = 1; - EVENT_TYPE_CALL = 2; - EVENT_TYPE_LOG = 3; -} - -enum DeploymentEventType { - DEPLOYMENT_UNKNOWN = 0; - DEPLOYMENT_CREATED = 1; - DEPLOYMENT_UPDATED = 2; - DEPLOYMENT_REPLACED = 3; -} - -message Deployment { +message DeploymentCreatedEvent { string name = 1; string language = 2; string module_name = 3; int32 min_replicas = 4; - DeploymentEventType event_type = 5; - optional string replaced = 6; + optional string replaced = 5; } -message LogEntry { - string deployment_name = 1; - optional string request_name = 2; - google.protobuf.Timestamp time_stamp = 3; - int32 log_level = 4; - map attributes = 5; - string message = 6; - optional string error = 7; +message DeploymentUpdatedEvent { + string name = 1; + int32 min_replicas = 2; + int32 prev_min_replicas = 3; } message Verb { @@ -80,15 +88,6 @@ message GetModulesResponse { repeated Module modules = 1; } -enum LogLevel { - LOG_LEVEL_UNKNOWN = 0; - LOG_LEVEL_TRACE = 1; - LOG_LEVEL_DEBUG = 5; - LOG_LEVEL_INFO = 9; - LOG_LEVEL_WARN = 13; - LOG_LEVEL_ERROR = 17; -} - // Query for events. message EventsQuery { // Limit the number of events returned. @@ -174,9 +173,10 @@ message Event { // Unique ID for event. int64 id = 2; oneof entry { - Call call = 3; - Deployment deployment = 4; - LogEntry log = 5; + LogEvent log = 3; + CallEvent call = 4; + DeploymentCreatedEvent deployment_created = 5; + DeploymentUpdatedEvent deployment_updated = 6; } }