From 1724718d3fa296f0eff2a425f0026edc6306b35e Mon Sep 17 00:00:00 2001 From: Nick Schuch Date: Thu, 23 Apr 2026 10:18:36 +1000 Subject: [PATCH 1/7] New Query and Summarise RPC for logs service --- logs.proto | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/logs.proto b/logs.proto index eb4effe..3b6d923 100644 --- a/logs.proto +++ b/logs.proto @@ -3,11 +3,16 @@ syntax = "proto3"; package workflow; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; + option go_package = "./pb"; service logs { rpc Tail (LogTailRequest) returns (stream LogTailResponse) {} rpc ListStreams (LogListStreamsRequest) returns (LogListStreamsResponse) {} + rpc Query (LogQueryRequest) returns (stream LogQueryResponse) {} + rpc Summarise (LogSummariseRequest) returns (LogSummariseResponse) {} } /** @@ -39,3 +44,78 @@ message LogListStreamsResponse { repeated string Streams = 1; // Streams available for an environment string Default = 2; // Default stream } + +/** + * Shared filter block for bounded log queries and summarisation + */ +message LogFilter { + string Environment = 1; // Name of the environment + repeated string Streams = 2; // Stream IDs to include; empty means all + google.protobuf.Duration Timeframe = 3; // Window duration relative to now; mutually exclusive with TimeRange + LogTimeRange TimeRange = 4; // Custom absolute time range; used when Timeframe is unset + string Contains = 5; // Substring / multi-line query text +} + +/** + * Custom time range for a log query + */ +message LogTimeRange { + google.protobuf.Timestamp From = 1; // Start of range + google.protobuf.Timestamp To = 2; // End of range +} + +/** + * Run a bounded log query + */ +message LogQueryRequest { + LogFilter Filter = 1; // Filter block + int32 Limit = 2; // Cap on returned events; 0 for server default +} + +/** + * Streamed query response: events followed by a final Meta message + */ +message LogQueryResponse { + oneof Body { + LogEvent Event = 1; // A single matched log event + LogQueryMeta Meta = 2; // Final message summarising the run + } +} + +/** + * A single log event returned by a query + */ +message LogEvent { + string Id = 1; // Unique event ID + google.protobuf.Timestamp Timestamp = 2; // Event timestamp + string Stream = 3; // Stream ID e.g. "nginx","fpm","cli","cloudfront","invalidations","waf" + string Message = 4; // Human-readable message line + string Level = 5; // Level e.g. "info","warning","error" (optional) + int32 Status = 6; // HTTP status code if applicable; 0 when not applicable + string Raw = 7; // Original JSON payload, serialised as a string +} + +/** + * Metadata for a completed query run, emitted as the final stream message + */ +message LogQueryMeta { + int64 Scanned = 1; // Total events scanned across selected streams + google.protobuf.Timestamp RanAt = 2; // Timestamp of when the query ran +} + +/** + * Summarise a log window using a natural-language prompt + */ +message LogSummariseRequest { + LogFilter Filter = 1; // Filter block describing the window to summarise + string Prompt = 2; // Natural-language question for the summariser +} + +/** + * AI-generated summary of a log window + */ +message LogSummariseResponse { + string Tldr = 1; // One-paragraph summary + repeated string Bullets = 2; // Notable events / observations + repeated string SuggestedActions = 3; // Suggested follow-up actions +} From b53f4cfea9f68ad27f04d65fa30e17a6596bb053 Mon Sep 17 00:00:00 2001 From: Nick Schuch Date: Thu, 23 Apr 2026 14:47:43 +1000 Subject: [PATCH 2/7] Mock --- internal/server/mock/logs/server.go | 156 ++++- logs.proto | 13 +- pb/environment.pb.go | 900 ++++++++++++++-------------- pb/logs.pb.go | 826 +++++++++++++++++++++++-- pb/logs_grpc.pb.go | 99 +++ 5 files changed, 1496 insertions(+), 498 deletions(-) diff --git a/internal/server/mock/logs/server.go b/internal/server/mock/logs/server.go index 0127cd5..5bc1130 100644 --- a/internal/server/mock/logs/server.go +++ b/internal/server/mock/logs/server.go @@ -4,8 +4,11 @@ import ( "context" "fmt" "slices" + "strings" "time" + "google.golang.org/protobuf/types/known/timestamppb" + "github.com/skpr/api/pb" ) @@ -14,6 +17,13 @@ const ( StreamFPM = "fpm" ) +// Raw JSON payloads reused from the Tail mock, kept here so fixture events +// look realistic without duplicating the strings across methods. +const ( + rawNginx = `{ "body_bytes_sent": "37", "http_forward": "10.0.39.194", "http_header": "-", "http_referrer": "-", "http_user_agent": "ELB-HealthChecker/2.0", "http_x_amzn_trace_id": "-", "remote_addr": "10.0.39.194", "remote_user": "-", "request": "GET /readyz HTTP/1.1", "request_id": "6a06b1bf387b54f5f88cd1cac8c75de1", "request_method": "GET", "request_time": "0.001", "request_uri": "/readyz", "request_uri_query": "-", "server_name": "", "status": "200", "timestamp": "2025-03-25T01:21:50+00:00", "upstream_addr": "127.0.0.1:9000", "upstream_cache_status": "-", "upstream_http_x_drupal_cache": "-", "upstream_http_x_drupal_dynamic_cache": "-", "upstream_response_length": "23", "upstream_response_time": "0.002", "upstream_status": "200" }` + rawFPM = `{ "body_bytes_sent": "0", "client_ip": "-", "cpu": "0.00", "headers": { "Cache-Control": "no-cache, no-store, must-revalidate, max-age=0" }, "http_referrer": "", "http_user_agent": "kube-probe/1.31+", "memory": "2097152", "remote_addr": "127.0.0.1", "remote_user": "", "request_id": "eaff1b73b352356ea0a321a250c1d591", "request_time": "0.001", "request_uri": "/readyz", "skpr_component": "fpm", "status": "200", "timestamp": "2025-03-25T01:21:26+0000" }` +) + // Server implements the GRPC "events" definition. type Server struct { pb.UnimplementedLogsServer @@ -48,9 +58,9 @@ func (s *Server) Tail(req *pb.LogTailRequest, server pb.Logs_TailServer) error { message := "" switch req.Stream { case StreamNginx: - message = `{ "body_bytes_sent": "37", "http_forward": "10.0.39.194", "http_header": "-", "http_referrer": "-", "http_user_agent": "ELB-HealthChecker/2.0", "http_x_amzn_trace_id": "-", "remote_addr": "10.0.39.194", "remote_user": "-", "request": "GET /readyz HTTP/1.1", "request_id": "6a06b1bf387b54f5f88cd1cac8c75de1", "request_method": "GET", "request_time": "0.001", "request_uri": "/readyz", "request_uri_query": "-", "server_name": "", "status": "200", "timestamp": "2025-03-25T01:21:50+00:00", "upstream_addr": "127.0.0.1:9000", "upstream_cache_status": "-", "upstream_http_x_drupal_cache": "-", "upstream_http_x_drupal_dynamic_cache": "-", "upstream_response_length": "23", "upstream_response_time": "0.002", "upstream_status": "200" }` + message = rawNginx case StreamFPM: - message = `{ "body_bytes_sent": "0", "client_ip": "-", "cpu": "0.00", "headers": { "Cache-Control": "no-cache, no-store, must-revalidate, max-age=0" }, "http_referrer": "", "http_user_agent": "kube-probe/1.31+", "memory": "2097152", "remote_addr": "127.0.0.1", "remote_user": "", "request_id": "eaff1b73b352356ea0a321a250c1d591", "request_time": "0.001", "request_uri": "/readyz", "skpr_component": "fpm", "status": "200", "timestamp": "2025-03-25T01:21:26+0000" }` + message = rawFPM } pbMessage := &pb.LogTailResponse{ Message: message, @@ -65,3 +75,145 @@ func (s *Server) Tail(req *pb.LogTailRequest, server pb.Logs_TailServer) error { return nil } + +// buildMockEvents returns a fresh fixture with timestamps relative to now. +// Built per request so events always appear recent to the caller. +func buildMockEvents() []*pb.LogEvent { + now := time.Now() + return []*pb.LogEvent{ + { + Timestamp: timestamppb.New(now.Add(-1 * time.Minute)), + Stream: StreamNginx, + Message: "GET /readyz 200", + Level: "info", + Status: 200, + Raw: rawNginx, + }, + { + Timestamp: timestamppb.New(now.Add(-3 * time.Minute)), + Stream: StreamFPM, + Message: "GET /readyz 200", + Level: "info", + Status: 200, + Raw: rawFPM, + }, + { + Timestamp: timestamppb.New(now.Add(-7 * time.Minute)), + Stream: StreamNginx, + Message: "GET /node/1 200", + Level: "info", + Status: 200, + Raw: rawNginx, + }, + { + Timestamp: timestamppb.New(now.Add(-12 * time.Minute)), + Stream: StreamFPM, + Message: "PHP Fatal error: Allowed memory size exhausted", + Level: "error", + Status: 500, + Raw: rawFPM, + }, + { + Timestamp: timestamppb.New(now.Add(-25 * time.Minute)), + Stream: StreamNginx, + Message: "GET /admin 403", + Level: "warning", + Status: 403, + Raw: rawNginx, + }, + { + Timestamp: timestamppb.New(now.Add(-45 * time.Minute)), + Stream: StreamFPM, + Message: "Slow request detected: 5.2s", + Level: "warning", + Status: 200, + Raw: rawFPM, + }, + } +} + +// Query streams matching log events followed by a terminal metadata message. +// Timeframe and TimeRange on the filter are accepted but ignored by the mock. +func (s *Server) Query(req *pb.LogQueryRequest, stream pb.Logs_QueryServer) error { + if req.Filter == nil { + return fmt.Errorf("filter not provided") + } + + if req.Filter.Environment == "" { + return fmt.Errorf("environment not provided") + } + + events := buildMockEvents() + scanned := int64(len(events)) + + // Filter by stream selection if provided. + if len(req.Filter.Streams) > 0 { + filtered := events[:0:0] + for _, evt := range events { + if slices.Contains(req.Filter.Streams, evt.Stream) { + filtered = append(filtered, evt) + } + } + events = filtered + } + + // Filter by substring query if provided. + if req.Filter.Contains != "" { + filtered := events[:0:0] + for _, evt := range events { + if strings.Contains(evt.Message, req.Filter.Contains) { + filtered = append(filtered, evt) + } + } + events = filtered + } + + // Apply result cap. + if req.Limit > 0 && int(req.Limit) < len(events) { + events = events[:req.Limit] + } + + for _, evt := range events { + resp := &pb.LogQueryResponse{ + Body: &pb.LogQueryResponse_Event{Event: evt}, + } + if err := stream.Send(resp); err != nil { + return err + } + } + + meta := &pb.LogQueryResponse{ + Body: &pb.LogQueryResponse_Meta{ + Meta: &pb.LogQueryMeta{ + Scanned: scanned, + RanAt: timestamppb.Now(), + }, + }, + } + return stream.Send(meta) +} + +// Summarise returns a canned AI-style summary of the requested log window. +// The Prompt field is ignored by the mock. +func (s *Server) Summarise(ctx context.Context, req *pb.LogSummariseRequest) (*pb.LogSummariseResponse, error) { + if req.Filter == nil { + return nil, fmt.Errorf("filter not provided") + } + + if req.Filter.Environment == "" { + return nil, fmt.Errorf("environment not provided") + } + + return &pb.LogSummariseResponse{ + Tldr: "Traffic is nominal with a small number of 5xx errors originating from the fpm stream; nginx is healthy.", + Bullets: []string{ + "99.2% of requests returned 2xx", + "3 elevated-error windows detected in fpm between 01:20-01:40 UTC", + "No WAF blocks observed in the window", + }, + SuggestedActions: []string{ + "Inspect fpm error logs around 01:30 UTC for root cause", + "Consider increasing the fpm worker count if load continues to rise", + }, + }, nil +} diff --git a/logs.proto b/logs.proto index 3b6d923..e6362ad 100644 --- a/logs.proto +++ b/logs.proto @@ -86,13 +86,12 @@ message LogQueryResponse { * A single log event returned by a query */ message LogEvent { - string Id = 1; // Unique event ID - google.protobuf.Timestamp Timestamp = 2; // Event timestamp - string Stream = 3; // Stream ID e.g. "nginx","fpm","cli","cloudfront","invalidations","waf" - string Message = 4; // Human-readable message line - string Level = 5; // Level e.g. "info","warning","error" (optional) - int32 Status = 6; // HTTP status code if applicable; 0 when not applicable - string Raw = 7; // Original JSON payload, serialised as a string + google.protobuf.Timestamp Timestamp = 1; // Event timestamp + string Stream = 2; // Stream ID e.g. "nginx","fpm","cli","cloudfront","invalidations","waf" + string Message = 3; // Human-readable message line + string Level = 4; // Level e.g. "info","warning","error" (optional) + int32 Status = 5; // HTTP status code if applicable; 0 when not applicable + string Raw = 6; // Original JSON payload, serialised as a string } /** diff --git a/pb/environment.pb.go b/pb/environment.pb.go index 18b5bb5..9e5f92b 100644 --- a/pb/environment.pb.go +++ b/pb/environment.pb.go @@ -65,7 +65,7 @@ func (x Environment_Type) Number() protoreflect.EnumNumber { // Deprecated: Use Environment_Type.Descriptor instead. func (Environment_Type) EnumDescriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{4, 0} + return file_environment_proto_rawDescGZIP(), []int{3, 0} } type EnvironmentValidateFinding_Type int32 @@ -111,7 +111,7 @@ func (x EnvironmentValidateFinding_Type) Number() protoreflect.EnumNumber { // Deprecated: Use EnvironmentValidateFinding_Type.Descriptor instead. func (EnvironmentValidateFinding_Type) EnumDescriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{21, 0} + return file_environment_proto_rawDescGZIP(), []int{20, 0} } type Ingress_Mode int32 @@ -157,7 +157,7 @@ func (x Ingress_Mode) Number() protoreflect.EnumNumber { // Deprecated: Use Ingress_Mode.Descriptor instead. func (Ingress_Mode) EnumDescriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{25, 0} + return file_environment_proto_rawDescGZIP(), []int{24, 0} } // * @@ -209,55 +209,6 @@ func (x *Cache) GetPolicy() string { return "" } -// * -// Environment origin configuration -type Origin struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Policy string `protobuf:"bytes,1,opt,name=Policy,proto3" json:"Policy,omitempty"` // Origin policy assigned to an environment -} - -func (x *Origin) Reset() { - *x = Origin{} - if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Origin) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Origin) ProtoMessage() {} - -func (x *Origin) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[1] - 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 Origin.ProtoReflect.Descriptor instead. -func (*Origin) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{1} -} - -func (x *Origin) GetPolicy() string { - if x != nil { - return x.Policy - } - return "" -} - // * // Environment cron configuration type Cron struct { @@ -273,7 +224,7 @@ type Cron struct { func (x *Cron) Reset() { *x = Cron{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[2] + mi := &file_environment_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -286,7 +237,7 @@ func (x *Cron) String() string { func (*Cron) ProtoMessage() {} func (x *Cron) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[2] + mi := &file_environment_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -299,7 +250,7 @@ func (x *Cron) ProtoReflect() protoreflect.Message { // Deprecated: Use Cron.ProtoReflect.Descriptor instead. func (*Cron) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{2} + return file_environment_proto_rawDescGZIP(), []int{1} } func (x *Cron) GetName() string { @@ -337,7 +288,7 @@ type Daemon struct { func (x *Daemon) Reset() { *x = Daemon{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[3] + mi := &file_environment_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -350,7 +301,7 @@ func (x *Daemon) String() string { func (*Daemon) ProtoMessage() {} func (x *Daemon) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[3] + mi := &file_environment_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -363,7 +314,7 @@ func (x *Daemon) ProtoReflect() protoreflect.Message { // Deprecated: Use Daemon.ProtoReflect.Descriptor instead. func (*Daemon) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{3} + return file_environment_proto_rawDescGZIP(), []int{2} } func (x *Daemon) GetName() string { @@ -413,7 +364,7 @@ type Environment struct { func (x *Environment) Reset() { *x = Environment{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[4] + mi := &file_environment_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -426,7 +377,7 @@ func (x *Environment) String() string { func (*Environment) ProtoMessage() {} func (x *Environment) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[4] + mi := &file_environment_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -439,7 +390,7 @@ func (x *Environment) ProtoReflect() protoreflect.Message { // Deprecated: Use Environment.ProtoReflect.Descriptor instead. func (*Environment) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{4} + return file_environment_proto_rawDescGZIP(), []int{3} } func (x *Environment) GetName() string { @@ -604,7 +555,7 @@ type EnvironmentResources struct { func (x *EnvironmentResources) Reset() { *x = EnvironmentResources{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[5] + mi := &file_environment_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -617,7 +568,7 @@ func (x *EnvironmentResources) String() string { func (*EnvironmentResources) ProtoMessage() {} func (x *EnvironmentResources) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[5] + mi := &file_environment_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -630,7 +581,7 @@ func (x *EnvironmentResources) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentResources.ProtoReflect.Descriptor instead. func (*EnvironmentResources) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{5} + return file_environment_proto_rawDescGZIP(), []int{4} } func (x *EnvironmentResources) GetReplicas() *EnvironmentResourcesReplicas { @@ -669,7 +620,7 @@ type EnvironmentResourcesReplicas struct { func (x *EnvironmentResourcesReplicas) Reset() { *x = EnvironmentResourcesReplicas{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[6] + mi := &file_environment_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -682,7 +633,7 @@ func (x *EnvironmentResourcesReplicas) String() string { func (*EnvironmentResourcesReplicas) ProtoMessage() {} func (x *EnvironmentResourcesReplicas) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[6] + mi := &file_environment_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -695,7 +646,7 @@ func (x *EnvironmentResourcesReplicas) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentResourcesReplicas.ProtoReflect.Descriptor instead. func (*EnvironmentResourcesReplicas) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{6} + return file_environment_proto_rawDescGZIP(), []int{5} } func (x *EnvironmentResourcesReplicas) GetCurrent() int32 { @@ -733,7 +684,7 @@ type EnvironmentResourcesCPU struct { func (x *EnvironmentResourcesCPU) Reset() { *x = EnvironmentResourcesCPU{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[7] + mi := &file_environment_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -746,7 +697,7 @@ func (x *EnvironmentResourcesCPU) String() string { func (*EnvironmentResourcesCPU) ProtoMessage() {} func (x *EnvironmentResourcesCPU) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[7] + mi := &file_environment_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -759,7 +710,7 @@ func (x *EnvironmentResourcesCPU) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentResourcesCPU.ProtoReflect.Descriptor instead. func (*EnvironmentResourcesCPU) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{7} + return file_environment_proto_rawDescGZIP(), []int{6} } func (x *EnvironmentResourcesCPU) GetCurrent() int64 { @@ -790,7 +741,7 @@ type EnvironmentResourcesMemory struct { func (x *EnvironmentResourcesMemory) Reset() { *x = EnvironmentResourcesMemory{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[8] + mi := &file_environment_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -803,7 +754,7 @@ func (x *EnvironmentResourcesMemory) String() string { func (*EnvironmentResourcesMemory) ProtoMessage() {} func (x *EnvironmentResourcesMemory) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[8] + mi := &file_environment_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -816,7 +767,7 @@ func (x *EnvironmentResourcesMemory) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentResourcesMemory.ProtoReflect.Descriptor instead. func (*EnvironmentResourcesMemory) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{8} + return file_environment_proto_rawDescGZIP(), []int{7} } func (x *EnvironmentResourcesMemory) GetCurrent() int64 { @@ -847,7 +798,7 @@ type EnvironmentCreateRequest struct { func (x *EnvironmentCreateRequest) Reset() { *x = EnvironmentCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[9] + mi := &file_environment_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -860,7 +811,7 @@ func (x *EnvironmentCreateRequest) String() string { func (*EnvironmentCreateRequest) ProtoMessage() {} func (x *EnvironmentCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[9] + mi := &file_environment_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -873,7 +824,7 @@ func (x *EnvironmentCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentCreateRequest.ProtoReflect.Descriptor instead. func (*EnvironmentCreateRequest) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{9} + return file_environment_proto_rawDescGZIP(), []int{8} } func (x *EnvironmentCreateRequest) GetEnvironment() *Environment { @@ -903,7 +854,7 @@ type EnvironmentCreateResponse struct { func (x *EnvironmentCreateResponse) Reset() { *x = EnvironmentCreateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[10] + mi := &file_environment_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -916,7 +867,7 @@ func (x *EnvironmentCreateResponse) String() string { func (*EnvironmentCreateResponse) ProtoMessage() {} func (x *EnvironmentCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[10] + mi := &file_environment_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -929,7 +880,7 @@ func (x *EnvironmentCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentCreateResponse.ProtoReflect.Descriptor instead. func (*EnvironmentCreateResponse) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{10} + return file_environment_proto_rawDescGZIP(), []int{9} } func (x *EnvironmentCreateResponse) GetMessage() string { @@ -952,7 +903,7 @@ type EnvironmentDeleteRequest struct { func (x *EnvironmentDeleteRequest) Reset() { *x = EnvironmentDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[11] + mi := &file_environment_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -965,7 +916,7 @@ func (x *EnvironmentDeleteRequest) String() string { func (*EnvironmentDeleteRequest) ProtoMessage() {} func (x *EnvironmentDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[11] + mi := &file_environment_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -978,7 +929,7 @@ func (x *EnvironmentDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentDeleteRequest.ProtoReflect.Descriptor instead. func (*EnvironmentDeleteRequest) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{11} + return file_environment_proto_rawDescGZIP(), []int{10} } func (x *EnvironmentDeleteRequest) GetName() string { @@ -1001,7 +952,7 @@ type EnvironmentDeleteResponse struct { func (x *EnvironmentDeleteResponse) Reset() { *x = EnvironmentDeleteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[12] + mi := &file_environment_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1014,7 +965,7 @@ func (x *EnvironmentDeleteResponse) String() string { func (*EnvironmentDeleteResponse) ProtoMessage() {} func (x *EnvironmentDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[12] + mi := &file_environment_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1027,7 +978,7 @@ func (x *EnvironmentDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentDeleteResponse.ProtoReflect.Descriptor instead. func (*EnvironmentDeleteResponse) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{12} + return file_environment_proto_rawDescGZIP(), []int{11} } func (x *EnvironmentDeleteResponse) GetStatus() string { @@ -1050,7 +1001,7 @@ type EnvironmentGetRequest struct { func (x *EnvironmentGetRequest) Reset() { *x = EnvironmentGetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[13] + mi := &file_environment_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1063,7 +1014,7 @@ func (x *EnvironmentGetRequest) String() string { func (*EnvironmentGetRequest) ProtoMessage() {} func (x *EnvironmentGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[13] + mi := &file_environment_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1076,7 +1027,7 @@ func (x *EnvironmentGetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentGetRequest.ProtoReflect.Descriptor instead. func (*EnvironmentGetRequest) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{13} + return file_environment_proto_rawDescGZIP(), []int{12} } func (x *EnvironmentGetRequest) GetName() string { @@ -1099,7 +1050,7 @@ type EnvironmentGetResponse struct { func (x *EnvironmentGetResponse) Reset() { *x = EnvironmentGetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[14] + mi := &file_environment_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1112,7 +1063,7 @@ func (x *EnvironmentGetResponse) String() string { func (*EnvironmentGetResponse) ProtoMessage() {} func (x *EnvironmentGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[14] + mi := &file_environment_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1125,7 +1076,7 @@ func (x *EnvironmentGetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentGetResponse.ProtoReflect.Descriptor instead. func (*EnvironmentGetResponse) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{14} + return file_environment_proto_rawDescGZIP(), []int{13} } func (x *EnvironmentGetResponse) GetEnvironment() *Environment { @@ -1146,7 +1097,7 @@ type EnvironmentListRequest struct { func (x *EnvironmentListRequest) Reset() { *x = EnvironmentListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[15] + mi := &file_environment_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1159,7 +1110,7 @@ func (x *EnvironmentListRequest) String() string { func (*EnvironmentListRequest) ProtoMessage() {} func (x *EnvironmentListRequest) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[15] + mi := &file_environment_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1172,7 +1123,7 @@ func (x *EnvironmentListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentListRequest.ProtoReflect.Descriptor instead. func (*EnvironmentListRequest) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{15} + return file_environment_proto_rawDescGZIP(), []int{14} } // * @@ -1188,7 +1139,7 @@ type EnvironmentListResponse struct { func (x *EnvironmentListResponse) Reset() { *x = EnvironmentListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[16] + mi := &file_environment_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1201,7 +1152,7 @@ func (x *EnvironmentListResponse) String() string { func (*EnvironmentListResponse) ProtoMessage() {} func (x *EnvironmentListResponse) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[16] + mi := &file_environment_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1214,7 +1165,7 @@ func (x *EnvironmentListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentListResponse.ProtoReflect.Descriptor instead. func (*EnvironmentListResponse) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{16} + return file_environment_proto_rawDescGZIP(), []int{15} } func (x *EnvironmentListResponse) GetEnvironments() []*Environment { @@ -1238,7 +1189,7 @@ type EnvironmentUpdateRequest struct { func (x *EnvironmentUpdateRequest) Reset() { *x = EnvironmentUpdateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[17] + mi := &file_environment_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1251,7 +1202,7 @@ func (x *EnvironmentUpdateRequest) String() string { func (*EnvironmentUpdateRequest) ProtoMessage() {} func (x *EnvironmentUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[17] + mi := &file_environment_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1264,7 +1215,7 @@ func (x *EnvironmentUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentUpdateRequest.ProtoReflect.Descriptor instead. func (*EnvironmentUpdateRequest) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{17} + return file_environment_proto_rawDescGZIP(), []int{16} } func (x *EnvironmentUpdateRequest) GetEnvironment() *Environment { @@ -1294,7 +1245,7 @@ type EnvironmentUpdateResponse struct { func (x *EnvironmentUpdateResponse) Reset() { *x = EnvironmentUpdateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[18] + mi := &file_environment_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1307,7 +1258,7 @@ func (x *EnvironmentUpdateResponse) String() string { func (*EnvironmentUpdateResponse) ProtoMessage() {} func (x *EnvironmentUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[18] + mi := &file_environment_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1320,7 +1271,7 @@ func (x *EnvironmentUpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentUpdateResponse.ProtoReflect.Descriptor instead. func (*EnvironmentUpdateResponse) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{18} + return file_environment_proto_rawDescGZIP(), []int{17} } func (x *EnvironmentUpdateResponse) GetMessage() string { @@ -1343,7 +1294,7 @@ type EnvironmentValidateRequest struct { func (x *EnvironmentValidateRequest) Reset() { *x = EnvironmentValidateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[19] + mi := &file_environment_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1356,7 +1307,7 @@ func (x *EnvironmentValidateRequest) String() string { func (*EnvironmentValidateRequest) ProtoMessage() {} func (x *EnvironmentValidateRequest) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[19] + mi := &file_environment_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1369,7 +1320,7 @@ func (x *EnvironmentValidateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentValidateRequest.ProtoReflect.Descriptor instead. func (*EnvironmentValidateRequest) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{19} + return file_environment_proto_rawDescGZIP(), []int{18} } func (x *EnvironmentValidateRequest) GetEnvironment() *Environment { @@ -1392,7 +1343,7 @@ type EnvironmentValidateResponse struct { func (x *EnvironmentValidateResponse) Reset() { *x = EnvironmentValidateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[20] + mi := &file_environment_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1405,7 +1356,7 @@ func (x *EnvironmentValidateResponse) String() string { func (*EnvironmentValidateResponse) ProtoMessage() {} func (x *EnvironmentValidateResponse) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[20] + mi := &file_environment_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1418,7 +1369,7 @@ func (x *EnvironmentValidateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentValidateResponse.ProtoReflect.Descriptor instead. func (*EnvironmentValidateResponse) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{20} + return file_environment_proto_rawDescGZIP(), []int{19} } func (x *EnvironmentValidateResponse) GetFindings() []*EnvironmentValidateFinding { @@ -1443,7 +1394,7 @@ type EnvironmentValidateFinding struct { func (x *EnvironmentValidateFinding) Reset() { *x = EnvironmentValidateFinding{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[21] + mi := &file_environment_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1456,7 +1407,7 @@ func (x *EnvironmentValidateFinding) String() string { func (*EnvironmentValidateFinding) ProtoMessage() {} func (x *EnvironmentValidateFinding) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[21] + mi := &file_environment_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1469,7 +1420,7 @@ func (x *EnvironmentValidateFinding) ProtoReflect() protoreflect.Message { // Deprecated: Use EnvironmentValidateFinding.ProtoReflect.Descriptor instead. func (*EnvironmentValidateFinding) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{21} + return file_environment_proto_rawDescGZIP(), []int{20} } func (x *EnvironmentValidateFinding) GetGroup() string { @@ -1507,7 +1458,7 @@ type ErrorPage struct { func (x *ErrorPage) Reset() { *x = ErrorPage{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[22] + mi := &file_environment_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1520,7 +1471,7 @@ func (x *ErrorPage) String() string { func (*ErrorPage) ProtoMessage() {} func (x *ErrorPage) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[22] + mi := &file_environment_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1533,7 +1484,7 @@ func (x *ErrorPage) ProtoReflect() protoreflect.Message { // Deprecated: Use ErrorPage.ProtoReflect.Descriptor instead. func (*ErrorPage) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{22} + return file_environment_proto_rawDescGZIP(), []int{21} } func (x *ErrorPage) GetPath() string { @@ -1564,7 +1515,7 @@ type ErrorPages struct { func (x *ErrorPages) Reset() { *x = ErrorPages{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[23] + mi := &file_environment_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1577,7 +1528,7 @@ func (x *ErrorPages) String() string { func (*ErrorPages) ProtoMessage() {} func (x *ErrorPages) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[23] + mi := &file_environment_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1590,7 +1541,7 @@ func (x *ErrorPages) ProtoReflect() protoreflect.Message { // Deprecated: Use ErrorPages.ProtoReflect.Descriptor instead. func (*ErrorPages) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{23} + return file_environment_proto_rawDescGZIP(), []int{22} } func (x *ErrorPages) GetClient() *ErrorPage { @@ -1620,7 +1571,7 @@ type Image struct { func (x *Image) Reset() { *x = Image{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[24] + mi := &file_environment_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1633,7 +1584,7 @@ func (x *Image) String() string { func (*Image) ProtoMessage() {} func (x *Image) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[24] + mi := &file_environment_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1646,7 +1597,7 @@ func (x *Image) ProtoReflect() protoreflect.Message { // Deprecated: Use Image.ProtoReflect.Descriptor instead. func (*Image) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{24} + return file_environment_proto_rawDescGZIP(), []int{23} } func (x *Image) GetRepository() string { @@ -1679,7 +1630,7 @@ type Ingress struct { func (x *Ingress) Reset() { *x = Ingress{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[25] + mi := &file_environment_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1692,7 +1643,7 @@ func (x *Ingress) String() string { func (*Ingress) ProtoMessage() {} func (x *Ingress) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[25] + mi := &file_environment_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1705,7 +1656,7 @@ func (x *Ingress) ProtoReflect() protoreflect.Message { // Deprecated: Use Ingress.ProtoReflect.Descriptor instead. func (*Ingress) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{25} + return file_environment_proto_rawDescGZIP(), []int{24} } func (x *Ingress) GetDomain() string { @@ -1800,7 +1751,7 @@ type MySQL struct { func (x *MySQL) Reset() { *x = MySQL{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[26] + mi := &file_environment_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1813,7 +1764,7 @@ func (x *MySQL) String() string { func (*MySQL) ProtoMessage() {} func (x *MySQL) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[26] + mi := &file_environment_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1826,7 +1777,7 @@ func (x *MySQL) ProtoReflect() protoreflect.Message { // Deprecated: Use MySQL.ProtoReflect.Descriptor instead. func (*MySQL) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{26} + return file_environment_proto_rawDescGZIP(), []int{25} } func (x *MySQL) GetName() string { @@ -1865,7 +1816,7 @@ type MySQLImage struct { func (x *MySQLImage) Reset() { *x = MySQLImage{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[27] + mi := &file_environment_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1878,7 +1829,7 @@ func (x *MySQLImage) String() string { func (*MySQLImage) ProtoMessage() {} func (x *MySQLImage) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[27] + mi := &file_environment_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1891,7 +1842,7 @@ func (x *MySQLImage) ProtoReflect() protoreflect.Message { // Deprecated: Use MySQLImage.ProtoReflect.Descriptor instead. func (*MySQLImage) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{27} + return file_environment_proto_rawDescGZIP(), []int{26} } func (x *MySQLImage) GetSchedule() string { @@ -1931,7 +1882,7 @@ type MySQLSanitize struct { func (x *MySQLSanitize) Reset() { *x = MySQLSanitize{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[28] + mi := &file_environment_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1944,7 +1895,7 @@ func (x *MySQLSanitize) String() string { func (*MySQLSanitize) ProtoMessage() {} func (x *MySQLSanitize) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[28] + mi := &file_environment_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1957,7 +1908,7 @@ func (x *MySQLSanitize) ProtoReflect() protoreflect.Message { // Deprecated: Use MySQLSanitize.ProtoReflect.Descriptor instead. func (*MySQLSanitize) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{28} + return file_environment_proto_rawDescGZIP(), []int{27} } func (x *MySQLSanitize) GetRewrite() []*MySQLSanitizeRewrite { @@ -2002,7 +1953,7 @@ type MySQLImageSanitize struct { func (x *MySQLImageSanitize) Reset() { *x = MySQLImageSanitize{} if protoimpl.UnsafeEnabled { - mi := &file_environment_proto_msgTypes[29] + mi := &file_environment_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2015,7 +1966,7 @@ func (x *MySQLImageSanitize) String() string { func (*MySQLImageSanitize) ProtoMessage() {} func (x *MySQLImageSanitize) ProtoReflect() protoreflect.Message { - mi := &file_environment_proto_msgTypes[29] + mi := &file_environment_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2028,7 +1979,7 @@ func (x *MySQLImageSanitize) ProtoReflect() protoreflect.Message { // Deprecated: Use MySQLImageSanitize.ProtoReflect.Descriptor instead. func (*MySQLImageSanitize) Descriptor() ([]byte, []int) { - return file_environment_proto_rawDescGZIP(), []int{29} + return file_environment_proto_rawDescGZIP(), []int{28} } func (x *MySQLImageSanitize) GetBackup() *SanitizationPolicy { @@ -2045,6 +1996,55 @@ func (x *MySQLImageSanitize) GetImage() *SanitizationPolicy { return nil } +// * +// Environment origin configuration +type Origin struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Policy string `protobuf:"bytes,1,opt,name=Policy,proto3" json:"Policy,omitempty"` // Origin policy assigned to an environment +} + +func (x *Origin) Reset() { + *x = Origin{} + if protoimpl.UnsafeEnabled { + mi := &file_environment_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Origin) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Origin) ProtoMessage() {} + +func (x *Origin) ProtoReflect() protoreflect.Message { + mi := &file_environment_proto_msgTypes[29] + 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 Origin.ProtoReflect.Descriptor instead. +func (*Origin) Descriptor() ([]byte, []int) { + return file_environment_proto_rawDescGZIP(), []int{29} +} + +func (x *Origin) GetPolicy() string { + if x != nil { + return x.Policy + } + return "" +} + // * // Sanitization policy configuration type SanitizationPolicy struct { @@ -3525,238 +3525,238 @@ var file_environment_proto_rawDesc = []byte{ 0x0a, 0x11, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x1f, 0x0a, 0x05, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x20, - 0x0a, 0x06, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x22, 0x50, 0x0a, 0x04, 0x43, 0x72, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x22, 0x36, 0x0a, 0x06, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0xcb, 0x06, 0x0a, 0x0b, 0x45, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x49, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x49, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x49, 0x6e, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x49, 0x6e, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x25, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x04, - 0x43, 0x72, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x52, 0x04, 0x43, 0x72, 0x6f, 0x6e, - 0x12, 0x25, 0x0a, 0x05, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4d, 0x79, 0x53, 0x51, 0x4c, - 0x52, 0x05, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x12, 0x22, 0x0a, 0x04, 0x53, 0x4d, 0x54, 0x50, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x2e, 0x53, 0x4d, 0x54, 0x50, 0x52, 0x04, 0x53, 0x4d, 0x54, 0x50, 0x12, 0x31, 0x0a, 0x06, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x22, - 0x0a, 0x04, 0x53, 0x6f, 0x6c, 0x72, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x6f, 0x6c, 0x72, 0x52, 0x04, 0x53, 0x6f, - 0x6c, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, - 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x22, - 0x0a, 0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x04, 0x4c, 0x69, - 0x6e, 0x6b, 0x12, 0x28, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x09, - 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, - 0x09, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x44, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x52, 0x06, 0x44, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x52, 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x1c, 0x0a, 0x04, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x44, 0x72, 0x75, 0x70, 0x61, 0x6c, 0x10, 0x01, 0x22, 0xcd, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x12, 0x42, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x08, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x33, 0x0a, 0x03, 0x43, 0x50, 0x55, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x43, 0x50, 0x55, 0x52, 0x03, 0x43, 0x50, 0x55, 0x12, 0x3c, 0x0a, 0x06, 0x4d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x77, 0x6f, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x50, + 0x0a, 0x04, 0x43, 0x72, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x22, 0x36, 0x0a, 0x06, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0xcb, 0x06, 0x0a, 0x0b, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, - 0x52, 0x06, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x5c, 0x0a, 0x1c, 0x45, 0x6e, 0x76, 0x69, + 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x49, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x49, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x49, 0x6e, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x25, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x52, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x43, 0x72, + 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x52, 0x04, 0x43, 0x72, 0x6f, 0x6e, 0x12, 0x25, + 0x0a, 0x05, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x52, 0x05, + 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x12, 0x22, 0x0a, 0x04, 0x53, 0x4d, 0x54, 0x50, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, + 0x4d, 0x54, 0x50, 0x52, 0x04, 0x53, 0x4d, 0x54, 0x50, 0x12, 0x31, 0x0a, 0x06, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x52, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x22, 0x0a, 0x04, + 0x53, 0x6f, 0x6c, 0x72, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x6f, 0x6c, 0x72, 0x52, 0x04, 0x53, 0x6f, 0x6c, 0x72, + 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, + 0x4c, 0x69, 0x6e, 0x6b, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x04, 0x4c, 0x69, 0x6e, 0x6b, + 0x12, 0x28, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x52, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x09, 0x44, 0x61, + 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x09, 0x44, + 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x44, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x2e, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x52, 0x06, 0x44, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x12, 0x36, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, + 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x1c, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x72, + 0x75, 0x70, 0x61, 0x6c, 0x10, 0x01, 0x22, 0xcd, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, + 0x42, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x08, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x73, 0x12, 0x33, 0x0a, 0x03, 0x43, 0x50, 0x55, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x4d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x03, 0x4d, 0x61, 0x78, 0x22, 0x49, 0x0a, 0x17, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x43, 0x50, - 0x55, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x22, 0x4c, 0x0a, 0x1a, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, + 0x43, 0x50, 0x55, 0x52, 0x03, 0x43, 0x50, 0x55, 0x12, 0x3c, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x06, + 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x22, 0x5c, 0x0a, 0x1c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4d, + 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x4d, 0x61, 0x78, 0x22, 0x49, 0x0a, 0x17, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x43, 0x50, 0x55, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, - 0x67, 0x0a, 0x18, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x45, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x04, 0x57, 0x61, 0x69, 0x74, 0x22, 0x35, 0x0a, 0x19, 0x45, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x2e, 0x0a, 0x18, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, + 0x4c, 0x0a, 0x1a, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, + 0x07, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x67, 0x0a, + 0x18, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x04, 0x57, 0x61, 0x69, 0x74, 0x22, 0x35, 0x0a, 0x19, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2e, 0x0a, + 0x18, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x33, 0x0a, + 0x19, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x2b, 0x0a, 0x15, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x33, 0x0a, 0x19, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x2b, 0x0a, 0x15, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x51, 0x0a, 0x16, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x45, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x18, 0x0a, 0x16, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x54, - 0x0a, 0x17, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0c, 0x45, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x67, 0x0a, 0x18, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x51, 0x0a, 0x16, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x22, 0x18, 0x0a, 0x16, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x54, 0x0a, 0x17, + 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0c, 0x45, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0x67, 0x0a, 0x18, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, + 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x45, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x57, 0x61, 0x69, 0x74, 0x22, 0x35, 0x0a, 0x19, 0x45, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x55, 0x0a, 0x1a, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x45, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x61, 0x69, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x57, 0x61, 0x69, 0x74, 0x22, 0x35, 0x0a, - 0x19, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x55, 0x0a, 0x1a, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, - 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x5f, 0x0a, 0x1b, 0x45, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x5f, 0x0a, 0x1b, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x46, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x08, 0x46, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xaf, 0x01, 0x0a, 0x1a, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x46, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x08, 0x46, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xaf, 0x01, 0x0a, - 0x1a, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x3d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x29, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x22, 0x0a, 0x04, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, - 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x22, 0x35, - 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, - 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, - 0x14, 0x0a, 0x05, 0x43, 0x61, 0x63, 0x68, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x22, 0x66, 0x0a, 0x0a, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x61, - 0x67, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x06, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x50, 0x61, 0x67, 0x65, 0x52, 0x06, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x12, 0x2b, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x50, 0x61, 0x67, 0x65, 0x52, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x27, 0x0a, - 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0xb0, 0x03, 0x0a, 0x07, 0x49, 0x6e, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, - 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x43, - 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x50, 0x61, 0x67, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x61, 0x67, - 0x65, 0x73, 0x52, 0x0a, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x61, 0x67, 0x65, 0x73, 0x12, 0x25, - 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x05, - 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x2a, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x49, - 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x05, 0x43, 0x61, 0x63, 0x68, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x05, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x28, 0x0a, 0x06, - 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x06, - 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x22, 0x21, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, - 0x0a, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x45, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x10, 0x01, 0x22, 0x81, 0x01, 0x0a, 0x05, 0x4d, 0x79, - 0x53, 0x51, 0x4c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x53, 0x61, 0x6e, 0x69, 0x74, - 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, - 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x52, 0x08, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, - 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4d, 0x79, 0x53, 0x51, - 0x4c, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x77, 0x0a, - 0x0a, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x53, 0x61, 0x6e, 0x69, 0x74, - 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, - 0x7a, 0x65, 0x52, 0x08, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x53, - 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x22, 0xad, 0x01, 0x0a, 0x0d, 0x4d, 0x79, 0x53, 0x51, 0x4c, - 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x52, 0x65, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, - 0x7a, 0x65, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x07, 0x52, 0x65, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x06, 0x4e, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x67, - 0x6e, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x49, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4d, 0x79, 0x53, - 0x51, 0x4c, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x52, - 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x22, 0x7e, 0x0a, 0x12, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x12, 0x34, 0x0a, 0x06, - 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x42, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x12, 0x32, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x6e, - 0x69, 0x74, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, - 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, + 0x74, 0x65, 0x46, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x3d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x22, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0d, 0x0a, 0x09, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x22, 0x35, 0x0a, 0x09, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, + 0x05, 0x43, 0x61, 0x63, 0x68, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x22, 0x66, 0x0a, 0x0a, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x61, 0x67, 0x65, + 0x73, 0x12, 0x2b, 0x0a, 0x06, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x50, 0x61, 0x67, 0x65, 0x52, 0x06, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x2b, + 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x50, + 0x61, 0x67, 0x65, 0x52, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x27, 0x0a, 0x05, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x79, 0x22, 0xb0, 0x03, 0x0a, 0x07, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, + 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, + 0x6f, 0x6b, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6f, + 0x6b, 0x69, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x50, + 0x61, 0x67, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x61, 0x67, 0x65, 0x73, + 0x52, 0x0a, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x61, 0x67, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x05, + 0x50, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x05, 0x50, 0x72, + 0x6f, 0x78, 0x79, 0x12, 0x2a, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x16, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x49, 0x6e, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, + 0x22, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x05, 0x43, 0x61, 0x63, 0x68, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x52, 0x05, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x4f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x06, 0x4f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x22, 0x21, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x10, 0x01, 0x22, 0x81, 0x01, 0x0a, 0x05, 0x4d, 0x79, 0x53, 0x51, + 0x4c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x61, 0x6e, + 0x69, 0x74, 0x69, 0x7a, 0x65, 0x52, 0x08, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x12, + 0x2a, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x77, 0x0a, 0x0a, 0x4d, + 0x79, 0x53, 0x51, 0x4c, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, + 0x52, 0x08, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, + 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x53, 0x75, 0x73, + 0x70, 0x65, 0x6e, 0x64, 0x22, 0xad, 0x01, 0x0a, 0x0d, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x61, + 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, + 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x07, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x06, 0x4e, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x67, 0x6e, 0x6f, + 0x72, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, + 0x12, 0x32, 0x0a, 0x05, 0x57, 0x68, 0x65, 0x72, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4d, 0x79, 0x53, 0x51, 0x4c, + 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x52, 0x05, 0x57, + 0x68, 0x65, 0x72, 0x65, 0x22, 0x7e, 0x0a, 0x12, 0x4d, 0x79, 0x53, 0x51, 0x4c, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x12, 0x32, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x6e, 0x69, 0x74, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x05, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x22, 0x20, 0x0a, 0x06, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x61, 0x6e, 0x69, 0x74, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, @@ -3954,35 +3954,35 @@ var file_environment_proto_goTypes = []interface{}{ (EnvironmentValidateFinding_Type)(0), // 1: workflow.EnvironmentValidateFinding.Type (Ingress_Mode)(0), // 2: workflow.Ingress.Mode (*Cache)(nil), // 3: workflow.Cache - (*Origin)(nil), // 4: workflow.Origin - (*Cron)(nil), // 5: workflow.Cron - (*Daemon)(nil), // 6: workflow.Daemon - (*Environment)(nil), // 7: workflow.Environment - (*EnvironmentResources)(nil), // 8: workflow.EnvironmentResources - (*EnvironmentResourcesReplicas)(nil), // 9: workflow.EnvironmentResourcesReplicas - (*EnvironmentResourcesCPU)(nil), // 10: workflow.EnvironmentResourcesCPU - (*EnvironmentResourcesMemory)(nil), // 11: workflow.EnvironmentResourcesMemory - (*EnvironmentCreateRequest)(nil), // 12: workflow.EnvironmentCreateRequest - (*EnvironmentCreateResponse)(nil), // 13: workflow.EnvironmentCreateResponse - (*EnvironmentDeleteRequest)(nil), // 14: workflow.EnvironmentDeleteRequest - (*EnvironmentDeleteResponse)(nil), // 15: workflow.EnvironmentDeleteResponse - (*EnvironmentGetRequest)(nil), // 16: workflow.EnvironmentGetRequest - (*EnvironmentGetResponse)(nil), // 17: workflow.EnvironmentGetResponse - (*EnvironmentListRequest)(nil), // 18: workflow.EnvironmentListRequest - (*EnvironmentListResponse)(nil), // 19: workflow.EnvironmentListResponse - (*EnvironmentUpdateRequest)(nil), // 20: workflow.EnvironmentUpdateRequest - (*EnvironmentUpdateResponse)(nil), // 21: workflow.EnvironmentUpdateResponse - (*EnvironmentValidateRequest)(nil), // 22: workflow.EnvironmentValidateRequest - (*EnvironmentValidateResponse)(nil), // 23: workflow.EnvironmentValidateResponse - (*EnvironmentValidateFinding)(nil), // 24: workflow.EnvironmentValidateFinding - (*ErrorPage)(nil), // 25: workflow.ErrorPage - (*ErrorPages)(nil), // 26: workflow.ErrorPages - (*Image)(nil), // 27: workflow.Image - (*Ingress)(nil), // 28: workflow.Ingress - (*MySQL)(nil), // 29: workflow.MySQL - (*MySQLImage)(nil), // 30: workflow.MySQLImage - (*MySQLSanitize)(nil), // 31: workflow.MySQLSanitize - (*MySQLImageSanitize)(nil), // 32: workflow.MySQLImageSanitize + (*Cron)(nil), // 4: workflow.Cron + (*Daemon)(nil), // 5: workflow.Daemon + (*Environment)(nil), // 6: workflow.Environment + (*EnvironmentResources)(nil), // 7: workflow.EnvironmentResources + (*EnvironmentResourcesReplicas)(nil), // 8: workflow.EnvironmentResourcesReplicas + (*EnvironmentResourcesCPU)(nil), // 9: workflow.EnvironmentResourcesCPU + (*EnvironmentResourcesMemory)(nil), // 10: workflow.EnvironmentResourcesMemory + (*EnvironmentCreateRequest)(nil), // 11: workflow.EnvironmentCreateRequest + (*EnvironmentCreateResponse)(nil), // 12: workflow.EnvironmentCreateResponse + (*EnvironmentDeleteRequest)(nil), // 13: workflow.EnvironmentDeleteRequest + (*EnvironmentDeleteResponse)(nil), // 14: workflow.EnvironmentDeleteResponse + (*EnvironmentGetRequest)(nil), // 15: workflow.EnvironmentGetRequest + (*EnvironmentGetResponse)(nil), // 16: workflow.EnvironmentGetResponse + (*EnvironmentListRequest)(nil), // 17: workflow.EnvironmentListRequest + (*EnvironmentListResponse)(nil), // 18: workflow.EnvironmentListResponse + (*EnvironmentUpdateRequest)(nil), // 19: workflow.EnvironmentUpdateRequest + (*EnvironmentUpdateResponse)(nil), // 20: workflow.EnvironmentUpdateResponse + (*EnvironmentValidateRequest)(nil), // 21: workflow.EnvironmentValidateRequest + (*EnvironmentValidateResponse)(nil), // 22: workflow.EnvironmentValidateResponse + (*EnvironmentValidateFinding)(nil), // 23: workflow.EnvironmentValidateFinding + (*ErrorPage)(nil), // 24: workflow.ErrorPage + (*ErrorPages)(nil), // 25: workflow.ErrorPages + (*Image)(nil), // 26: workflow.Image + (*Ingress)(nil), // 27: workflow.Ingress + (*MySQL)(nil), // 28: workflow.MySQL + (*MySQLImage)(nil), // 29: workflow.MySQLImage + (*MySQLSanitize)(nil), // 30: workflow.MySQLSanitize + (*MySQLImageSanitize)(nil), // 31: workflow.MySQLImageSanitize + (*Origin)(nil), // 32: workflow.Origin (*SanitizationPolicy)(nil), // 33: workflow.SanitizationPolicy (*SanitizationRules)(nil), // 34: workflow.SanitizationRules (*SanitizationRewrite)(nil), // 35: workflow.SanitizationRewrite @@ -4011,39 +4011,39 @@ var file_environment_proto_goTypes = []interface{}{ } var file_environment_proto_depIdxs = []int32{ 0, // 0: workflow.Environment.type:type_name -> workflow.Environment.Type - 28, // 1: workflow.Environment.Ingress:type_name -> workflow.Ingress - 27, // 2: workflow.Environment.Image:type_name -> workflow.Image - 5, // 3: workflow.Environment.Cron:type_name -> workflow.Cron - 29, // 4: workflow.Environment.MySQL:type_name -> workflow.MySQL + 27, // 1: workflow.Environment.Ingress:type_name -> workflow.Ingress + 26, // 2: workflow.Environment.Image:type_name -> workflow.Image + 4, // 3: workflow.Environment.Cron:type_name -> workflow.Cron + 28, // 4: workflow.Environment.MySQL:type_name -> workflow.MySQL 49, // 5: workflow.Environment.SMTP:type_name -> workflow.SMTP 46, // 6: workflow.Environment.Backup:type_name -> workflow.ScheduledBackup 50, // 7: workflow.Environment.Solr:type_name -> workflow.Solr 51, // 8: workflow.Environment.Link:type_name -> workflow.Link 52, // 9: workflow.Environment.Volume:type_name -> workflow.Volume 56, // 10: workflow.Environment.Dashboard:type_name -> workflow.EnvironmentDashboard - 6, // 11: workflow.Environment.Daemon:type_name -> workflow.Daemon - 8, // 12: workflow.Environment.Resources:type_name -> workflow.EnvironmentResources + 5, // 11: workflow.Environment.Daemon:type_name -> workflow.Daemon + 7, // 12: workflow.Environment.Resources:type_name -> workflow.EnvironmentResources 57, // 13: workflow.Environment.Metrics:type_name -> workflow.EnvironmentMetrics - 9, // 14: workflow.EnvironmentResources.Replicas:type_name -> workflow.EnvironmentResourcesReplicas - 10, // 15: workflow.EnvironmentResources.CPU:type_name -> workflow.EnvironmentResourcesCPU - 11, // 16: workflow.EnvironmentResources.Memory:type_name -> workflow.EnvironmentResourcesMemory - 7, // 17: workflow.EnvironmentCreateRequest.Environment:type_name -> workflow.Environment - 7, // 18: workflow.EnvironmentGetResponse.Environment:type_name -> workflow.Environment - 7, // 19: workflow.EnvironmentListResponse.Environments:type_name -> workflow.Environment - 7, // 20: workflow.EnvironmentUpdateRequest.Environment:type_name -> workflow.Environment - 7, // 21: workflow.EnvironmentValidateRequest.Environment:type_name -> workflow.Environment - 24, // 22: workflow.EnvironmentValidateResponse.Findings:type_name -> workflow.EnvironmentValidateFinding + 8, // 14: workflow.EnvironmentResources.Replicas:type_name -> workflow.EnvironmentResourcesReplicas + 9, // 15: workflow.EnvironmentResources.CPU:type_name -> workflow.EnvironmentResourcesCPU + 10, // 16: workflow.EnvironmentResources.Memory:type_name -> workflow.EnvironmentResourcesMemory + 6, // 17: workflow.EnvironmentCreateRequest.Environment:type_name -> workflow.Environment + 6, // 18: workflow.EnvironmentGetResponse.Environment:type_name -> workflow.Environment + 6, // 19: workflow.EnvironmentListResponse.Environments:type_name -> workflow.Environment + 6, // 20: workflow.EnvironmentUpdateRequest.Environment:type_name -> workflow.Environment + 6, // 21: workflow.EnvironmentValidateRequest.Environment:type_name -> workflow.Environment + 23, // 22: workflow.EnvironmentValidateResponse.Findings:type_name -> workflow.EnvironmentValidateFinding 1, // 23: workflow.EnvironmentValidateFinding.type:type_name -> workflow.EnvironmentValidateFinding.Type - 25, // 24: workflow.ErrorPages.Client:type_name -> workflow.ErrorPage - 25, // 25: workflow.ErrorPages.Server:type_name -> workflow.ErrorPage - 26, // 26: workflow.Ingress.ErrorPages:type_name -> workflow.ErrorPages + 24, // 24: workflow.ErrorPages.Client:type_name -> workflow.ErrorPage + 24, // 25: workflow.ErrorPages.Server:type_name -> workflow.ErrorPage + 25, // 26: workflow.Ingress.ErrorPages:type_name -> workflow.ErrorPages 42, // 27: workflow.Ingress.Proxy:type_name -> workflow.Proxy 2, // 28: workflow.Ingress.mode:type_name -> workflow.Ingress.Mode 3, // 29: workflow.Ingress.Cache:type_name -> workflow.Cache - 4, // 30: workflow.Ingress.Origin:type_name -> workflow.Origin - 32, // 31: workflow.MySQL.Sanitize:type_name -> workflow.MySQLImageSanitize - 30, // 32: workflow.MySQL.Image:type_name -> workflow.MySQLImage - 31, // 33: workflow.MySQLImage.Sanitize:type_name -> workflow.MySQLSanitize + 32, // 30: workflow.Ingress.Origin:type_name -> workflow.Origin + 31, // 31: workflow.MySQL.Sanitize:type_name -> workflow.MySQLImageSanitize + 29, // 32: workflow.MySQL.Image:type_name -> workflow.MySQLImage + 30, // 33: workflow.MySQLImage.Sanitize:type_name -> workflow.MySQLSanitize 36, // 34: workflow.MySQLSanitize.Rewrite:type_name -> workflow.MySQLSanitizeRewrite 40, // 35: workflow.MySQLSanitize.Where:type_name -> workflow.MySQLSanitizeWhere 33, // 36: workflow.MySQLImageSanitize.Backup:type_name -> workflow.SanitizationPolicy @@ -4062,18 +4062,18 @@ var file_environment_proto_depIdxs = []int32{ 53, // 49: workflow.Volume.Backup:type_name -> workflow.VolumeBackup 54, // 50: workflow.VolumeBackup.Sanitize:type_name -> workflow.VolumeBackupSanitize 55, // 51: workflow.VolumeBackupSanitize.Rules:type_name -> workflow.VolumeBackupSanitizeRules - 14, // 52: workflow.environment.Delete:input_type -> workflow.EnvironmentDeleteRequest - 16, // 53: workflow.environment.Get:input_type -> workflow.EnvironmentGetRequest - 18, // 54: workflow.environment.List:input_type -> workflow.EnvironmentListRequest - 12, // 55: workflow.environment.Create:input_type -> workflow.EnvironmentCreateRequest - 20, // 56: workflow.environment.Update:input_type -> workflow.EnvironmentUpdateRequest - 22, // 57: workflow.environment.Validate:input_type -> workflow.EnvironmentValidateRequest - 15, // 58: workflow.environment.Delete:output_type -> workflow.EnvironmentDeleteResponse - 17, // 59: workflow.environment.Get:output_type -> workflow.EnvironmentGetResponse - 19, // 60: workflow.environment.List:output_type -> workflow.EnvironmentListResponse - 13, // 61: workflow.environment.Create:output_type -> workflow.EnvironmentCreateResponse - 21, // 62: workflow.environment.Update:output_type -> workflow.EnvironmentUpdateResponse - 23, // 63: workflow.environment.Validate:output_type -> workflow.EnvironmentValidateResponse + 13, // 52: workflow.environment.Delete:input_type -> workflow.EnvironmentDeleteRequest + 15, // 53: workflow.environment.Get:input_type -> workflow.EnvironmentGetRequest + 17, // 54: workflow.environment.List:input_type -> workflow.EnvironmentListRequest + 11, // 55: workflow.environment.Create:input_type -> workflow.EnvironmentCreateRequest + 19, // 56: workflow.environment.Update:input_type -> workflow.EnvironmentUpdateRequest + 21, // 57: workflow.environment.Validate:input_type -> workflow.EnvironmentValidateRequest + 14, // 58: workflow.environment.Delete:output_type -> workflow.EnvironmentDeleteResponse + 16, // 59: workflow.environment.Get:output_type -> workflow.EnvironmentGetResponse + 18, // 60: workflow.environment.List:output_type -> workflow.EnvironmentListResponse + 12, // 61: workflow.environment.Create:output_type -> workflow.EnvironmentCreateResponse + 20, // 62: workflow.environment.Update:output_type -> workflow.EnvironmentUpdateResponse + 22, // 63: workflow.environment.Validate:output_type -> workflow.EnvironmentValidateResponse 58, // [58:64] is the sub-list for method output_type 52, // [52:58] is the sub-list for method input_type 52, // [52:52] is the sub-list for extension type_name @@ -4100,7 +4100,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Origin); i { + switch v := v.(*Cron); i { case 0: return &v.state case 1: @@ -4112,7 +4112,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cron); i { + switch v := v.(*Daemon); i { case 0: return &v.state case 1: @@ -4124,7 +4124,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Daemon); i { + switch v := v.(*Environment); i { case 0: return &v.state case 1: @@ -4136,7 +4136,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Environment); i { + switch v := v.(*EnvironmentResources); i { case 0: return &v.state case 1: @@ -4148,7 +4148,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentResources); i { + switch v := v.(*EnvironmentResourcesReplicas); i { case 0: return &v.state case 1: @@ -4160,7 +4160,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentResourcesReplicas); i { + switch v := v.(*EnvironmentResourcesCPU); i { case 0: return &v.state case 1: @@ -4172,7 +4172,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentResourcesCPU); i { + switch v := v.(*EnvironmentResourcesMemory); i { case 0: return &v.state case 1: @@ -4184,7 +4184,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentResourcesMemory); i { + switch v := v.(*EnvironmentCreateRequest); i { case 0: return &v.state case 1: @@ -4196,7 +4196,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentCreateRequest); i { + switch v := v.(*EnvironmentCreateResponse); i { case 0: return &v.state case 1: @@ -4208,7 +4208,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentCreateResponse); i { + switch v := v.(*EnvironmentDeleteRequest); i { case 0: return &v.state case 1: @@ -4220,7 +4220,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentDeleteRequest); i { + switch v := v.(*EnvironmentDeleteResponse); i { case 0: return &v.state case 1: @@ -4232,7 +4232,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentDeleteResponse); i { + switch v := v.(*EnvironmentGetRequest); i { case 0: return &v.state case 1: @@ -4244,7 +4244,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentGetRequest); i { + switch v := v.(*EnvironmentGetResponse); i { case 0: return &v.state case 1: @@ -4256,7 +4256,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentGetResponse); i { + switch v := v.(*EnvironmentListRequest); i { case 0: return &v.state case 1: @@ -4268,7 +4268,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentListRequest); i { + switch v := v.(*EnvironmentListResponse); i { case 0: return &v.state case 1: @@ -4280,7 +4280,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentListResponse); i { + switch v := v.(*EnvironmentUpdateRequest); i { case 0: return &v.state case 1: @@ -4292,7 +4292,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentUpdateRequest); i { + switch v := v.(*EnvironmentUpdateResponse); i { case 0: return &v.state case 1: @@ -4304,7 +4304,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentUpdateResponse); i { + switch v := v.(*EnvironmentValidateRequest); i { case 0: return &v.state case 1: @@ -4316,7 +4316,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentValidateRequest); i { + switch v := v.(*EnvironmentValidateResponse); i { case 0: return &v.state case 1: @@ -4328,7 +4328,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentValidateResponse); i { + switch v := v.(*EnvironmentValidateFinding); i { case 0: return &v.state case 1: @@ -4340,7 +4340,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnvironmentValidateFinding); i { + switch v := v.(*ErrorPage); i { case 0: return &v.state case 1: @@ -4352,7 +4352,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ErrorPage); i { + switch v := v.(*ErrorPages); i { case 0: return &v.state case 1: @@ -4364,7 +4364,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ErrorPages); i { + switch v := v.(*Image); i { case 0: return &v.state case 1: @@ -4376,7 +4376,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Image); i { + switch v := v.(*Ingress); i { case 0: return &v.state case 1: @@ -4388,7 +4388,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Ingress); i { + switch v := v.(*MySQL); i { case 0: return &v.state case 1: @@ -4400,7 +4400,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MySQL); i { + switch v := v.(*MySQLImage); i { case 0: return &v.state case 1: @@ -4412,7 +4412,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MySQLImage); i { + switch v := v.(*MySQLSanitize); i { case 0: return &v.state case 1: @@ -4424,7 +4424,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MySQLSanitize); i { + switch v := v.(*MySQLImageSanitize); i { case 0: return &v.state case 1: @@ -4436,7 +4436,7 @@ func file_environment_proto_init() { } } file_environment_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MySQLImageSanitize); i { + switch v := v.(*Origin); i { case 0: return &v.state case 1: diff --git a/pb/logs.pb.go b/pb/logs.pb.go index 4e1f2af..a7c38fc 100644 --- a/pb/logs.pb.go +++ b/pb/logs.pb.go @@ -11,6 +11,8 @@ package pb import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -234,38 +236,660 @@ func (x *LogListStreamsResponse) GetDefault() string { return "" } +// * +// Shared filter block for bounded log queries and summarisation +type LogFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Environment string `protobuf:"bytes,1,opt,name=Environment,proto3" json:"Environment,omitempty"` // Name of the environment + Streams []string `protobuf:"bytes,2,rep,name=Streams,proto3" json:"Streams,omitempty"` // Stream IDs to include; empty means all + Timeframe *durationpb.Duration `protobuf:"bytes,3,opt,name=Timeframe,proto3" json:"Timeframe,omitempty"` // Window duration relative to now; mutually exclusive with TimeRange + TimeRange *LogTimeRange `protobuf:"bytes,4,opt,name=TimeRange,proto3" json:"TimeRange,omitempty"` // Custom absolute time range; used when Timeframe is unset + Contains string `protobuf:"bytes,5,opt,name=Contains,proto3" json:"Contains,omitempty"` // Substring / multi-line query text +} + +func (x *LogFilter) Reset() { + *x = LogFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_logs_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogFilter) ProtoMessage() {} + +func (x *LogFilter) ProtoReflect() protoreflect.Message { + mi := &file_logs_proto_msgTypes[4] + 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 LogFilter.ProtoReflect.Descriptor instead. +func (*LogFilter) Descriptor() ([]byte, []int) { + return file_logs_proto_rawDescGZIP(), []int{4} +} + +func (x *LogFilter) GetEnvironment() string { + if x != nil { + return x.Environment + } + return "" +} + +func (x *LogFilter) GetStreams() []string { + if x != nil { + return x.Streams + } + return nil +} + +func (x *LogFilter) GetTimeframe() *durationpb.Duration { + if x != nil { + return x.Timeframe + } + return nil +} + +func (x *LogFilter) GetTimeRange() *LogTimeRange { + if x != nil { + return x.TimeRange + } + return nil +} + +func (x *LogFilter) GetContains() string { + if x != nil { + return x.Contains + } + return "" +} + +// * +// Custom time range for a log query +type LogTimeRange struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + From *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=From,proto3" json:"From,omitempty"` // Start of range + To *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=To,proto3" json:"To,omitempty"` // End of range +} + +func (x *LogTimeRange) Reset() { + *x = LogTimeRange{} + if protoimpl.UnsafeEnabled { + mi := &file_logs_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogTimeRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogTimeRange) ProtoMessage() {} + +func (x *LogTimeRange) ProtoReflect() protoreflect.Message { + mi := &file_logs_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LogTimeRange.ProtoReflect.Descriptor instead. +func (*LogTimeRange) Descriptor() ([]byte, []int) { + return file_logs_proto_rawDescGZIP(), []int{5} +} + +func (x *LogTimeRange) GetFrom() *timestamppb.Timestamp { + if x != nil { + return x.From + } + return nil +} + +func (x *LogTimeRange) GetTo() *timestamppb.Timestamp { + if x != nil { + return x.To + } + return nil +} + +// * +// Run a bounded log query +type LogQueryRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Filter *LogFilter `protobuf:"bytes,1,opt,name=Filter,proto3" json:"Filter,omitempty"` // Filter block + Limit int32 `protobuf:"varint,2,opt,name=Limit,proto3" json:"Limit,omitempty"` // Cap on returned events; 0 for server default +} + +func (x *LogQueryRequest) Reset() { + *x = LogQueryRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_logs_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogQueryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogQueryRequest) ProtoMessage() {} + +func (x *LogQueryRequest) ProtoReflect() protoreflect.Message { + mi := &file_logs_proto_msgTypes[6] + 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 LogQueryRequest.ProtoReflect.Descriptor instead. +func (*LogQueryRequest) Descriptor() ([]byte, []int) { + return file_logs_proto_rawDescGZIP(), []int{6} +} + +func (x *LogQueryRequest) GetFilter() *LogFilter { + if x != nil { + return x.Filter + } + return nil +} + +func (x *LogQueryRequest) GetLimit() int32 { + if x != nil { + return x.Limit + } + return 0 +} + +// * +// Streamed query response: events followed by a final Meta message +type LogQueryResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Body: + // + // *LogQueryResponse_Event + // *LogQueryResponse_Meta + Body isLogQueryResponse_Body `protobuf_oneof:"Body"` +} + +func (x *LogQueryResponse) Reset() { + *x = LogQueryResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_logs_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogQueryResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogQueryResponse) ProtoMessage() {} + +func (x *LogQueryResponse) ProtoReflect() protoreflect.Message { + mi := &file_logs_proto_msgTypes[7] + 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 LogQueryResponse.ProtoReflect.Descriptor instead. +func (*LogQueryResponse) Descriptor() ([]byte, []int) { + return file_logs_proto_rawDescGZIP(), []int{7} +} + +func (m *LogQueryResponse) GetBody() isLogQueryResponse_Body { + if m != nil { + return m.Body + } + return nil +} + +func (x *LogQueryResponse) GetEvent() *LogEvent { + if x, ok := x.GetBody().(*LogQueryResponse_Event); ok { + return x.Event + } + return nil +} + +func (x *LogQueryResponse) GetMeta() *LogQueryMeta { + if x, ok := x.GetBody().(*LogQueryResponse_Meta); ok { + return x.Meta + } + return nil +} + +type isLogQueryResponse_Body interface { + isLogQueryResponse_Body() +} + +type LogQueryResponse_Event struct { + Event *LogEvent `protobuf:"bytes,1,opt,name=Event,proto3,oneof"` // A single matched log event +} + +type LogQueryResponse_Meta struct { + Meta *LogQueryMeta `protobuf:"bytes,2,opt,name=Meta,proto3,oneof"` // Final message summarising the run +} + +func (*LogQueryResponse_Event) isLogQueryResponse_Body() {} + +func (*LogQueryResponse_Meta) isLogQueryResponse_Body() {} + +// * +// A single log event returned by a query +type LogEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=Timestamp,proto3" json:"Timestamp,omitempty"` // Event timestamp + Stream string `protobuf:"bytes,2,opt,name=Stream,proto3" json:"Stream,omitempty"` // Stream ID e.g. "nginx","fpm","cli","cloudfront","invalidations","waf" + Message string `protobuf:"bytes,3,opt,name=Message,proto3" json:"Message,omitempty"` // Human-readable message line + Level string `protobuf:"bytes,4,opt,name=Level,proto3" json:"Level,omitempty"` // Level e.g. "info","warning","error" (optional) + Status int32 `protobuf:"varint,5,opt,name=Status,proto3" json:"Status,omitempty"` // HTTP status code if applicable; 0 when not applicable + Raw string `protobuf:"bytes,6,opt,name=Raw,proto3" json:"Raw,omitempty"` // Original JSON payload, serialised as a string +} + +func (x *LogEvent) Reset() { + *x = LogEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_logs_proto_msgTypes[8] + 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_logs_proto_msgTypes[8] + 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_logs_proto_rawDescGZIP(), []int{8} +} + +func (x *LogEvent) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +func (x *LogEvent) GetStream() string { + if x != nil { + return x.Stream + } + return "" +} + +func (x *LogEvent) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *LogEvent) GetLevel() string { + if x != nil { + return x.Level + } + return "" +} + +func (x *LogEvent) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *LogEvent) GetRaw() string { + if x != nil { + return x.Raw + } + return "" +} + +// * +// Metadata for a completed query run, emitted as the final stream message +type LogQueryMeta struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Scanned int64 `protobuf:"varint,1,opt,name=Scanned,proto3" json:"Scanned,omitempty"` // Total events scanned across selected streams + RanAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=RanAt,proto3" json:"RanAt,omitempty"` // Timestamp of when the query ran +} + +func (x *LogQueryMeta) Reset() { + *x = LogQueryMeta{} + if protoimpl.UnsafeEnabled { + mi := &file_logs_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogQueryMeta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogQueryMeta) ProtoMessage() {} + +func (x *LogQueryMeta) ProtoReflect() protoreflect.Message { + mi := &file_logs_proto_msgTypes[9] + 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 LogQueryMeta.ProtoReflect.Descriptor instead. +func (*LogQueryMeta) Descriptor() ([]byte, []int) { + return file_logs_proto_rawDescGZIP(), []int{9} +} + +func (x *LogQueryMeta) GetScanned() int64 { + if x != nil { + return x.Scanned + } + return 0 +} + +func (x *LogQueryMeta) GetRanAt() *timestamppb.Timestamp { + if x != nil { + return x.RanAt + } + return nil +} + +// * +// Summarise a log window using a natural-language prompt +type LogSummariseRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Filter *LogFilter `protobuf:"bytes,1,opt,name=Filter,proto3" json:"Filter,omitempty"` // Filter block describing the window to summarise + Prompt string `protobuf:"bytes,2,opt,name=Prompt,proto3" json:"Prompt,omitempty"` // Natural-language question for the summariser +} + +func (x *LogSummariseRequest) Reset() { + *x = LogSummariseRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_logs_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogSummariseRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogSummariseRequest) ProtoMessage() {} + +func (x *LogSummariseRequest) ProtoReflect() protoreflect.Message { + mi := &file_logs_proto_msgTypes[10] + 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 LogSummariseRequest.ProtoReflect.Descriptor instead. +func (*LogSummariseRequest) Descriptor() ([]byte, []int) { + return file_logs_proto_rawDescGZIP(), []int{10} +} + +func (x *LogSummariseRequest) GetFilter() *LogFilter { + if x != nil { + return x.Filter + } + return nil +} + +func (x *LogSummariseRequest) GetPrompt() string { + if x != nil { + return x.Prompt + } + return "" +} + +// * +// AI-generated summary of a log window +type LogSummariseResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Tldr string `protobuf:"bytes,1,opt,name=Tldr,proto3" json:"Tldr,omitempty"` // One-paragraph summary + Bullets []string `protobuf:"bytes,2,rep,name=Bullets,proto3" json:"Bullets,omitempty"` // Notable events / observations + SuggestedActions []string `protobuf:"bytes,3,rep,name=SuggestedActions,proto3" json:"SuggestedActions,omitempty"` // Suggested follow-up actions +} + +func (x *LogSummariseResponse) Reset() { + *x = LogSummariseResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_logs_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogSummariseResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogSummariseResponse) ProtoMessage() {} + +func (x *LogSummariseResponse) ProtoReflect() protoreflect.Message { + mi := &file_logs_proto_msgTypes[11] + 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 LogSummariseResponse.ProtoReflect.Descriptor instead. +func (*LogSummariseResponse) Descriptor() ([]byte, []int) { + return file_logs_proto_rawDescGZIP(), []int{11} +} + +func (x *LogSummariseResponse) GetTldr() string { + if x != nil { + return x.Tldr + } + return "" +} + +func (x *LogSummariseResponse) GetBullets() []string { + if x != nil { + return x.Bullets + } + return nil +} + +func (x *LogSummariseResponse) GetSuggestedActions() []string { + if x != nil { + return x.SuggestedActions + } + return nil +} + var File_logs_proto protoreflect.FileDescriptor var file_logs_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x4a, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x45, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x22, 0x2b, 0x0a, 0x0f, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x39, 0x0a, 0x15, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x45, - 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x4c, 0x0a, 0x16, 0x4c, 0x6f, - 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x32, 0x9b, 0x01, 0x0a, 0x04, 0x6c, 0x6f, 0x67, - 0x73, 0x12, 0x3f, 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x2e, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, - 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x73, 0x12, 0x1f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, - 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4a, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x54, 0x61, + 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x22, 0x2b, 0x0a, 0x0f, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x39, 0x0a, 0x15, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x4c, 0x0a, 0x16, 0x4c, + 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0xd2, 0x01, 0x0a, 0x09, 0x4c, 0x6f, + 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, + 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x45, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x66, 0x72, 0x61, 0x6d, 0x65, + 0x18, 0x03, 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, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x09, + 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x69, + 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, + 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x22, 0x6a, + 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2e, + 0x0a, 0x04, 0x46, 0x72, 0x6f, 0x6d, 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, 0x04, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x2a, + 0x0a, 0x02, 0x54, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x02, 0x54, 0x6f, 0x22, 0x54, 0x0a, 0x0f, 0x4c, 0x6f, + 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, + 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x22, 0x74, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, + 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x2c, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x42, 0x06, + 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x22, 0xb6, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, + 0x03, 0x52, 0x61, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x52, 0x61, 0x77, 0x22, + 0x5a, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x12, + 0x18, 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x52, 0x61, 0x6e, + 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x52, 0x61, 0x6e, 0x41, 0x74, 0x22, 0x5a, 0x0a, 0x13, 0x4c, + 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, + 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, + 0x16, 0x0a, 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x22, 0x70, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x54, 0x6c, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, + 0x6c, 0x64, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x0a, + 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xad, 0x02, 0x0a, 0x04, 0x6c, 0x6f, + 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x2e, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, + 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, + 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, + 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, + 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -280,23 +904,47 @@ func file_logs_proto_rawDescGZIP() []byte { return file_logs_proto_rawDescData } -var file_logs_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_logs_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_logs_proto_goTypes = []interface{}{ (*LogTailRequest)(nil), // 0: workflow.LogTailRequest (*LogTailResponse)(nil), // 1: workflow.LogTailResponse (*LogListStreamsRequest)(nil), // 2: workflow.LogListStreamsRequest (*LogListStreamsResponse)(nil), // 3: workflow.LogListStreamsResponse + (*LogFilter)(nil), // 4: workflow.LogFilter + (*LogTimeRange)(nil), // 5: workflow.LogTimeRange + (*LogQueryRequest)(nil), // 6: workflow.LogQueryRequest + (*LogQueryResponse)(nil), // 7: workflow.LogQueryResponse + (*LogEvent)(nil), // 8: workflow.LogEvent + (*LogQueryMeta)(nil), // 9: workflow.LogQueryMeta + (*LogSummariseRequest)(nil), // 10: workflow.LogSummariseRequest + (*LogSummariseResponse)(nil), // 11: workflow.LogSummariseResponse + (*durationpb.Duration)(nil), // 12: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 13: google.protobuf.Timestamp } var file_logs_proto_depIdxs = []int32{ - 0, // 0: workflow.logs.Tail:input_type -> workflow.LogTailRequest - 2, // 1: workflow.logs.ListStreams:input_type -> workflow.LogListStreamsRequest - 1, // 2: workflow.logs.Tail:output_type -> workflow.LogTailResponse - 3, // 3: workflow.logs.ListStreams:output_type -> workflow.LogListStreamsResponse - 2, // [2:4] is the sub-list for method output_type - 0, // [0:2] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name + 12, // 0: workflow.LogFilter.Timeframe:type_name -> google.protobuf.Duration + 5, // 1: workflow.LogFilter.TimeRange:type_name -> workflow.LogTimeRange + 13, // 2: workflow.LogTimeRange.From:type_name -> google.protobuf.Timestamp + 13, // 3: workflow.LogTimeRange.To:type_name -> google.protobuf.Timestamp + 4, // 4: workflow.LogQueryRequest.Filter:type_name -> workflow.LogFilter + 8, // 5: workflow.LogQueryResponse.Event:type_name -> workflow.LogEvent + 9, // 6: workflow.LogQueryResponse.Meta:type_name -> workflow.LogQueryMeta + 13, // 7: workflow.LogEvent.Timestamp:type_name -> google.protobuf.Timestamp + 13, // 8: workflow.LogQueryMeta.RanAt:type_name -> google.protobuf.Timestamp + 4, // 9: workflow.LogSummariseRequest.Filter:type_name -> workflow.LogFilter + 0, // 10: workflow.logs.Tail:input_type -> workflow.LogTailRequest + 2, // 11: workflow.logs.ListStreams:input_type -> workflow.LogListStreamsRequest + 6, // 12: workflow.logs.Query:input_type -> workflow.LogQueryRequest + 10, // 13: workflow.logs.Summarise:input_type -> workflow.LogSummariseRequest + 1, // 14: workflow.logs.Tail:output_type -> workflow.LogTailResponse + 3, // 15: workflow.logs.ListStreams:output_type -> workflow.LogListStreamsResponse + 7, // 16: workflow.logs.Query:output_type -> workflow.LogQueryResponse + 11, // 17: workflow.logs.Summarise:output_type -> workflow.LogSummariseResponse + 14, // [14:18] is the sub-list for method output_type + 10, // [10:14] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_logs_proto_init() } @@ -353,6 +1001,106 @@ func file_logs_proto_init() { return nil } } + file_logs_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logs_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogTimeRange); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logs_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogQueryRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logs_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogQueryResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logs_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logs_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogQueryMeta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logs_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogSummariseRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logs_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogSummariseResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_logs_proto_msgTypes[7].OneofWrappers = []interface{}{ + (*LogQueryResponse_Event)(nil), + (*LogQueryResponse_Meta)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -360,7 +1108,7 @@ func file_logs_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_logs_proto_rawDesc, NumEnums: 0, - NumMessages: 4, + NumMessages: 12, NumExtensions: 0, NumServices: 1, }, diff --git a/pb/logs_grpc.pb.go b/pb/logs_grpc.pb.go index d697e18..aeed009 100644 --- a/pb/logs_grpc.pb.go +++ b/pb/logs_grpc.pb.go @@ -24,6 +24,8 @@ const _ = grpc.SupportPackageIsVersion7 type LogsClient interface { Tail(ctx context.Context, in *LogTailRequest, opts ...grpc.CallOption) (Logs_TailClient, error) ListStreams(ctx context.Context, in *LogListStreamsRequest, opts ...grpc.CallOption) (*LogListStreamsResponse, error) + Query(ctx context.Context, in *LogQueryRequest, opts ...grpc.CallOption) (Logs_QueryClient, error) + Summarise(ctx context.Context, in *LogSummariseRequest, opts ...grpc.CallOption) (*LogSummariseResponse, error) } type logsClient struct { @@ -75,12 +77,55 @@ func (c *logsClient) ListStreams(ctx context.Context, in *LogListStreamsRequest, return out, nil } +func (c *logsClient) Query(ctx context.Context, in *LogQueryRequest, opts ...grpc.CallOption) (Logs_QueryClient, error) { + stream, err := c.cc.NewStream(ctx, &Logs_ServiceDesc.Streams[1], "/workflow.logs/Query", opts...) + if err != nil { + return nil, err + } + x := &logsQueryClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Logs_QueryClient interface { + Recv() (*LogQueryResponse, error) + grpc.ClientStream +} + +type logsQueryClient struct { + grpc.ClientStream +} + +func (x *logsQueryClient) Recv() (*LogQueryResponse, error) { + m := new(LogQueryResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *logsClient) Summarise(ctx context.Context, in *LogSummariseRequest, opts ...grpc.CallOption) (*LogSummariseResponse, error) { + out := new(LogSummariseResponse) + err := c.cc.Invoke(ctx, "/workflow.logs/Summarise", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // LogsServer is the server API for Logs service. // All implementations must embed UnimplementedLogsServer // for forward compatibility type LogsServer interface { Tail(*LogTailRequest, Logs_TailServer) error ListStreams(context.Context, *LogListStreamsRequest) (*LogListStreamsResponse, error) + Query(*LogQueryRequest, Logs_QueryServer) error + Summarise(context.Context, *LogSummariseRequest) (*LogSummariseResponse, error) mustEmbedUnimplementedLogsServer() } @@ -94,6 +139,12 @@ func (UnimplementedLogsServer) Tail(*LogTailRequest, Logs_TailServer) error { func (UnimplementedLogsServer) ListStreams(context.Context, *LogListStreamsRequest) (*LogListStreamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListStreams not implemented") } +func (UnimplementedLogsServer) Query(*LogQueryRequest, Logs_QueryServer) error { + return status.Errorf(codes.Unimplemented, "method Query not implemented") +} +func (UnimplementedLogsServer) Summarise(context.Context, *LogSummariseRequest) (*LogSummariseResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Summarise not implemented") +} func (UnimplementedLogsServer) mustEmbedUnimplementedLogsServer() {} // UnsafeLogsServer may be embedded to opt out of forward compatibility for this service. @@ -146,6 +197,45 @@ func _Logs_ListStreams_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } +func _Logs_Query_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(LogQueryRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(LogsServer).Query(m, &logsQueryServer{stream}) +} + +type Logs_QueryServer interface { + Send(*LogQueryResponse) error + grpc.ServerStream +} + +type logsQueryServer struct { + grpc.ServerStream +} + +func (x *logsQueryServer) Send(m *LogQueryResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _Logs_Summarise_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LogSummariseRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LogsServer).Summarise(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/workflow.logs/Summarise", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LogsServer).Summarise(ctx, req.(*LogSummariseRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Logs_ServiceDesc is the grpc.ServiceDesc for Logs service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -157,6 +247,10 @@ var Logs_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListStreams", Handler: _Logs_ListStreams_Handler, }, + { + MethodName: "Summarise", + Handler: _Logs_Summarise_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -164,6 +258,11 @@ var Logs_ServiceDesc = grpc.ServiceDesc{ Handler: _Logs_Tail_Handler, ServerStreams: true, }, + { + StreamName: "Query", + Handler: _Logs_Query_Handler, + ServerStreams: true, + }, }, Metadata: "logs.proto", } From e80955462d21f25373f8fe6535cd0d4eef5d480c Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 29 Apr 2026 14:00:26 +1000 Subject: [PATCH 3/7] Minor fixes --- internal/server/mock/logs/server.go | 23 ++++++++++++++++++++--- logs.proto | 10 +++++++++- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/internal/server/mock/logs/server.go b/internal/server/mock/logs/server.go index 5bc1130..8c3d144 100644 --- a/internal/server/mock/logs/server.go +++ b/internal/server/mock/logs/server.go @@ -157,11 +157,28 @@ func (s *Server) Query(req *pb.LogQueryRequest, stream pb.Logs_QueryServer) erro events = filtered } - // Filter by substring query if provided. - if req.Filter.Contains != "" { + // Filter by substring queries if provided. Each entry must be satisfied: + // include entries require the substring to be present, exclude entries + // require it to be absent. Empty Value entries are skipped. + if len(req.Filter.Contains) > 0 { filtered := events[:0:0] for _, evt := range events { - if strings.Contains(evt.Message, req.Filter.Contains) { + ok := true + for _, f := range req.Filter.Contains { + if f == nil || f.Value == "" { + continue + } + has := strings.Contains(evt.Message, f.Value) + if f.Exclude && has { + ok = false + break + } + if !f.Exclude && !has { + ok = false + break + } + } + if ok { filtered = append(filtered, evt) } } diff --git a/logs.proto b/logs.proto index e6362ad..49d4400 100644 --- a/logs.proto +++ b/logs.proto @@ -53,7 +53,15 @@ message LogFilter { repeated string Streams = 2; // Stream IDs to include; empty means all google.protobuf.Duration Timeframe = 3; // Window duration relative to now; mutually exclusive with TimeRange LogTimeRange TimeRange = 4; // Custom absolute time range; used when Timeframe is unset - string Contains = 5; // Substring / multi-line query text + repeated LogContainsFilter Contains = 5; // Substring filters; an event must satisfy every entry (include AND, exclude AND) +} + +/** + * A single substring filter applied to log event messages + */ +message LogContainsFilter { + string Value = 1; // Substring to match against the event message + bool Exclude = 2; // false = event message must contain Value; true = event message must NOT contain Value } /** From 4127494f949833bb25e7d5f2ddd0d77205bb4a13 Mon Sep 17 00:00:00 2001 From: Nick Schuch Date: Wed, 29 Apr 2026 14:11:18 +1000 Subject: [PATCH 4/7] Build it --- pb/logs.pb.go | 347 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 212 insertions(+), 135 deletions(-) diff --git a/pb/logs.pb.go b/pb/logs.pb.go index a7c38fc..3836098 100644 --- a/pb/logs.pb.go +++ b/pb/logs.pb.go @@ -247,7 +247,7 @@ type LogFilter struct { Streams []string `protobuf:"bytes,2,rep,name=Streams,proto3" json:"Streams,omitempty"` // Stream IDs to include; empty means all Timeframe *durationpb.Duration `protobuf:"bytes,3,opt,name=Timeframe,proto3" json:"Timeframe,omitempty"` // Window duration relative to now; mutually exclusive with TimeRange TimeRange *LogTimeRange `protobuf:"bytes,4,opt,name=TimeRange,proto3" json:"TimeRange,omitempty"` // Custom absolute time range; used when Timeframe is unset - Contains string `protobuf:"bytes,5,opt,name=Contains,proto3" json:"Contains,omitempty"` // Substring / multi-line query text + Contains []*LogContainsFilter `protobuf:"bytes,5,rep,name=Contains,proto3" json:"Contains,omitempty"` // Substring filters; an event must satisfy every entry (include AND, exclude AND) } func (x *LogFilter) Reset() { @@ -310,13 +310,70 @@ func (x *LogFilter) GetTimeRange() *LogTimeRange { return nil } -func (x *LogFilter) GetContains() string { +func (x *LogFilter) GetContains() []*LogContainsFilter { if x != nil { return x.Contains } + return nil +} + +// * +// A single substring filter applied to log event messages +type LogContainsFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value string `protobuf:"bytes,1,opt,name=Value,proto3" json:"Value,omitempty"` // Substring to match against the event message + Exclude bool `protobuf:"varint,2,opt,name=Exclude,proto3" json:"Exclude,omitempty"` // false = event message must contain Value; true = event message must NOT contain Value +} + +func (x *LogContainsFilter) Reset() { + *x = LogContainsFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_logs_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogContainsFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogContainsFilter) ProtoMessage() {} + +func (x *LogContainsFilter) ProtoReflect() protoreflect.Message { + mi := &file_logs_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LogContainsFilter.ProtoReflect.Descriptor instead. +func (*LogContainsFilter) Descriptor() ([]byte, []int) { + return file_logs_proto_rawDescGZIP(), []int{5} +} + +func (x *LogContainsFilter) GetValue() string { + if x != nil { + return x.Value + } return "" } +func (x *LogContainsFilter) GetExclude() bool { + if x != nil { + return x.Exclude + } + return false +} + // * // Custom time range for a log query type LogTimeRange struct { @@ -331,7 +388,7 @@ type LogTimeRange struct { func (x *LogTimeRange) Reset() { *x = LogTimeRange{} if protoimpl.UnsafeEnabled { - mi := &file_logs_proto_msgTypes[5] + mi := &file_logs_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -344,7 +401,7 @@ func (x *LogTimeRange) String() string { func (*LogTimeRange) ProtoMessage() {} func (x *LogTimeRange) ProtoReflect() protoreflect.Message { - mi := &file_logs_proto_msgTypes[5] + mi := &file_logs_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -357,7 +414,7 @@ func (x *LogTimeRange) ProtoReflect() protoreflect.Message { // Deprecated: Use LogTimeRange.ProtoReflect.Descriptor instead. func (*LogTimeRange) Descriptor() ([]byte, []int) { - return file_logs_proto_rawDescGZIP(), []int{5} + return file_logs_proto_rawDescGZIP(), []int{6} } func (x *LogTimeRange) GetFrom() *timestamppb.Timestamp { @@ -388,7 +445,7 @@ type LogQueryRequest struct { func (x *LogQueryRequest) Reset() { *x = LogQueryRequest{} if protoimpl.UnsafeEnabled { - mi := &file_logs_proto_msgTypes[6] + mi := &file_logs_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -401,7 +458,7 @@ func (x *LogQueryRequest) String() string { func (*LogQueryRequest) ProtoMessage() {} func (x *LogQueryRequest) ProtoReflect() protoreflect.Message { - mi := &file_logs_proto_msgTypes[6] + mi := &file_logs_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -414,7 +471,7 @@ func (x *LogQueryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LogQueryRequest.ProtoReflect.Descriptor instead. func (*LogQueryRequest) Descriptor() ([]byte, []int) { - return file_logs_proto_rawDescGZIP(), []int{6} + return file_logs_proto_rawDescGZIP(), []int{7} } func (x *LogQueryRequest) GetFilter() *LogFilter { @@ -448,7 +505,7 @@ type LogQueryResponse struct { func (x *LogQueryResponse) Reset() { *x = LogQueryResponse{} if protoimpl.UnsafeEnabled { - mi := &file_logs_proto_msgTypes[7] + mi := &file_logs_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -461,7 +518,7 @@ func (x *LogQueryResponse) String() string { func (*LogQueryResponse) ProtoMessage() {} func (x *LogQueryResponse) ProtoReflect() protoreflect.Message { - mi := &file_logs_proto_msgTypes[7] + mi := &file_logs_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -474,7 +531,7 @@ func (x *LogQueryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LogQueryResponse.ProtoReflect.Descriptor instead. func (*LogQueryResponse) Descriptor() ([]byte, []int) { - return file_logs_proto_rawDescGZIP(), []int{7} + return file_logs_proto_rawDescGZIP(), []int{8} } func (m *LogQueryResponse) GetBody() isLogQueryResponse_Body { @@ -532,7 +589,7 @@ type LogEvent struct { func (x *LogEvent) Reset() { *x = LogEvent{} if protoimpl.UnsafeEnabled { - mi := &file_logs_proto_msgTypes[8] + mi := &file_logs_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -545,7 +602,7 @@ func (x *LogEvent) String() string { func (*LogEvent) ProtoMessage() {} func (x *LogEvent) ProtoReflect() protoreflect.Message { - mi := &file_logs_proto_msgTypes[8] + mi := &file_logs_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -558,7 +615,7 @@ func (x *LogEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use LogEvent.ProtoReflect.Descriptor instead. func (*LogEvent) Descriptor() ([]byte, []int) { - return file_logs_proto_rawDescGZIP(), []int{8} + return file_logs_proto_rawDescGZIP(), []int{9} } func (x *LogEvent) GetTimestamp() *timestamppb.Timestamp { @@ -617,7 +674,7 @@ type LogQueryMeta struct { func (x *LogQueryMeta) Reset() { *x = LogQueryMeta{} if protoimpl.UnsafeEnabled { - mi := &file_logs_proto_msgTypes[9] + mi := &file_logs_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -630,7 +687,7 @@ func (x *LogQueryMeta) String() string { func (*LogQueryMeta) ProtoMessage() {} func (x *LogQueryMeta) ProtoReflect() protoreflect.Message { - mi := &file_logs_proto_msgTypes[9] + mi := &file_logs_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -643,7 +700,7 @@ func (x *LogQueryMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use LogQueryMeta.ProtoReflect.Descriptor instead. func (*LogQueryMeta) Descriptor() ([]byte, []int) { - return file_logs_proto_rawDescGZIP(), []int{9} + return file_logs_proto_rawDescGZIP(), []int{10} } func (x *LogQueryMeta) GetScanned() int64 { @@ -674,7 +731,7 @@ type LogSummariseRequest struct { func (x *LogSummariseRequest) Reset() { *x = LogSummariseRequest{} if protoimpl.UnsafeEnabled { - mi := &file_logs_proto_msgTypes[10] + mi := &file_logs_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -687,7 +744,7 @@ func (x *LogSummariseRequest) String() string { func (*LogSummariseRequest) ProtoMessage() {} func (x *LogSummariseRequest) ProtoReflect() protoreflect.Message { - mi := &file_logs_proto_msgTypes[10] + mi := &file_logs_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -700,7 +757,7 @@ func (x *LogSummariseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LogSummariseRequest.ProtoReflect.Descriptor instead. func (*LogSummariseRequest) Descriptor() ([]byte, []int) { - return file_logs_proto_rawDescGZIP(), []int{10} + return file_logs_proto_rawDescGZIP(), []int{11} } func (x *LogSummariseRequest) GetFilter() *LogFilter { @@ -732,7 +789,7 @@ type LogSummariseResponse struct { func (x *LogSummariseResponse) Reset() { *x = LogSummariseResponse{} if protoimpl.UnsafeEnabled { - mi := &file_logs_proto_msgTypes[11] + mi := &file_logs_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -745,7 +802,7 @@ func (x *LogSummariseResponse) String() string { func (*LogSummariseResponse) ProtoMessage() {} func (x *LogSummariseResponse) ProtoReflect() protoreflect.Message { - mi := &file_logs_proto_msgTypes[11] + mi := &file_logs_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -758,7 +815,7 @@ func (x *LogSummariseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LogSummariseResponse.ProtoReflect.Descriptor instead. func (*LogSummariseResponse) Descriptor() ([]byte, []int) { - return file_logs_proto_rawDescGZIP(), []int{11} + return file_logs_proto_rawDescGZIP(), []int{12} } func (x *LogSummariseResponse) GetTldr() string { @@ -806,7 +863,7 @@ var file_logs_proto_rawDesc = []byte{ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0xd2, 0x01, 0x0a, 0x09, 0x4c, 0x6f, + 0x52, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0xef, 0x01, 0x0a, 0x09, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, @@ -818,78 +875,84 @@ var file_logs_proto_rawDesc = []byte{ 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x22, 0x6a, - 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2e, - 0x0a, 0x04, 0x46, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x67, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, + 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x52, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x22, 0x43, 0x0a, 0x11, 0x4c, + 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x22, 0x6a, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, + 0x12, 0x2e, 0x0a, 0x04, 0x46, 0x72, 0x6f, 0x6d, 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, 0x04, 0x46, 0x72, 0x6f, 0x6d, + 0x12, 0x2a, 0x0a, 0x02, 0x54, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x2a, - 0x0a, 0x02, 0x54, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x02, 0x54, 0x6f, 0x22, 0x54, 0x0a, 0x0f, 0x4c, 0x6f, - 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, - 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x22, 0x74, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, - 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x2c, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x42, 0x06, - 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x22, 0xb6, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, - 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, - 0x03, 0x52, 0x61, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x52, 0x61, 0x77, 0x22, - 0x5a, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x52, 0x61, 0x6e, - 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x02, 0x54, 0x6f, 0x22, 0x54, 0x0a, 0x0f, + 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x2b, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x22, 0x74, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, + 0x42, 0x06, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x22, 0xb6, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 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, 0x05, 0x52, 0x61, 0x6e, 0x41, 0x74, 0x22, 0x5a, 0x0a, 0x13, 0x4c, - 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, - 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, - 0x16, 0x0a, 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x22, 0x70, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x54, 0x6c, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, - 0x6c, 0x64, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x0a, - 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xad, 0x02, 0x0a, 0x04, 0x6c, 0x6f, - 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, - 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, - 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, - 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, - 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x10, 0x0a, 0x03, 0x52, 0x61, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x52, 0x61, + 0x77, 0x22, 0x5a, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, + 0x61, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x52, + 0x61, 0x6e, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x52, 0x61, 0x6e, 0x41, 0x74, 0x22, 0x5a, 0x0a, + 0x13, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, + 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x22, 0x70, 0x0a, 0x14, 0x4c, 0x6f, 0x67, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x6c, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x54, 0x6c, 0x64, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, + 0x2a, 0x0a, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xad, 0x02, 0x0a, 0x04, + 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x2e, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, + 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x05, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, + 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4c, 0x0a, + 0x09, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, + 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x06, 0x5a, 0x04, 0x2e, + 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -904,47 +967,49 @@ func file_logs_proto_rawDescGZIP() []byte { return file_logs_proto_rawDescData } -var file_logs_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_logs_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_logs_proto_goTypes = []interface{}{ (*LogTailRequest)(nil), // 0: workflow.LogTailRequest (*LogTailResponse)(nil), // 1: workflow.LogTailResponse (*LogListStreamsRequest)(nil), // 2: workflow.LogListStreamsRequest (*LogListStreamsResponse)(nil), // 3: workflow.LogListStreamsResponse (*LogFilter)(nil), // 4: workflow.LogFilter - (*LogTimeRange)(nil), // 5: workflow.LogTimeRange - (*LogQueryRequest)(nil), // 6: workflow.LogQueryRequest - (*LogQueryResponse)(nil), // 7: workflow.LogQueryResponse - (*LogEvent)(nil), // 8: workflow.LogEvent - (*LogQueryMeta)(nil), // 9: workflow.LogQueryMeta - (*LogSummariseRequest)(nil), // 10: workflow.LogSummariseRequest - (*LogSummariseResponse)(nil), // 11: workflow.LogSummariseResponse - (*durationpb.Duration)(nil), // 12: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 13: google.protobuf.Timestamp + (*LogContainsFilter)(nil), // 5: workflow.LogContainsFilter + (*LogTimeRange)(nil), // 6: workflow.LogTimeRange + (*LogQueryRequest)(nil), // 7: workflow.LogQueryRequest + (*LogQueryResponse)(nil), // 8: workflow.LogQueryResponse + (*LogEvent)(nil), // 9: workflow.LogEvent + (*LogQueryMeta)(nil), // 10: workflow.LogQueryMeta + (*LogSummariseRequest)(nil), // 11: workflow.LogSummariseRequest + (*LogSummariseResponse)(nil), // 12: workflow.LogSummariseResponse + (*durationpb.Duration)(nil), // 13: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp } var file_logs_proto_depIdxs = []int32{ - 12, // 0: workflow.LogFilter.Timeframe:type_name -> google.protobuf.Duration - 5, // 1: workflow.LogFilter.TimeRange:type_name -> workflow.LogTimeRange - 13, // 2: workflow.LogTimeRange.From:type_name -> google.protobuf.Timestamp - 13, // 3: workflow.LogTimeRange.To:type_name -> google.protobuf.Timestamp - 4, // 4: workflow.LogQueryRequest.Filter:type_name -> workflow.LogFilter - 8, // 5: workflow.LogQueryResponse.Event:type_name -> workflow.LogEvent - 9, // 6: workflow.LogQueryResponse.Meta:type_name -> workflow.LogQueryMeta - 13, // 7: workflow.LogEvent.Timestamp:type_name -> google.protobuf.Timestamp - 13, // 8: workflow.LogQueryMeta.RanAt:type_name -> google.protobuf.Timestamp - 4, // 9: workflow.LogSummariseRequest.Filter:type_name -> workflow.LogFilter - 0, // 10: workflow.logs.Tail:input_type -> workflow.LogTailRequest - 2, // 11: workflow.logs.ListStreams:input_type -> workflow.LogListStreamsRequest - 6, // 12: workflow.logs.Query:input_type -> workflow.LogQueryRequest - 10, // 13: workflow.logs.Summarise:input_type -> workflow.LogSummariseRequest - 1, // 14: workflow.logs.Tail:output_type -> workflow.LogTailResponse - 3, // 15: workflow.logs.ListStreams:output_type -> workflow.LogListStreamsResponse - 7, // 16: workflow.logs.Query:output_type -> workflow.LogQueryResponse - 11, // 17: workflow.logs.Summarise:output_type -> workflow.LogSummariseResponse - 14, // [14:18] is the sub-list for method output_type - 10, // [10:14] is the sub-list for method input_type - 10, // [10:10] is the sub-list for extension type_name - 10, // [10:10] is the sub-list for extension extendee - 0, // [0:10] is the sub-list for field type_name + 13, // 0: workflow.LogFilter.Timeframe:type_name -> google.protobuf.Duration + 6, // 1: workflow.LogFilter.TimeRange:type_name -> workflow.LogTimeRange + 5, // 2: workflow.LogFilter.Contains:type_name -> workflow.LogContainsFilter + 14, // 3: workflow.LogTimeRange.From:type_name -> google.protobuf.Timestamp + 14, // 4: workflow.LogTimeRange.To:type_name -> google.protobuf.Timestamp + 4, // 5: workflow.LogQueryRequest.Filter:type_name -> workflow.LogFilter + 9, // 6: workflow.LogQueryResponse.Event:type_name -> workflow.LogEvent + 10, // 7: workflow.LogQueryResponse.Meta:type_name -> workflow.LogQueryMeta + 14, // 8: workflow.LogEvent.Timestamp:type_name -> google.protobuf.Timestamp + 14, // 9: workflow.LogQueryMeta.RanAt:type_name -> google.protobuf.Timestamp + 4, // 10: workflow.LogSummariseRequest.Filter:type_name -> workflow.LogFilter + 0, // 11: workflow.logs.Tail:input_type -> workflow.LogTailRequest + 2, // 12: workflow.logs.ListStreams:input_type -> workflow.LogListStreamsRequest + 7, // 13: workflow.logs.Query:input_type -> workflow.LogQueryRequest + 11, // 14: workflow.logs.Summarise:input_type -> workflow.LogSummariseRequest + 1, // 15: workflow.logs.Tail:output_type -> workflow.LogTailResponse + 3, // 16: workflow.logs.ListStreams:output_type -> workflow.LogListStreamsResponse + 8, // 17: workflow.logs.Query:output_type -> workflow.LogQueryResponse + 12, // 18: workflow.logs.Summarise:output_type -> workflow.LogSummariseResponse + 15, // [15:19] is the sub-list for method output_type + 11, // [11:15] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name } func init() { file_logs_proto_init() } @@ -1014,7 +1079,7 @@ func file_logs_proto_init() { } } file_logs_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogTimeRange); i { + switch v := v.(*LogContainsFilter); i { case 0: return &v.state case 1: @@ -1026,7 +1091,7 @@ func file_logs_proto_init() { } } file_logs_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogQueryRequest); i { + switch v := v.(*LogTimeRange); i { case 0: return &v.state case 1: @@ -1038,7 +1103,7 @@ func file_logs_proto_init() { } } file_logs_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogQueryResponse); i { + switch v := v.(*LogQueryRequest); i { case 0: return &v.state case 1: @@ -1050,7 +1115,7 @@ func file_logs_proto_init() { } } file_logs_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogEvent); i { + switch v := v.(*LogQueryResponse); i { case 0: return &v.state case 1: @@ -1062,7 +1127,7 @@ func file_logs_proto_init() { } } file_logs_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogQueryMeta); i { + switch v := v.(*LogEvent); i { case 0: return &v.state case 1: @@ -1074,7 +1139,7 @@ func file_logs_proto_init() { } } file_logs_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogSummariseRequest); i { + switch v := v.(*LogQueryMeta); i { case 0: return &v.state case 1: @@ -1086,6 +1151,18 @@ func file_logs_proto_init() { } } file_logs_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogSummariseRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logs_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LogSummariseResponse); i { case 0: return &v.state @@ -1098,7 +1175,7 @@ func file_logs_proto_init() { } } } - file_logs_proto_msgTypes[7].OneofWrappers = []interface{}{ + file_logs_proto_msgTypes[8].OneofWrappers = []interface{}{ (*LogQueryResponse_Event)(nil), (*LogQueryResponse_Meta)(nil), } @@ -1108,7 +1185,7 @@ func file_logs_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_logs_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 13, NumExtensions: 0, NumServices: 1, }, From 701ee1d49138302af78b799752209723bb08d68b Mon Sep 17 00:00:00 2001 From: Nick Schuch Date: Wed, 29 Apr 2026 14:20:13 +1000 Subject: [PATCH 5/7] Fix time fields --- internal/server/mock/logs/server.go | 2 +- logs.proto | 7 +- pb/logs.pb.go | 211 ++++++++++++++++------------ 3 files changed, 128 insertions(+), 92 deletions(-) diff --git a/internal/server/mock/logs/server.go b/internal/server/mock/logs/server.go index 8c3d144..2ad01af 100644 --- a/internal/server/mock/logs/server.go +++ b/internal/server/mock/logs/server.go @@ -133,7 +133,7 @@ func buildMockEvents() []*pb.LogEvent { } // Query streams matching log events followed by a terminal metadata message. -// Timeframe and TimeRange on the filter are accepted but ignored by the mock. +// The Window oneof (Timeframe or TimeRange) on the filter is accepted but ignored by the mock. func (s *Server) Query(req *pb.LogQueryRequest, stream pb.Logs_QueryServer) error { if req.Filter == nil { return fmt.Errorf("filter not provided") diff --git a/logs.proto b/logs.proto index 49d4400..b00b496 100644 --- a/logs.proto +++ b/logs.proto @@ -51,8 +51,11 @@ message LogListStreamsResponse { message LogFilter { string Environment = 1; // Name of the environment repeated string Streams = 2; // Stream IDs to include; empty means all - google.protobuf.Duration Timeframe = 3; // Window duration relative to now; mutually exclusive with TimeRange - LogTimeRange TimeRange = 4; // Custom absolute time range; used when Timeframe is unset + // Time window for the query; exactly one variant should be set. + oneof Window { + google.protobuf.Duration Timeframe = 3; // Window duration relative to now + LogTimeRange TimeRange = 4; // Custom absolute time range + } repeated LogContainsFilter Contains = 5; // Substring filters; an event must satisfy every entry (include AND, exclude AND) } diff --git a/pb/logs.pb.go b/pb/logs.pb.go index 3836098..e92245e 100644 --- a/pb/logs.pb.go +++ b/pb/logs.pb.go @@ -243,11 +243,16 @@ type LogFilter struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Environment string `protobuf:"bytes,1,opt,name=Environment,proto3" json:"Environment,omitempty"` // Name of the environment - Streams []string `protobuf:"bytes,2,rep,name=Streams,proto3" json:"Streams,omitempty"` // Stream IDs to include; empty means all - Timeframe *durationpb.Duration `protobuf:"bytes,3,opt,name=Timeframe,proto3" json:"Timeframe,omitempty"` // Window duration relative to now; mutually exclusive with TimeRange - TimeRange *LogTimeRange `protobuf:"bytes,4,opt,name=TimeRange,proto3" json:"TimeRange,omitempty"` // Custom absolute time range; used when Timeframe is unset - Contains []*LogContainsFilter `protobuf:"bytes,5,rep,name=Contains,proto3" json:"Contains,omitempty"` // Substring filters; an event must satisfy every entry (include AND, exclude AND) + Environment string `protobuf:"bytes,1,opt,name=Environment,proto3" json:"Environment,omitempty"` // Name of the environment + Streams []string `protobuf:"bytes,2,rep,name=Streams,proto3" json:"Streams,omitempty"` // Stream IDs to include; empty means all + // Time window for the query; exactly one variant should be set. + // + // Types that are assignable to Window: + // + // *LogFilter_Timeframe + // *LogFilter_TimeRange + Window isLogFilter_Window `protobuf_oneof:"Window"` + Contains []*LogContainsFilter `protobuf:"bytes,5,rep,name=Contains,proto3" json:"Contains,omitempty"` // Substring filters; an event must satisfy every entry (include AND, exclude AND) } func (x *LogFilter) Reset() { @@ -296,15 +301,22 @@ func (x *LogFilter) GetStreams() []string { return nil } +func (m *LogFilter) GetWindow() isLogFilter_Window { + if m != nil { + return m.Window + } + return nil +} + func (x *LogFilter) GetTimeframe() *durationpb.Duration { - if x != nil { + if x, ok := x.GetWindow().(*LogFilter_Timeframe); ok { return x.Timeframe } return nil } func (x *LogFilter) GetTimeRange() *LogTimeRange { - if x != nil { + if x, ok := x.GetWindow().(*LogFilter_TimeRange); ok { return x.TimeRange } return nil @@ -317,6 +329,22 @@ func (x *LogFilter) GetContains() []*LogContainsFilter { return nil } +type isLogFilter_Window interface { + isLogFilter_Window() +} + +type LogFilter_Timeframe struct { + Timeframe *durationpb.Duration `protobuf:"bytes,3,opt,name=Timeframe,proto3,oneof"` // Window duration relative to now +} + +type LogFilter_TimeRange struct { + TimeRange *LogTimeRange `protobuf:"bytes,4,opt,name=TimeRange,proto3,oneof"` // Custom absolute time range +} + +func (*LogFilter_Timeframe) isLogFilter_Window() {} + +func (*LogFilter_TimeRange) isLogFilter_Window() {} + // * // A single substring filter applied to log event messages type LogContainsFilter struct { @@ -863,96 +891,97 @@ var file_logs_proto_rawDesc = []byte{ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0xef, 0x01, 0x0a, 0x09, 0x4c, 0x6f, + 0x52, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0xfd, 0x01, 0x0a, 0x09, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x66, 0x72, 0x61, 0x6d, 0x65, + 0x61, 0x6d, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x03, 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, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x09, - 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x69, - 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, - 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x52, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x22, 0x43, 0x0a, 0x11, 0x4c, - 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x22, 0x6a, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x12, 0x2e, 0x0a, 0x04, 0x46, 0x72, 0x6f, 0x6d, 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, 0x04, 0x46, 0x72, 0x6f, 0x6d, - 0x12, 0x2a, 0x0a, 0x02, 0x54, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6e, 0x48, 0x00, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x36, + 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, + 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x00, 0x52, 0x09, 0x54, 0x69, 0x6d, + 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x42, + 0x08, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x22, 0x43, 0x0a, 0x11, 0x4c, 0x6f, 0x67, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, + 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x22, 0x6a, + 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2e, + 0x0a, 0x04, 0x46, 0x72, 0x6f, 0x6d, 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, 0x02, 0x54, 0x6f, 0x22, 0x54, 0x0a, 0x0f, - 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2b, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x22, 0x74, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, - 0x42, 0x06, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x22, 0xb6, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x10, 0x0a, 0x03, 0x52, 0x61, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x52, 0x61, - 0x77, 0x22, 0x5a, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, - 0x61, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x52, - 0x61, 0x6e, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x2a, + 0x0a, 0x02, 0x54, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x52, 0x61, 0x6e, 0x41, 0x74, 0x22, 0x5a, 0x0a, - 0x13, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, - 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x22, 0x70, 0x0a, 0x14, 0x4c, 0x6f, 0x67, - 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x6c, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x54, 0x6c, 0x64, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, - 0x2a, 0x0a, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xad, 0x02, 0x0a, 0x04, - 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x2e, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, - 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x05, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, - 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4c, 0x0a, - 0x09, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, - 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x06, 0x5a, 0x04, 0x2e, - 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x02, 0x54, 0x6f, 0x22, 0x54, 0x0a, 0x0f, 0x4c, 0x6f, + 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, + 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x22, 0x74, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, + 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x2c, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x42, 0x06, + 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x22, 0xb6, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, + 0x03, 0x52, 0x61, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x52, 0x61, 0x77, 0x22, + 0x5a, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x12, + 0x18, 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x52, 0x61, 0x6e, + 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x52, 0x61, 0x6e, 0x41, 0x74, 0x22, 0x5a, 0x0a, 0x13, 0x4c, + 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, + 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, + 0x16, 0x0a, 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x22, 0x70, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x54, 0x6c, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, + 0x6c, 0x64, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x0a, + 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xad, 0x02, 0x0a, 0x04, 0x6c, 0x6f, + 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x2e, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, + 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, + 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, + 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, + 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1175,6 +1204,10 @@ func file_logs_proto_init() { } } } + file_logs_proto_msgTypes[4].OneofWrappers = []interface{}{ + (*LogFilter_Timeframe)(nil), + (*LogFilter_TimeRange)(nil), + } file_logs_proto_msgTypes[8].OneofWrappers = []interface{}{ (*LogQueryResponse_Event)(nil), (*LogQueryResponse_Meta)(nil), From 44a06c60c73391285a2b8feedacecd126d4561e4 Mon Sep 17 00:00:00 2001 From: Nick Schuch Date: Wed, 29 Apr 2026 14:55:35 +1000 Subject: [PATCH 6/7] Refined fields --- internal/server/mock/logs/server.go | 32 ++----- logs.proto | 7 +- pb/logs.pb.go | 130 +++++++++++----------------- 3 files changed, 60 insertions(+), 109 deletions(-) diff --git a/internal/server/mock/logs/server.go b/internal/server/mock/logs/server.go index 2ad01af..48d45b4 100644 --- a/internal/server/mock/logs/server.go +++ b/internal/server/mock/logs/server.go @@ -84,50 +84,32 @@ func buildMockEvents() []*pb.LogEvent { { Timestamp: timestamppb.New(now.Add(-1 * time.Minute)), Stream: StreamNginx, - Message: "GET /readyz 200", - Level: "info", - Status: 200, - Raw: rawNginx, + Message: rawNginx, }, { Timestamp: timestamppb.New(now.Add(-3 * time.Minute)), Stream: StreamFPM, - Message: "GET /readyz 200", - Level: "info", - Status: 200, - Raw: rawFPM, + Message: rawFPM, }, { Timestamp: timestamppb.New(now.Add(-7 * time.Minute)), Stream: StreamNginx, - Message: "GET /node/1 200", - Level: "info", - Status: 200, - Raw: rawNginx, + Message: rawNginx, }, { Timestamp: timestamppb.New(now.Add(-12 * time.Minute)), Stream: StreamFPM, - Message: "PHP Fatal error: Allowed memory size exhausted", - Level: "error", - Status: 500, - Raw: rawFPM, + Message: rawFPM, }, { Timestamp: timestamppb.New(now.Add(-25 * time.Minute)), Stream: StreamNginx, - Message: "GET /admin 403", - Level: "warning", - Status: 403, - Raw: rawNginx, + Message: rawNginx, }, { Timestamp: timestamppb.New(now.Add(-45 * time.Minute)), Stream: StreamFPM, - Message: "Slow request detected: 5.2s", - Level: "warning", - Status: 200, - Raw: rawFPM, + Message: rawFPM, }, } } @@ -222,7 +204,7 @@ func (s *Server) Summarise(ctx context.Context, req *pb.LogSummariseRequest) (*p } return &pb.LogSummariseResponse{ - Tldr: "Traffic is nominal with a small number of 5xx errors originating from the fpm stream; nginx is healthy.", + Overview: "Traffic is nominal with a small number of 5xx errors originating from the fpm stream; nginx is healthy.", Bullets: []string{ "99.2% of requests returned 2xx", "3 elevated-error windows detected in fpm between 01:20-01:40 UTC", diff --git a/logs.proto b/logs.proto index b00b496..c152e20 100644 --- a/logs.proto +++ b/logs.proto @@ -99,10 +99,7 @@ message LogQueryResponse { message LogEvent { google.protobuf.Timestamp Timestamp = 1; // Event timestamp string Stream = 2; // Stream ID e.g. "nginx","fpm","cli","cloudfront","invalidations","waf" - string Message = 3; // Human-readable message line - string Level = 4; // Level e.g. "info","warning","error" (optional) - int32 Status = 5; // HTTP status code if applicable; 0 when not applicable - string Raw = 6; // Original JSON payload, serialised as a string + string Message = 3; // Original payload (typically JSON), serialised as a string } /** @@ -125,7 +122,7 @@ message LogSummariseRequest { * AI-generated summary of a log window */ message LogSummariseResponse { - string Tldr = 1; // One-paragraph summary + string Overview = 1; // One-paragraph summary repeated string Bullets = 2; // Notable events / observations repeated string SuggestedActions = 3; // Suggested follow-up actions } diff --git a/pb/logs.pb.go b/pb/logs.pb.go index e92245e..ddf1213 100644 --- a/pb/logs.pb.go +++ b/pb/logs.pb.go @@ -608,10 +608,7 @@ type LogEvent struct { Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=Timestamp,proto3" json:"Timestamp,omitempty"` // Event timestamp Stream string `protobuf:"bytes,2,opt,name=Stream,proto3" json:"Stream,omitempty"` // Stream ID e.g. "nginx","fpm","cli","cloudfront","invalidations","waf" - Message string `protobuf:"bytes,3,opt,name=Message,proto3" json:"Message,omitempty"` // Human-readable message line - Level string `protobuf:"bytes,4,opt,name=Level,proto3" json:"Level,omitempty"` // Level e.g. "info","warning","error" (optional) - Status int32 `protobuf:"varint,5,opt,name=Status,proto3" json:"Status,omitempty"` // HTTP status code if applicable; 0 when not applicable - Raw string `protobuf:"bytes,6,opt,name=Raw,proto3" json:"Raw,omitempty"` // Original JSON payload, serialised as a string + Message string `protobuf:"bytes,3,opt,name=Message,proto3" json:"Message,omitempty"` // Original payload (typically JSON), serialised as a string } func (x *LogEvent) Reset() { @@ -667,27 +664,6 @@ func (x *LogEvent) GetMessage() string { return "" } -func (x *LogEvent) GetLevel() string { - if x != nil { - return x.Level - } - return "" -} - -func (x *LogEvent) GetStatus() int32 { - if x != nil { - return x.Status - } - return 0 -} - -func (x *LogEvent) GetRaw() string { - if x != nil { - return x.Raw - } - return "" -} - // * // Metadata for a completed query run, emitted as the final stream message type LogQueryMeta struct { @@ -809,7 +785,7 @@ type LogSummariseResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Tldr string `protobuf:"bytes,1,opt,name=Tldr,proto3" json:"Tldr,omitempty"` // One-paragraph summary + Overview string `protobuf:"bytes,1,opt,name=Overview,proto3" json:"Overview,omitempty"` // One-paragraph summary Bullets []string `protobuf:"bytes,2,rep,name=Bullets,proto3" json:"Bullets,omitempty"` // Notable events / observations SuggestedActions []string `protobuf:"bytes,3,rep,name=SuggestedActions,proto3" json:"SuggestedActions,omitempty"` // Suggested follow-up actions } @@ -846,9 +822,9 @@ func (*LogSummariseResponse) Descriptor() ([]byte, []int) { return file_logs_proto_rawDescGZIP(), []int{12} } -func (x *LogSummariseResponse) GetTldr() string { +func (x *LogSummariseResponse) GetOverview() string { if x != nil { - return x.Tldr + return x.Overview } return "" } @@ -931,57 +907,53 @@ var file_logs_proto_rawDesc = []byte{ 0x12, 0x2c, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x42, 0x06, - 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x22, 0xb6, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, - 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, - 0x03, 0x52, 0x61, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x52, 0x61, 0x77, 0x22, - 0x5a, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x52, 0x61, 0x6e, - 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x52, 0x61, 0x6e, 0x41, 0x74, 0x22, 0x5a, 0x0a, 0x13, 0x4c, - 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, - 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, - 0x16, 0x0a, 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x22, 0x70, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x54, 0x6c, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, - 0x6c, 0x64, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x0a, - 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xad, 0x02, 0x0a, 0x04, 0x6c, 0x6f, - 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, - 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, - 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, - 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, - 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x22, 0x76, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x5a, + 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x18, + 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x52, 0x61, 0x6e, 0x41, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x05, 0x52, 0x61, 0x6e, 0x41, 0x74, 0x22, 0x5a, 0x0a, 0x13, 0x4c, 0x6f, + 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, + 0x0a, 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x22, 0x78, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x75, + 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x42, 0x75, 0x6c, + 0x6c, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, + 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x32, 0xad, 0x02, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x04, 0x54, 0x61, 0x69, + 0x6c, 0x12, 0x18, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, + 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, + 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, + 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x12, + 0x1d, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( From ee80b7d42becf0ea13769e786b862cfb8a8c63a8 Mon Sep 17 00:00:00 2001 From: Nick Schuch Date: Wed, 29 Apr 2026 15:08:49 +1000 Subject: [PATCH 7/7] Batch events --- internal/server/mock/logs/server.go | 11 +- logs.proto | 11 +- pb/logs.pb.go | 280 +++++++++++++++++----------- 3 files changed, 192 insertions(+), 110 deletions(-) diff --git a/internal/server/mock/logs/server.go b/internal/server/mock/logs/server.go index 48d45b4..a4fb852 100644 --- a/internal/server/mock/logs/server.go +++ b/internal/server/mock/logs/server.go @@ -172,9 +172,16 @@ func (s *Server) Query(req *pb.LogQueryRequest, stream pb.Logs_QueryServer) erro events = events[:req.Limit] } - for _, evt := range events { + const batchSize = 2 + for i := 0; i < len(events); i += batchSize { + end := i + batchSize + if end > len(events) { + end = len(events) + } resp := &pb.LogQueryResponse{ - Body: &pb.LogQueryResponse_Event{Event: evt}, + Body: &pb.LogQueryResponse_Batch{ + Batch: &pb.LogEventBatch{Events: events[i:end]}, + }, } if err := stream.Send(resp); err != nil { return err diff --git a/logs.proto b/logs.proto index c152e20..ab11c0d 100644 --- a/logs.proto +++ b/logs.proto @@ -84,15 +84,22 @@ message LogQueryRequest { } /** - * Streamed query response: events followed by a final Meta message + * Streamed query response: batches of events followed by a final Meta message */ message LogQueryResponse { oneof Body { - LogEvent Event = 1; // A single matched log event + LogEventBatch Batch = 1; // A batch of matched log events LogQueryMeta Meta = 2; // Final message summarising the run } } +/** + * A batch of log events emitted as a single streamed response chunk + */ +message LogEventBatch { + repeated LogEvent Events = 1; // Events in this batch +} + /** * A single log event returned by a query */ diff --git a/pb/logs.pb.go b/pb/logs.pb.go index ddf1213..c4e2705 100644 --- a/pb/logs.pb.go +++ b/pb/logs.pb.go @@ -517,7 +517,7 @@ func (x *LogQueryRequest) GetLimit() int32 { } // * -// Streamed query response: events followed by a final Meta message +// Streamed query response: batches of events followed by a final Meta message type LogQueryResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -525,7 +525,7 @@ type LogQueryResponse struct { // Types that are assignable to Body: // - // *LogQueryResponse_Event + // *LogQueryResponse_Batch // *LogQueryResponse_Meta Body isLogQueryResponse_Body `protobuf_oneof:"Body"` } @@ -569,9 +569,9 @@ func (m *LogQueryResponse) GetBody() isLogQueryResponse_Body { return nil } -func (x *LogQueryResponse) GetEvent() *LogEvent { - if x, ok := x.GetBody().(*LogQueryResponse_Event); ok { - return x.Event +func (x *LogQueryResponse) GetBatch() *LogEventBatch { + if x, ok := x.GetBody().(*LogQueryResponse_Batch); ok { + return x.Batch } return nil } @@ -587,18 +587,67 @@ type isLogQueryResponse_Body interface { isLogQueryResponse_Body() } -type LogQueryResponse_Event struct { - Event *LogEvent `protobuf:"bytes,1,opt,name=Event,proto3,oneof"` // A single matched log event +type LogQueryResponse_Batch struct { + Batch *LogEventBatch `protobuf:"bytes,1,opt,name=Batch,proto3,oneof"` // A batch of matched log events } type LogQueryResponse_Meta struct { Meta *LogQueryMeta `protobuf:"bytes,2,opt,name=Meta,proto3,oneof"` // Final message summarising the run } -func (*LogQueryResponse_Event) isLogQueryResponse_Body() {} +func (*LogQueryResponse_Batch) isLogQueryResponse_Body() {} func (*LogQueryResponse_Meta) isLogQueryResponse_Body() {} +// * +// A batch of log events emitted as a single streamed response chunk +type LogEventBatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Events []*LogEvent `protobuf:"bytes,1,rep,name=Events,proto3" json:"Events,omitempty"` // Events in this batch +} + +func (x *LogEventBatch) Reset() { + *x = LogEventBatch{} + if protoimpl.UnsafeEnabled { + mi := &file_logs_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LogEventBatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogEventBatch) ProtoMessage() {} + +func (x *LogEventBatch) ProtoReflect() protoreflect.Message { + mi := &file_logs_proto_msgTypes[9] + 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 LogEventBatch.ProtoReflect.Descriptor instead. +func (*LogEventBatch) Descriptor() ([]byte, []int) { + return file_logs_proto_rawDescGZIP(), []int{9} +} + +func (x *LogEventBatch) GetEvents() []*LogEvent { + if x != nil { + return x.Events + } + return nil +} + // * // A single log event returned by a query type LogEvent struct { @@ -614,7 +663,7 @@ type LogEvent struct { func (x *LogEvent) Reset() { *x = LogEvent{} if protoimpl.UnsafeEnabled { - mi := &file_logs_proto_msgTypes[9] + mi := &file_logs_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -627,7 +676,7 @@ func (x *LogEvent) String() string { func (*LogEvent) ProtoMessage() {} func (x *LogEvent) ProtoReflect() protoreflect.Message { - mi := &file_logs_proto_msgTypes[9] + mi := &file_logs_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -640,7 +689,7 @@ func (x *LogEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use LogEvent.ProtoReflect.Descriptor instead. func (*LogEvent) Descriptor() ([]byte, []int) { - return file_logs_proto_rawDescGZIP(), []int{9} + return file_logs_proto_rawDescGZIP(), []int{10} } func (x *LogEvent) GetTimestamp() *timestamppb.Timestamp { @@ -678,7 +727,7 @@ type LogQueryMeta struct { func (x *LogQueryMeta) Reset() { *x = LogQueryMeta{} if protoimpl.UnsafeEnabled { - mi := &file_logs_proto_msgTypes[10] + mi := &file_logs_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -691,7 +740,7 @@ func (x *LogQueryMeta) String() string { func (*LogQueryMeta) ProtoMessage() {} func (x *LogQueryMeta) ProtoReflect() protoreflect.Message { - mi := &file_logs_proto_msgTypes[10] + mi := &file_logs_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -704,7 +753,7 @@ func (x *LogQueryMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use LogQueryMeta.ProtoReflect.Descriptor instead. func (*LogQueryMeta) Descriptor() ([]byte, []int) { - return file_logs_proto_rawDescGZIP(), []int{10} + return file_logs_proto_rawDescGZIP(), []int{11} } func (x *LogQueryMeta) GetScanned() int64 { @@ -735,7 +784,7 @@ type LogSummariseRequest struct { func (x *LogSummariseRequest) Reset() { *x = LogSummariseRequest{} if protoimpl.UnsafeEnabled { - mi := &file_logs_proto_msgTypes[11] + mi := &file_logs_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -748,7 +797,7 @@ func (x *LogSummariseRequest) String() string { func (*LogSummariseRequest) ProtoMessage() {} func (x *LogSummariseRequest) ProtoReflect() protoreflect.Message { - mi := &file_logs_proto_msgTypes[11] + mi := &file_logs_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -761,7 +810,7 @@ func (x *LogSummariseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LogSummariseRequest.ProtoReflect.Descriptor instead. func (*LogSummariseRequest) Descriptor() ([]byte, []int) { - return file_logs_proto_rawDescGZIP(), []int{11} + return file_logs_proto_rawDescGZIP(), []int{12} } func (x *LogSummariseRequest) GetFilter() *LogFilter { @@ -793,7 +842,7 @@ type LogSummariseResponse struct { func (x *LogSummariseResponse) Reset() { *x = LogSummariseResponse{} if protoimpl.UnsafeEnabled { - mi := &file_logs_proto_msgTypes[12] + mi := &file_logs_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -806,7 +855,7 @@ func (x *LogSummariseResponse) String() string { func (*LogSummariseResponse) ProtoMessage() {} func (x *LogSummariseResponse) ProtoReflect() protoreflect.Message { - mi := &file_logs_proto_msgTypes[12] + mi := &file_logs_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -819,7 +868,7 @@ func (x *LogSummariseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LogSummariseResponse.ProtoReflect.Descriptor instead. func (*LogSummariseResponse) Descriptor() ([]byte, []int) { - return file_logs_proto_rawDescGZIP(), []int{12} + return file_logs_proto_rawDescGZIP(), []int{13} } func (x *LogSummariseResponse) GetOverview() string { @@ -900,60 +949,65 @@ var file_logs_proto_rawDesc = []byte{ 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x22, 0x74, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, - 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x2c, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x42, 0x06, - 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x22, 0x76, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x5a, - 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x18, - 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x52, 0x61, 0x6e, 0x41, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x22, 0x79, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x05, 0x42, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, + 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x05, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2c, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, + 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x4d, + 0x65, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x22, 0x3b, 0x0a, 0x0d, 0x4c, + 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2a, 0x0a, 0x06, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x52, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x76, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 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, 0x05, 0x52, 0x61, 0x6e, 0x41, 0x74, 0x22, 0x5a, 0x0a, 0x13, 0x4c, 0x6f, - 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, - 0x0a, 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x22, 0x78, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x75, - 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x42, 0x75, 0x6c, - 0x6c, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, - 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x32, 0xad, 0x02, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x04, 0x54, 0x61, 0x69, - 0x6c, 0x12, 0x18, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, - 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, - 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, - 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, - 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x12, - 0x1d, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, - 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x6d, 0x70, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, + 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x5a, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, + 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x52, 0x61, + 0x6e, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x52, 0x61, 0x6e, 0x41, 0x74, 0x22, 0x5a, 0x0a, 0x13, + 0x4c, 0x6f, 0x67, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, + 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x16, 0x0a, 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x22, 0x78, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x12, 0x18, 0x0a, 0x07, + 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x42, + 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x32, 0xad, 0x02, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x3f, 0x0a, 0x04, 0x54, + 0x61, 0x69, 0x6c, 0x12, 0x18, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, + 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x54, 0x61, 0x69, 0x6c, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x42, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x19, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, + 0x4c, 0x6f, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, + 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1e, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x6f, 0x67, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -968,7 +1022,7 @@ func file_logs_proto_rawDescGZIP() []byte { return file_logs_proto_rawDescData } -var file_logs_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_logs_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_logs_proto_goTypes = []interface{}{ (*LogTailRequest)(nil), // 0: workflow.LogTailRequest (*LogTailResponse)(nil), // 1: workflow.LogTailResponse @@ -979,38 +1033,40 @@ var file_logs_proto_goTypes = []interface{}{ (*LogTimeRange)(nil), // 6: workflow.LogTimeRange (*LogQueryRequest)(nil), // 7: workflow.LogQueryRequest (*LogQueryResponse)(nil), // 8: workflow.LogQueryResponse - (*LogEvent)(nil), // 9: workflow.LogEvent - (*LogQueryMeta)(nil), // 10: workflow.LogQueryMeta - (*LogSummariseRequest)(nil), // 11: workflow.LogSummariseRequest - (*LogSummariseResponse)(nil), // 12: workflow.LogSummariseResponse - (*durationpb.Duration)(nil), // 13: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp + (*LogEventBatch)(nil), // 9: workflow.LogEventBatch + (*LogEvent)(nil), // 10: workflow.LogEvent + (*LogQueryMeta)(nil), // 11: workflow.LogQueryMeta + (*LogSummariseRequest)(nil), // 12: workflow.LogSummariseRequest + (*LogSummariseResponse)(nil), // 13: workflow.LogSummariseResponse + (*durationpb.Duration)(nil), // 14: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp } var file_logs_proto_depIdxs = []int32{ - 13, // 0: workflow.LogFilter.Timeframe:type_name -> google.protobuf.Duration + 14, // 0: workflow.LogFilter.Timeframe:type_name -> google.protobuf.Duration 6, // 1: workflow.LogFilter.TimeRange:type_name -> workflow.LogTimeRange 5, // 2: workflow.LogFilter.Contains:type_name -> workflow.LogContainsFilter - 14, // 3: workflow.LogTimeRange.From:type_name -> google.protobuf.Timestamp - 14, // 4: workflow.LogTimeRange.To:type_name -> google.protobuf.Timestamp + 15, // 3: workflow.LogTimeRange.From:type_name -> google.protobuf.Timestamp + 15, // 4: workflow.LogTimeRange.To:type_name -> google.protobuf.Timestamp 4, // 5: workflow.LogQueryRequest.Filter:type_name -> workflow.LogFilter - 9, // 6: workflow.LogQueryResponse.Event:type_name -> workflow.LogEvent - 10, // 7: workflow.LogQueryResponse.Meta:type_name -> workflow.LogQueryMeta - 14, // 8: workflow.LogEvent.Timestamp:type_name -> google.protobuf.Timestamp - 14, // 9: workflow.LogQueryMeta.RanAt:type_name -> google.protobuf.Timestamp - 4, // 10: workflow.LogSummariseRequest.Filter:type_name -> workflow.LogFilter - 0, // 11: workflow.logs.Tail:input_type -> workflow.LogTailRequest - 2, // 12: workflow.logs.ListStreams:input_type -> workflow.LogListStreamsRequest - 7, // 13: workflow.logs.Query:input_type -> workflow.LogQueryRequest - 11, // 14: workflow.logs.Summarise:input_type -> workflow.LogSummariseRequest - 1, // 15: workflow.logs.Tail:output_type -> workflow.LogTailResponse - 3, // 16: workflow.logs.ListStreams:output_type -> workflow.LogListStreamsResponse - 8, // 17: workflow.logs.Query:output_type -> workflow.LogQueryResponse - 12, // 18: workflow.logs.Summarise:output_type -> workflow.LogSummariseResponse - 15, // [15:19] is the sub-list for method output_type - 11, // [11:15] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 9, // 6: workflow.LogQueryResponse.Batch:type_name -> workflow.LogEventBatch + 11, // 7: workflow.LogQueryResponse.Meta:type_name -> workflow.LogQueryMeta + 10, // 8: workflow.LogEventBatch.Events:type_name -> workflow.LogEvent + 15, // 9: workflow.LogEvent.Timestamp:type_name -> google.protobuf.Timestamp + 15, // 10: workflow.LogQueryMeta.RanAt:type_name -> google.protobuf.Timestamp + 4, // 11: workflow.LogSummariseRequest.Filter:type_name -> workflow.LogFilter + 0, // 12: workflow.logs.Tail:input_type -> workflow.LogTailRequest + 2, // 13: workflow.logs.ListStreams:input_type -> workflow.LogListStreamsRequest + 7, // 14: workflow.logs.Query:input_type -> workflow.LogQueryRequest + 12, // 15: workflow.logs.Summarise:input_type -> workflow.LogSummariseRequest + 1, // 16: workflow.logs.Tail:output_type -> workflow.LogTailResponse + 3, // 17: workflow.logs.ListStreams:output_type -> workflow.LogListStreamsResponse + 8, // 18: workflow.logs.Query:output_type -> workflow.LogQueryResponse + 13, // 19: workflow.logs.Summarise:output_type -> workflow.LogSummariseResponse + 16, // [16:20] is the sub-list for method output_type + 12, // [12:16] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_logs_proto_init() } @@ -1128,7 +1184,7 @@ func file_logs_proto_init() { } } file_logs_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogEvent); i { + switch v := v.(*LogEventBatch); i { case 0: return &v.state case 1: @@ -1140,7 +1196,7 @@ func file_logs_proto_init() { } } file_logs_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogQueryMeta); i { + switch v := v.(*LogEvent); i { case 0: return &v.state case 1: @@ -1152,7 +1208,7 @@ func file_logs_proto_init() { } } file_logs_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogSummariseRequest); i { + switch v := v.(*LogQueryMeta); i { case 0: return &v.state case 1: @@ -1164,6 +1220,18 @@ func file_logs_proto_init() { } } file_logs_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogSummariseRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_logs_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LogSummariseResponse); i { case 0: return &v.state @@ -1181,7 +1249,7 @@ func file_logs_proto_init() { (*LogFilter_TimeRange)(nil), } file_logs_proto_msgTypes[8].OneofWrappers = []interface{}{ - (*LogQueryResponse_Event)(nil), + (*LogQueryResponse_Batch)(nil), (*LogQueryResponse_Meta)(nil), } type x struct{} @@ -1190,7 +1258,7 @@ func file_logs_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_logs_proto_rawDesc, NumEnums: 0, - NumMessages: 13, + NumMessages: 14, NumExtensions: 0, NumServices: 1, },