From 83023b49fd80c2e7cd22059df483e34d35f7c126 Mon Sep 17 00:00:00 2001 From: Dominik Richter Date: Wed, 24 Jan 2024 23:16:36 -0800 Subject: [PATCH] =?UTF-8?q?=E2=AD=90=20implement=20StoreResults=20for=20re?= =?UTF-8?q?sources=20data=20(#3096)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/cnquery/cmd/plugin.go | 5 +- apps/cnquery/cmd/scan.go | 4 +- explorer/cnquery_explorer.pb.go | 599 ++++++++++++------------ explorer/cnquery_explorer.proto | 1 + explorer/executor/executor.go | 2 +- explorer/scan/local_scanner.go | 30 +- feature_string.go | 5 +- featureflags.go | 6 + llx/llx.pb.go | 306 +++++++----- llx/llx.proto | 6 + llx/runtime.go | 16 +- providers-sdk/v1/testutils/testutils.go | 4 +- providers/coordinator.go | 4 +- providers/mock.go | 2 +- providers/network/provider/provider.go | 1 - providers/recording.go | 81 ++-- providers/runtime.go | 30 +- 17 files changed, 647 insertions(+), 455 deletions(-) diff --git a/apps/cnquery/cmd/plugin.go b/apps/cnquery/cmd/plugin.go index b4d778cbff..cfd2015963 100644 --- a/apps/cnquery/cmd/plugin.go +++ b/apps/cnquery/cmd/plugin.go @@ -165,7 +165,10 @@ func (c *cnqueryPlugin) RunQuery(conf *run.RunQueryConfig, runtime *providers.Ru } defer func() { // prevent the recording from being closed multiple times - connectAssetRuntime.Recording = providers.NullRecording{} + err = connectAssetRuntime.SetRecording(providers.NullRecording{}) + if err != nil { + log.Error().Err(err).Msg("failed to set the recording layer to null") + } sh.Close() }() diff --git a/apps/cnquery/cmd/scan.go b/apps/cnquery/cmd/scan.go index 63a5246ff3..2d513b4d96 100644 --- a/apps/cnquery/cmd/scan.go +++ b/apps/cnquery/cmd/scan.go @@ -308,9 +308,7 @@ func RunScan(config *scanConfig) (*explorer.ReportCollection, error) { if config.runtime.UpstreamConfig != nil { opts = append(opts, scan.WithUpstream(config.runtime.UpstreamConfig)) } - if config.runtime.Recording != nil { - opts = append(opts, scan.WithRecording(config.runtime.Recording)) - } + opts = append(opts, scan.WithRecording(config.runtime.Recording())) scanner := scan.NewLocalScanner(opts...) ctx := cnquery.SetFeatures(context.Background(), config.Features) diff --git a/explorer/cnquery_explorer.pb.go b/explorer/cnquery_explorer.pb.go index a97b7bbad6..172ed6bab6 100644 --- a/explorer/cnquery_explorer.pb.go +++ b/explorer/cnquery_explorer.pb.go @@ -2339,8 +2339,9 @@ type StoreResultsReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AssetMrn string `protobuf:"bytes,1,opt,name=asset_mrn,json=assetMrn,proto3" json:"asset_mrn,omitempty"` - Data map[string]*llx.Result `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + AssetMrn string `protobuf:"bytes,1,opt,name=asset_mrn,json=assetMrn,proto3" json:"asset_mrn,omitempty"` + Data map[string]*llx.Result `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Resources map[string]*llx.ResourceRecording `protobuf:"bytes,4,rep,name=resources,proto3" json:"resources,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *StoreResultsReq) Reset() { @@ -2389,6 +2390,13 @@ func (x *StoreResultsReq) GetData() map[string]*llx.Result { return nil } +func (x *StoreResultsReq) GetResources() map[string]*llx.ResourceRecording { + if x != nil { + return x.Resources + } + return nil +} + // Retrieve data for a given set of entities which was previously stored type EntityDataRequest struct { state protoimpl.MessageState @@ -3388,236 +3396,247 @@ var file_cnquery_explorer_proto_rawDesc = []byte{ 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x4d, 0x71, 0x75, 0x65, 0x72, 0x79, 0x52, 0x0c, 0x61, 0x73, 0x73, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x73, 0x22, 0xbd, 0x01, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, + 0x65, 0x72, 0x73, 0x22, 0xeb, 0x02, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x4d, 0x72, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x4c, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4e, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0x4c, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6c, 0x6c, 0x78, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x4d, 0x0a, 0x11, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x5f, 0x6d, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x4d, 0x72, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x5f, - 0x6d, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x61, 0x74, 0x61, 0x4d, - 0x72, 0x6e, 0x22, 0xa9, 0x02, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, - 0x08, 0x70, 0x61, 0x63, 0x6b, 0x5f, 0x6d, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x70, 0x61, 0x63, 0x6b, 0x4d, 0x72, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x5f, 0x6d, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x4d, 0x72, 0x6e, 0x12, 0x36, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x6f, 0x64, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x6f, 0x64, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x1a, 0x4c, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6c, 0x6c, 0x78, 0x2e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2d, - 0x0a, 0x05, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x72, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xce, 0x05, - 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, - 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x06, 0x62, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x42, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x49, 0x0a, 0x07, - 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, - 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, - 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x46, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, - 0x4c, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, - 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x1a, 0x52, 0x0a, - 0x0b, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x02, 0x38, 0x01, 0x1a, 0x5c, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x6c, 0x6c, 0x78, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x4d, 0x0a, 0x11, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x6d, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x4d, 0x72, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6d, 0x72, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x72, 0x6e, + 0x22, 0xa9, 0x02, 0x0a, 0x06, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x70, + 0x61, 0x63, 0x6b, 0x5f, 0x6d, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, + 0x61, 0x63, 0x6b, 0x4d, 0x72, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x6d, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x4d, 0x72, 0x6e, 0x12, 0x36, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, + 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x44, 0x61, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x6f, 0x64, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x5f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x4c, + 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, + 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6c, 0x6c, 0x78, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2d, 0x0a, 0x05, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6d, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xce, 0x05, 0x0a, 0x10, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x46, 0x0a, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, + 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x49, 0x0a, 0x07, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x6e, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x46, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x4c, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, + 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x1a, 0x52, 0x0a, 0x0b, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6e, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x54, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, + 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x0b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x5b, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, + 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x50, 0x61, 0x63, + 0x6b, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x0b, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x0f, 0x41, 0x73, + 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x10, 0x0a, + 0x03, 0x6d, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x72, 0x6e, 0x12, + 0x40, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x28, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, + 0x65, 0x72, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, + 0x74, 0x61, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x2a, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x44, 0x10, + 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x02, 0x22, 0xdb, 0x01, + 0x0a, 0x13, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x6d, + 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x4d, + 0x72, 0x6e, 0x12, 0x49, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, + 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x75, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x1a, 0x5c, 0x0a, + 0x0b, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, - 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x54, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x74, 0x61, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x64, 0x0a, 0x14, 0x53, + 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6d, 0x72, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x72, 0x6e, + 0x12, 0x2f, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, + 0x74, 0x22, 0x74, 0x0a, 0x20, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x41, 0x73, 0x73, 0x65, 0x74, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x5f, 0x6d, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4d, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x5f, 0x6d, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x4d, 0x72, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x53, 0x79, 0x6e, 0x63, + 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x4e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, + 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, + 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x1a, 0x6e, 0x0a, 0x0c, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, - 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x0b, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x5b, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, - 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x50, - 0x61, 0x63, 0x6b, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, - 0x0a, 0x0b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, - 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x0f, - 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, - 0x10, 0x0a, 0x03, 0x6d, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x72, - 0x6e, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, - 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, - 0x65, 0x6c, 0x74, 0x61, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x2a, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, - 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x02, 0x22, - 0xdb, 0x01, 0x0a, 0x13, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x5f, 0x6d, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x4d, 0x72, 0x6e, 0x12, 0x49, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, - 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4d, 0x75, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x6c, 0x74, - 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x1a, - 0x5c, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, - 0x65, 0x72, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, - 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x64, 0x0a, - 0x14, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6d, - 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, - 0x72, 0x6e, 0x12, 0x2f, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x6c, - 0x69, 0x73, 0x74, 0x22, 0x74, 0x0a, 0x20, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, - 0x7a, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x5f, 0x6d, 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4d, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x4d, 0x72, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x53, 0x79, - 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x4e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, - 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, - 0x69, 0x7a, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x1a, 0x6e, 0x0a, 0x0c, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x48, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, - 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, - 0x69, 0x7a, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x23, 0x0a, 0x0b, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x61, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x01, 0x12, - 0x0e, 0x0a, 0x0a, 0x44, 0x45, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, - 0x0c, 0x0a, 0x08, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, - 0x06, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x55, 0x54, - 0x5f, 0x4f, 0x46, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x10, 0x05, 0x2a, 0x6f, 0x0a, 0x0d, 0x53, - 0x63, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x17, 0x0a, 0x13, - 0x53, 0x43, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x45, 0x49, 0x47, 0x48, 0x54, 0x45, - 0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x4f, 0x52, 0x53, 0x54, 0x10, 0x02, 0x12, 0x0b, - 0x0a, 0x07, 0x41, 0x56, 0x45, 0x52, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, - 0x41, 0x54, 0x41, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x47, - 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x10, 0x05, 0x32, 0xb1, 0x04, 0x0a, - 0x08, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x75, 0x62, 0x12, 0x40, 0x0a, 0x09, 0x53, 0x65, 0x74, - 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x18, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x1a, 0x17, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, - 0x72, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0f, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x63, 0x6b, 0x12, 0x15, + 0x6b, 0x65, 0x79, 0x12, 0x48, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, + 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, + 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x23, 0x0a, 0x0b, 0x49, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x61, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x01, 0x12, 0x0e, 0x0a, + 0x0a, 0x44, 0x45, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0c, 0x0a, + 0x08, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x49, + 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x55, 0x54, 0x5f, 0x4f, + 0x46, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x10, 0x05, 0x2a, 0x6f, 0x0a, 0x0d, 0x53, 0x63, 0x6f, + 0x72, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x43, + 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x45, 0x49, 0x47, 0x48, 0x54, 0x45, 0x44, 0x10, + 0x01, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x4f, 0x52, 0x53, 0x54, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, + 0x41, 0x56, 0x45, 0x52, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x41, 0x54, + 0x41, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x47, 0x4e, 0x4f, + 0x52, 0x45, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x10, 0x05, 0x32, 0xb1, 0x04, 0x0a, 0x08, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x48, 0x75, 0x62, 0x12, 0x40, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x42, 0x75, + 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x18, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, + 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x1a, 0x17, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, - 0x72, 0x2e, 0x4d, 0x72, 0x6e, 0x1a, 0x17, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, - 0x12, 0x45, 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x12, 0x18, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, - 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x1a, 0x17, 0x2e, 0x63, + 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0f, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x63, 0x6b, 0x12, 0x15, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x15, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, - 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x4d, 0x72, 0x6e, 0x1a, 0x18, 0x2e, 0x63, 0x6e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x42, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x50, 0x61, 0x63, 0x6b, 0x12, 0x15, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x4d, 0x72, 0x6e, 0x1a, 0x1b, + 0x4d, 0x72, 0x6e, 0x1a, 0x17, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, + 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x45, + 0x0a, 0x0e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, + 0x12, 0x18, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, + 0x72, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x1a, 0x17, 0x2e, 0x63, 0x6e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x12, 0x15, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, + 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x4d, 0x72, 0x6e, 0x1a, 0x18, 0x2e, 0x63, 0x6e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x42, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x61, 0x63, 0x6b, 0x12, 0x15, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x4d, 0x72, 0x6e, 0x1a, 0x1b, 0x2e, 0x63, + 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x63, 0x6b, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x0a, 0x47, + 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x15, 0x2e, 0x63, 0x6e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x4d, 0x72, 0x6e, + 0x1a, 0x1a, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, + 0x72, 0x65, 0x72, 0x2e, 0x4d, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0x00, 0x12, 0x41, + 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, + 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x63, 0x6b, 0x73, 0x22, + 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x63, 0x6b, + 0x73, 0x12, 0x21, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, + 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x63, 0x6b, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, + 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x55, 0x52, 0x4c, 0x73, 0x22, 0x00, 0x32, 0xaa, + 0x04, 0x0a, 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x64, 0x75, 0x63, 0x74, 0x6f, + 0x72, 0x12, 0x41, 0x0a, 0x06, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x1c, 0x2e, 0x63, 0x6e, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x41, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x17, 0x2e, 0x63, 0x6e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x08, 0x55, 0x6e, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, + 0x12, 0x1c, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, + 0x72, 0x65, 0x72, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x17, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, - 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x63, 0x6b, 0x22, 0x00, 0x12, 0x41, 0x0a, - 0x0a, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x15, 0x2e, 0x63, 0x6e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x4d, - 0x72, 0x6e, 0x1a, 0x1a, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, - 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x4d, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0x00, - 0x12, 0x41, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, - 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x63, 0x6b, - 0x73, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, - 0x63, 0x6b, 0x73, 0x12, 0x21, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, - 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, - 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x55, 0x52, 0x4c, 0x73, 0x22, 0x00, - 0x32, 0xaa, 0x04, 0x0a, 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x64, 0x75, 0x63, - 0x74, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x06, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x12, 0x1c, 0x2e, - 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, - 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x17, 0x2e, 0x63, 0x6e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x08, 0x55, 0x6e, 0x61, 0x73, 0x73, 0x69, - 0x67, 0x6e, 0x12, 0x1c, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, - 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x1a, 0x17, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, - 0x72, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x08, 0x53, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x1a, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, - 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x49, - 0x0a, 0x07, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0x1c, 0x2e, 0x63, 0x6e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, + 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x08, 0x53, 0x65, 0x74, + 0x50, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x1a, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x17, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, + 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x07, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0x1c, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0c, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x21, 0x2e, 0x63, 0x6e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x63, - 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, - 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x63, 0x6e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x11, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, - 0x6e, 0x69, 0x7a, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x6e, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x53, 0x79, - 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, - 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, - 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x42, 0x24, 0x5a, - 0x22, 0x67, 0x6f, 0x2e, 0x6d, 0x6f, 0x6e, 0x64, 0x6f, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x30, 0x2f, 0x65, 0x78, 0x70, 0x6c, 0x6f, - 0x72, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x76, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x64, 0x50, 0x61, 0x63, 0x6b, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x21, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x63, 0x6e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x12, 0x23, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, + 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x11, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, + 0x7a, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x2e, 0x53, 0x79, 0x6e, 0x63, + 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x27, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x65, 0x78, 0x70, 0x6c, 0x6f, + 0x72, 0x65, 0x72, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x65, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x42, 0x24, 0x5a, 0x22, 0x67, + 0x6f, 0x2e, 0x6d, 0x6f, 0x6e, 0x64, 0x6f, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6e, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x30, 0x2f, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, + 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3633,7 +3652,7 @@ func file_cnquery_explorer_proto_rawDescGZIP() []byte { } var file_cnquery_explorer_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_cnquery_explorer_proto_msgTypes = make([]protoimpl.MessageInfo, 57) +var file_cnquery_explorer_proto_msgTypes = make([]protoimpl.MessageInfo, 58) var file_cnquery_explorer_proto_goTypes = []interface{}{ (Action)(0), // 0: cnquery.explorer.Action (ScoringSystem)(0), // 1: cnquery.explorer.ScoringSystem @@ -3688,17 +3707,19 @@ var file_cnquery_explorer_proto_goTypes = []interface{}{ nil, // 50: cnquery.explorer.ExecutionJob.DatapointsEntry nil, // 51: cnquery.explorer.ExecutionQuery.PropertiesEntry nil, // 52: cnquery.explorer.StoreResultsReq.DataEntry - nil, // 53: cnquery.explorer.Report.DataEntry - nil, // 54: cnquery.explorer.ReportCollection.AssetsEntry - nil, // 55: cnquery.explorer.ReportCollection.ReportsEntry - nil, // 56: cnquery.explorer.ReportCollection.ErrorsEntry - nil, // 57: cnquery.explorer.ReportCollection.ResolvedEntry - nil, // 58: cnquery.explorer.BundleMutationDelta.DeltasEntry - nil, // 59: cnquery.explorer.SynchronizeAssetsResp.DetailsEntry - (*llx.CodeBundle)(nil), // 60: cnquery.llx.CodeBundle - (*anypb.Any)(nil), // 61: google.protobuf.Any - (*inventory.Asset)(nil), // 62: cnquery.providers.v1.Asset - (*llx.Result)(nil), // 63: cnquery.llx.Result + nil, // 53: cnquery.explorer.StoreResultsReq.ResourcesEntry + nil, // 54: cnquery.explorer.Report.DataEntry + nil, // 55: cnquery.explorer.ReportCollection.AssetsEntry + nil, // 56: cnquery.explorer.ReportCollection.ReportsEntry + nil, // 57: cnquery.explorer.ReportCollection.ErrorsEntry + nil, // 58: cnquery.explorer.ReportCollection.ResolvedEntry + nil, // 59: cnquery.explorer.BundleMutationDelta.DeltasEntry + nil, // 60: cnquery.explorer.SynchronizeAssetsResp.DetailsEntry + (*llx.CodeBundle)(nil), // 61: cnquery.llx.CodeBundle + (*anypb.Any)(nil), // 62: google.protobuf.Any + (*inventory.Asset)(nil), // 63: cnquery.providers.v1.Asset + (*llx.Result)(nil), // 64: cnquery.llx.Result + (*llx.ResourceRecording)(nil), // 65: cnquery.llx.ResourceRecording } var file_cnquery_explorer_proto_depIdxs = []int32{ 5, // 0: cnquery.explorer.Bundle.packs:type_name -> cnquery.explorer.QueryPack @@ -3736,7 +3757,7 @@ var file_cnquery_explorer_proto_depIdxs = []int32{ 49, // 32: cnquery.explorer.ExecutionJob.queries:type_name -> cnquery.explorer.ExecutionJob.QueriesEntry 50, // 33: cnquery.explorer.ExecutionJob.datapoints:type_name -> cnquery.explorer.ExecutionJob.DatapointsEntry 51, // 34: cnquery.explorer.ExecutionQuery.properties:type_name -> cnquery.explorer.ExecutionQuery.PropertiesEntry - 60, // 35: cnquery.explorer.ExecutionQuery.code:type_name -> cnquery.llx.CodeBundle + 61, // 35: cnquery.explorer.ExecutionQuery.code:type_name -> cnquery.llx.CodeBundle 11, // 36: cnquery.explorer.Mqueries.items:type_name -> cnquery.explorer.Mquery 10, // 37: cnquery.explorer.PropsReq.props:type_name -> cnquery.explorer.Property 11, // 38: cnquery.explorer.ResolveReq.asset_filters:type_name -> cnquery.explorer.Mquery @@ -3744,64 +3765,66 @@ var file_cnquery_explorer_proto_depIdxs = []int32{ 11, // 40: cnquery.explorer.ResolvedPack.filters:type_name -> cnquery.explorer.Mquery 11, // 41: cnquery.explorer.UpdateAssetJobsReq.asset_filters:type_name -> cnquery.explorer.Mquery 52, // 42: cnquery.explorer.StoreResultsReq.data:type_name -> cnquery.explorer.StoreResultsReq.DataEntry - 53, // 43: cnquery.explorer.Report.data:type_name -> cnquery.explorer.Report.DataEntry - 54, // 44: cnquery.explorer.ReportCollection.assets:type_name -> cnquery.explorer.ReportCollection.AssetsEntry - 3, // 45: cnquery.explorer.ReportCollection.bundle:type_name -> cnquery.explorer.Bundle - 55, // 46: cnquery.explorer.ReportCollection.reports:type_name -> cnquery.explorer.ReportCollection.ReportsEntry - 56, // 47: cnquery.explorer.ReportCollection.errors:type_name -> cnquery.explorer.ReportCollection.ErrorsEntry - 57, // 48: cnquery.explorer.ReportCollection.resolved:type_name -> cnquery.explorer.ReportCollection.ResolvedEntry - 61, // 49: cnquery.explorer.ErrorStatus.details:type_name -> google.protobuf.Any - 2, // 50: cnquery.explorer.AssignmentDelta.action:type_name -> cnquery.explorer.AssignmentDelta.Action - 58, // 51: cnquery.explorer.BundleMutationDelta.deltas:type_name -> cnquery.explorer.BundleMutationDelta.DeltasEntry - 62, // 52: cnquery.explorer.SynchronizeAssetsReq.list:type_name -> cnquery.providers.v1.Asset - 59, // 53: cnquery.explorer.SynchronizeAssetsResp.details:type_name -> cnquery.explorer.SynchronizeAssetsResp.DetailsEntry - 11, // 54: cnquery.explorer.QueryPack.AssetFiltersEntry.value:type_name -> cnquery.explorer.Mquery - 11, // 55: cnquery.explorer.Filters.ItemsEntry.value:type_name -> cnquery.explorer.Mquery - 21, // 56: cnquery.explorer.ExecutionJob.QueriesEntry.value:type_name -> cnquery.explorer.ExecutionQuery - 20, // 57: cnquery.explorer.ExecutionJob.DatapointsEntry.value:type_name -> cnquery.explorer.DataQueryInfo - 63, // 58: cnquery.explorer.StoreResultsReq.DataEntry.value:type_name -> cnquery.llx.Result - 63, // 59: cnquery.explorer.Report.DataEntry.value:type_name -> cnquery.llx.Result - 36, // 60: cnquery.explorer.ReportCollection.AssetsEntry.value:type_name -> cnquery.explorer.Asset - 35, // 61: cnquery.explorer.ReportCollection.ReportsEntry.value:type_name -> cnquery.explorer.Report - 38, // 62: cnquery.explorer.ReportCollection.ErrorsEntry.value:type_name -> cnquery.explorer.ErrorStatus - 31, // 63: cnquery.explorer.ReportCollection.ResolvedEntry.value:type_name -> cnquery.explorer.ResolvedPack - 39, // 64: cnquery.explorer.BundleMutationDelta.DeltasEntry.value:type_name -> cnquery.explorer.AssignmentDelta - 42, // 65: cnquery.explorer.SynchronizeAssetsResp.DetailsEntry.value:type_name -> cnquery.explorer.SynchronizeAssetsRespAssetDetail - 3, // 66: cnquery.explorer.QueryHub.SetBundle:input_type -> cnquery.explorer.Bundle - 23, // 67: cnquery.explorer.QueryHub.DeleteQueryPack:input_type -> cnquery.explorer.Mrn - 3, // 68: cnquery.explorer.QueryHub.ValidateBundle:input_type -> cnquery.explorer.Bundle - 23, // 69: cnquery.explorer.QueryHub.GetBundle:input_type -> cnquery.explorer.Mrn - 23, // 70: cnquery.explorer.QueryHub.GetQueryPack:input_type -> cnquery.explorer.Mrn - 23, // 71: cnquery.explorer.QueryHub.GetFilters:input_type -> cnquery.explorer.Mrn - 25, // 72: cnquery.explorer.QueryHub.List:input_type -> cnquery.explorer.ListReq - 26, // 73: cnquery.explorer.QueryHub.DefaultPacks:input_type -> cnquery.explorer.DefaultPacksReq - 28, // 74: cnquery.explorer.QueryConductor.Assign:input_type -> cnquery.explorer.Assignment - 28, // 75: cnquery.explorer.QueryConductor.Unassign:input_type -> cnquery.explorer.Assignment - 29, // 76: cnquery.explorer.QueryConductor.SetProps:input_type -> cnquery.explorer.PropsReq - 30, // 77: cnquery.explorer.QueryConductor.Resolve:input_type -> cnquery.explorer.ResolveReq - 33, // 78: cnquery.explorer.QueryConductor.StoreResults:input_type -> cnquery.explorer.StoreResultsReq - 34, // 79: cnquery.explorer.QueryConductor.GetReport:input_type -> cnquery.explorer.EntityDataRequest - 41, // 80: cnquery.explorer.QueryConductor.SynchronizeAssets:input_type -> cnquery.explorer.SynchronizeAssetsReq - 22, // 81: cnquery.explorer.QueryHub.SetBundle:output_type -> cnquery.explorer.Empty - 22, // 82: cnquery.explorer.QueryHub.DeleteQueryPack:output_type -> cnquery.explorer.Empty - 22, // 83: cnquery.explorer.QueryHub.ValidateBundle:output_type -> cnquery.explorer.Empty - 3, // 84: cnquery.explorer.QueryHub.GetBundle:output_type -> cnquery.explorer.Bundle - 5, // 85: cnquery.explorer.QueryHub.GetQueryPack:output_type -> cnquery.explorer.QueryPack - 24, // 86: cnquery.explorer.QueryHub.GetFilters:output_type -> cnquery.explorer.Mqueries - 8, // 87: cnquery.explorer.QueryHub.List:output_type -> cnquery.explorer.QueryPacks - 27, // 88: cnquery.explorer.QueryHub.DefaultPacks:output_type -> cnquery.explorer.URLs - 22, // 89: cnquery.explorer.QueryConductor.Assign:output_type -> cnquery.explorer.Empty - 22, // 90: cnquery.explorer.QueryConductor.Unassign:output_type -> cnquery.explorer.Empty - 22, // 91: cnquery.explorer.QueryConductor.SetProps:output_type -> cnquery.explorer.Empty - 31, // 92: cnquery.explorer.QueryConductor.Resolve:output_type -> cnquery.explorer.ResolvedPack - 22, // 93: cnquery.explorer.QueryConductor.StoreResults:output_type -> cnquery.explorer.Empty - 35, // 94: cnquery.explorer.QueryConductor.GetReport:output_type -> cnquery.explorer.Report - 43, // 95: cnquery.explorer.QueryConductor.SynchronizeAssets:output_type -> cnquery.explorer.SynchronizeAssetsResp - 81, // [81:96] is the sub-list for method output_type - 66, // [66:81] is the sub-list for method input_type - 66, // [66:66] is the sub-list for extension type_name - 66, // [66:66] is the sub-list for extension extendee - 0, // [0:66] is the sub-list for field type_name + 53, // 43: cnquery.explorer.StoreResultsReq.resources:type_name -> cnquery.explorer.StoreResultsReq.ResourcesEntry + 54, // 44: cnquery.explorer.Report.data:type_name -> cnquery.explorer.Report.DataEntry + 55, // 45: cnquery.explorer.ReportCollection.assets:type_name -> cnquery.explorer.ReportCollection.AssetsEntry + 3, // 46: cnquery.explorer.ReportCollection.bundle:type_name -> cnquery.explorer.Bundle + 56, // 47: cnquery.explorer.ReportCollection.reports:type_name -> cnquery.explorer.ReportCollection.ReportsEntry + 57, // 48: cnquery.explorer.ReportCollection.errors:type_name -> cnquery.explorer.ReportCollection.ErrorsEntry + 58, // 49: cnquery.explorer.ReportCollection.resolved:type_name -> cnquery.explorer.ReportCollection.ResolvedEntry + 62, // 50: cnquery.explorer.ErrorStatus.details:type_name -> google.protobuf.Any + 2, // 51: cnquery.explorer.AssignmentDelta.action:type_name -> cnquery.explorer.AssignmentDelta.Action + 59, // 52: cnquery.explorer.BundleMutationDelta.deltas:type_name -> cnquery.explorer.BundleMutationDelta.DeltasEntry + 63, // 53: cnquery.explorer.SynchronizeAssetsReq.list:type_name -> cnquery.providers.v1.Asset + 60, // 54: cnquery.explorer.SynchronizeAssetsResp.details:type_name -> cnquery.explorer.SynchronizeAssetsResp.DetailsEntry + 11, // 55: cnquery.explorer.QueryPack.AssetFiltersEntry.value:type_name -> cnquery.explorer.Mquery + 11, // 56: cnquery.explorer.Filters.ItemsEntry.value:type_name -> cnquery.explorer.Mquery + 21, // 57: cnquery.explorer.ExecutionJob.QueriesEntry.value:type_name -> cnquery.explorer.ExecutionQuery + 20, // 58: cnquery.explorer.ExecutionJob.DatapointsEntry.value:type_name -> cnquery.explorer.DataQueryInfo + 64, // 59: cnquery.explorer.StoreResultsReq.DataEntry.value:type_name -> cnquery.llx.Result + 65, // 60: cnquery.explorer.StoreResultsReq.ResourcesEntry.value:type_name -> cnquery.llx.ResourceRecording + 64, // 61: cnquery.explorer.Report.DataEntry.value:type_name -> cnquery.llx.Result + 36, // 62: cnquery.explorer.ReportCollection.AssetsEntry.value:type_name -> cnquery.explorer.Asset + 35, // 63: cnquery.explorer.ReportCollection.ReportsEntry.value:type_name -> cnquery.explorer.Report + 38, // 64: cnquery.explorer.ReportCollection.ErrorsEntry.value:type_name -> cnquery.explorer.ErrorStatus + 31, // 65: cnquery.explorer.ReportCollection.ResolvedEntry.value:type_name -> cnquery.explorer.ResolvedPack + 39, // 66: cnquery.explorer.BundleMutationDelta.DeltasEntry.value:type_name -> cnquery.explorer.AssignmentDelta + 42, // 67: cnquery.explorer.SynchronizeAssetsResp.DetailsEntry.value:type_name -> cnquery.explorer.SynchronizeAssetsRespAssetDetail + 3, // 68: cnquery.explorer.QueryHub.SetBundle:input_type -> cnquery.explorer.Bundle + 23, // 69: cnquery.explorer.QueryHub.DeleteQueryPack:input_type -> cnquery.explorer.Mrn + 3, // 70: cnquery.explorer.QueryHub.ValidateBundle:input_type -> cnquery.explorer.Bundle + 23, // 71: cnquery.explorer.QueryHub.GetBundle:input_type -> cnquery.explorer.Mrn + 23, // 72: cnquery.explorer.QueryHub.GetQueryPack:input_type -> cnquery.explorer.Mrn + 23, // 73: cnquery.explorer.QueryHub.GetFilters:input_type -> cnquery.explorer.Mrn + 25, // 74: cnquery.explorer.QueryHub.List:input_type -> cnquery.explorer.ListReq + 26, // 75: cnquery.explorer.QueryHub.DefaultPacks:input_type -> cnquery.explorer.DefaultPacksReq + 28, // 76: cnquery.explorer.QueryConductor.Assign:input_type -> cnquery.explorer.Assignment + 28, // 77: cnquery.explorer.QueryConductor.Unassign:input_type -> cnquery.explorer.Assignment + 29, // 78: cnquery.explorer.QueryConductor.SetProps:input_type -> cnquery.explorer.PropsReq + 30, // 79: cnquery.explorer.QueryConductor.Resolve:input_type -> cnquery.explorer.ResolveReq + 33, // 80: cnquery.explorer.QueryConductor.StoreResults:input_type -> cnquery.explorer.StoreResultsReq + 34, // 81: cnquery.explorer.QueryConductor.GetReport:input_type -> cnquery.explorer.EntityDataRequest + 41, // 82: cnquery.explorer.QueryConductor.SynchronizeAssets:input_type -> cnquery.explorer.SynchronizeAssetsReq + 22, // 83: cnquery.explorer.QueryHub.SetBundle:output_type -> cnquery.explorer.Empty + 22, // 84: cnquery.explorer.QueryHub.DeleteQueryPack:output_type -> cnquery.explorer.Empty + 22, // 85: cnquery.explorer.QueryHub.ValidateBundle:output_type -> cnquery.explorer.Empty + 3, // 86: cnquery.explorer.QueryHub.GetBundle:output_type -> cnquery.explorer.Bundle + 5, // 87: cnquery.explorer.QueryHub.GetQueryPack:output_type -> cnquery.explorer.QueryPack + 24, // 88: cnquery.explorer.QueryHub.GetFilters:output_type -> cnquery.explorer.Mqueries + 8, // 89: cnquery.explorer.QueryHub.List:output_type -> cnquery.explorer.QueryPacks + 27, // 90: cnquery.explorer.QueryHub.DefaultPacks:output_type -> cnquery.explorer.URLs + 22, // 91: cnquery.explorer.QueryConductor.Assign:output_type -> cnquery.explorer.Empty + 22, // 92: cnquery.explorer.QueryConductor.Unassign:output_type -> cnquery.explorer.Empty + 22, // 93: cnquery.explorer.QueryConductor.SetProps:output_type -> cnquery.explorer.Empty + 31, // 94: cnquery.explorer.QueryConductor.Resolve:output_type -> cnquery.explorer.ResolvedPack + 22, // 95: cnquery.explorer.QueryConductor.StoreResults:output_type -> cnquery.explorer.Empty + 35, // 96: cnquery.explorer.QueryConductor.GetReport:output_type -> cnquery.explorer.Report + 43, // 97: cnquery.explorer.QueryConductor.SynchronizeAssets:output_type -> cnquery.explorer.SynchronizeAssetsResp + 83, // [83:98] is the sub-list for method output_type + 68, // [68:83] is the sub-list for method input_type + 68, // [68:68] is the sub-list for extension type_name + 68, // [68:68] is the sub-list for extension extendee + 0, // [0:68] is the sub-list for field type_name } func init() { file_cnquery_explorer_proto_init() } @@ -4321,7 +4344,7 @@ func file_cnquery_explorer_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cnquery_explorer_proto_rawDesc, NumEnums: 3, - NumMessages: 57, + NumMessages: 58, NumExtensions: 0, NumServices: 2, }, diff --git a/explorer/cnquery_explorer.proto b/explorer/cnquery_explorer.proto index 2e3dae9e27..541af5992a 100644 --- a/explorer/cnquery_explorer.proto +++ b/explorer/cnquery_explorer.proto @@ -356,6 +356,7 @@ message UpdateAssetJobsReq { message StoreResultsReq { string asset_mrn = 1; map data = 3; + map resources = 4; } // Retrieve data for a given set of entities which was previously stored diff --git a/explorer/executor/executor.go b/explorer/executor/executor.go index c1c33b9ef7..c016010d32 100644 --- a/explorer/executor/executor.go +++ b/explorer/executor/executor.go @@ -258,7 +258,7 @@ func (e *instance) snapshotResults() map[string]*llx.Result { return results } -func (e *instance) StoreData() error { +func (e *instance) StoreQueryData() error { if e.collector == nil { return errors.New("cannot store data, no collector provided") } diff --git a/explorer/scan/local_scanner.go b/explorer/scan/local_scanner.go index aad1bdc69f..d46d97f5d2 100644 --- a/explorer/scan/local_scanner.go +++ b/explorer/scan/local_scanner.go @@ -47,7 +47,7 @@ type LocalScanner struct { ctx context.Context fetcher *fetcher upstream *upstream.UpstreamConfig - recording providers.Recording + recording llx.Recording } type ScannerOption func(*LocalScanner) @@ -58,7 +58,7 @@ func WithUpstream(u *upstream.UpstreamConfig) func(s *LocalScanner) { } } -func WithRecording(r providers.Recording) func(s *LocalScanner) { +func WithRecording(r llx.Recording) func(s *LocalScanner) { return func(s *LocalScanner) { s.recording = r } @@ -267,14 +267,18 @@ func (s *LocalScanner) distributeJob(job *Job, ctx context.Context, upstream *up return nil, false, err } } - runtime.SetRecording(candidate.runtime.Recording) + err = runtime.SetRecording(candidate.runtime.Recording()) + if err != nil { + log.Error().Err(err).Msg("unable to set recording for asset (pre-connect)") + continue + } + err = runtime.Connect(&plugin.ConnectReq{ Features: config.Features, Asset: candidate.asset, Upstream: upstream, }) candidate.asset = runtime.Provider.Connection.Asset // to ensure we get all the information the connect call gave us - if err != nil { log.Error().Err(err).Str("asset", candidate.asset.Name).Msg("unable to connect to asset") continue @@ -692,11 +696,27 @@ func (s *localAssetScanner) runQueryPack() (*AssetReport, error) { return nil, err } - err = e.StoreData() + err = e.StoreQueryData() if err != nil { return nil, err } + if cnquery.GetFeatures(s.job.Ctx).IsActive(cnquery.StoreResourcesData) { + recording := s.Runtime.Recording() + data, ok := recording.GetAssetData(s.job.Asset.Mrn) + if !ok { + log.Debug().Msg("not storing resource data for this asset, nothing available") + } else { + _, err = conductor.StoreResults(context.Background(), &explorer.StoreResultsReq{ + AssetMrn: s.job.Asset.Mrn, + Resources: data, + }) + if err != nil { + return nil, err + } + } + } + ar := &AssetReport{ Mrn: s.job.Asset.Mrn, Bundle: assetBundle, diff --git a/feature_string.go b/feature_string.go index f89b753ce2..1cefedea30 100644 --- a/feature_string.go +++ b/feature_string.go @@ -14,11 +14,12 @@ func _() { _ = x[K8sNodeDiscovery-4] _ = x[MQLAssetContext-5] _ = x[ErrorsAsFailures-6] + _ = x[StoreResourcesData-7] } -const _Feature_name = "MassQueriesPiperCodeBoolAssertionsK8sNodeDiscoveryMQLAssetContextErrorsAsFailures" +const _Feature_name = "MassQueriesPiperCodeBoolAssertionsK8sNodeDiscoveryMQLAssetContextErrorsAsFailuresStoreResourcesData" -var _Feature_index = [...]uint8{0, 11, 20, 34, 50, 65, 81} +var _Feature_index = [...]uint8{0, 11, 20, 34, 50, 65, 81, 99} func (i Feature) String() string { i -= 1 diff --git a/featureflags.go b/featureflags.go index d07186ec04..5a46da9130 100644 --- a/featureflags.go +++ b/featureflags.go @@ -75,6 +75,12 @@ const ( // start: v8.x // end: v9.0 ErrorsAsFailures + + // StoreResourcesData feature flag + // desc: Stores recording-like data with upstream + // start: v10.x + // end: tbd (candidate: v11.0) + StoreResourcesData ) // FeaturesValue is a map from feature name to feature flag diff --git a/llx/llx.pb.go b/llx/llx.pb.go index 8d3d14b9a8..3434808649 100644 --- a/llx/llx.pb.go +++ b/llx/llx.pb.go @@ -928,6 +928,69 @@ func (x *Result) GetCodeId() string { return "" } +type ResourceRecording struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Resource string `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Fields map[string]*Result `protobuf:"bytes,3,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ResourceRecording) Reset() { + *x = ResourceRecording{} + if protoimpl.UnsafeEnabled { + mi := &file_llx_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceRecording) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceRecording) ProtoMessage() {} + +func (x *ResourceRecording) ProtoReflect() protoreflect.Message { + mi := &file_llx_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 ResourceRecording.ProtoReflect.Descriptor instead. +func (*ResourceRecording) Descriptor() ([]byte, []int) { + return file_llx_proto_rawDescGZIP(), []int{11} +} + +func (x *ResourceRecording) GetResource() string { + if x != nil { + return x.Resource + } + return "" +} + +func (x *ResourceRecording) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ResourceRecording) GetFields() map[string]*Result { + if x != nil { + return x.Fields + } + return nil +} + type Rating struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -944,7 +1007,7 @@ type Rating struct { func (x *Rating) Reset() { *x = Rating{} if protoimpl.UnsafeEnabled { - mi := &file_llx_proto_msgTypes[11] + mi := &file_llx_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -957,7 +1020,7 @@ func (x *Rating) String() string { func (*Rating) ProtoMessage() {} func (x *Rating) ProtoReflect() protoreflect.Message { - mi := &file_llx_proto_msgTypes[11] + mi := &file_llx_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -970,7 +1033,7 @@ func (x *Rating) ProtoReflect() protoreflect.Message { // Deprecated: Use Rating.ProtoReflect.Descriptor instead. func (*Rating) Descriptor() ([]byte, []int) { - return file_llx_proto_rawDescGZIP(), []int{11} + return file_llx_proto_rawDescGZIP(), []int{12} } func (x *Rating) GetId() string { @@ -1036,7 +1099,7 @@ type AssessmentItem struct { func (x *AssessmentItem) Reset() { *x = AssessmentItem{} if protoimpl.UnsafeEnabled { - mi := &file_llx_proto_msgTypes[12] + mi := &file_llx_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1049,7 +1112,7 @@ func (x *AssessmentItem) String() string { func (*AssessmentItem) ProtoMessage() {} func (x *AssessmentItem) ProtoReflect() protoreflect.Message { - mi := &file_llx_proto_msgTypes[12] + mi := &file_llx_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1062,7 +1125,7 @@ func (x *AssessmentItem) ProtoReflect() protoreflect.Message { // Deprecated: Use AssessmentItem.ProtoReflect.Descriptor instead. func (*AssessmentItem) Descriptor() ([]byte, []int) { - return file_llx_proto_rawDescGZIP(), []int{12} + return file_llx_proto_rawDescGZIP(), []int{13} } func (x *AssessmentItem) GetSuccess() bool { @@ -1156,7 +1219,7 @@ type Assessment struct { func (x *Assessment) Reset() { *x = Assessment{} if protoimpl.UnsafeEnabled { - mi := &file_llx_proto_msgTypes[13] + mi := &file_llx_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1169,7 +1232,7 @@ func (x *Assessment) String() string { func (*Assessment) ProtoMessage() {} func (x *Assessment) ProtoReflect() protoreflect.Message { - mi := &file_llx_proto_msgTypes[13] + mi := &file_llx_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1182,7 +1245,7 @@ func (x *Assessment) ProtoReflect() protoreflect.Message { // Deprecated: Use Assessment.ProtoReflect.Descriptor instead. func (*Assessment) Descriptor() ([]byte, []int) { - return file_llx_proto_rawDescGZIP(), []int{13} + return file_llx_proto_rawDescGZIP(), []int{14} } func (x *Assessment) GetChecksum() string { @@ -1402,52 +1465,65 @@ var file_llx_proto_rawDesc = []byte{ 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, - 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x8a, 0x01, 0x0a, 0x06, 0x52, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x65, 0x73, - 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x65, 0x6e, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x72, 0x65, 0x6e, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x65, 0x22, 0xfb, 0x02, 0x0a, 0x0e, 0x41, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, - 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, - 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x65, - 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x72, - 0x65, 0x66, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x32, 0x0a, - 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6c, 0x6c, 0x78, 0x2e, 0x50, 0x72, - 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x52, 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6c, 0x6c, 0x78, 0x2e, - 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x52, 0x06, 0x61, 0x63, 0x74, 0x75, 0x61, - 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x61, 0x73, 0x73, 0x65, - 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, - 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x15, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6c, 0x6c, 0x78, - 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x9c, 0x01, 0x0a, 0x0a, 0x41, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x73, - 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x61, 0x73, 0x73, 0x65, - 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, - 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x6c, 0x6c, 0x78, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, - 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, - 0x1f, 0x5a, 0x1d, 0x67, 0x6f, 0x2e, 0x6d, 0x6f, 0x6e, 0x64, 0x6f, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x30, 0x2f, 0x6c, 0x6c, 0x78, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0xd3, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x2e, 0x6c, 0x6c, 0x78, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x4e, 0x0a, 0x0b, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6e, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6c, 0x6c, 0x78, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8a, 0x01, 0x0a, 0x06, + 0x52, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x72, 0x65, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, + 0x72, 0x65, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x22, 0xfb, 0x02, 0x0a, 0x0e, 0x41, 0x73, 0x73, + 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, + 0x72, 0x65, 0x66, 0x12, 0x32, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x6c, 0x6c, 0x78, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x52, 0x08, 0x65, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x75, 0x61, + 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x2e, 0x6c, 0x6c, 0x78, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x52, + 0x06, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x69, + 0x73, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2e, 0x6c, 0x6c, 0x78, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9c, 0x01, 0x0a, 0x0a, 0x41, 0x73, 0x73, 0x65, 0x73, + 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x69, + 0x73, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, + 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6c, 0x6c, 0x78, 0x2e, 0x41, 0x73, + 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x1f, 0x5a, 0x1d, 0x67, 0x6f, 0x2e, 0x6d, 0x6f, 0x6e, 0x64, + 0x6f, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x76, + 0x31, 0x30, 0x2f, 0x6c, 0x6c, 0x78, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1463,71 +1539,75 @@ func file_llx_proto_rawDescGZIP() []byte { } var file_llx_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_llx_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_llx_proto_msgTypes = make([]protoimpl.MessageInfo, 26) var file_llx_proto_goTypes = []interface{}{ - (Chunk_Call)(0), // 0: cnquery.llx.Chunk.Call - (*Primitive)(nil), // 1: cnquery.llx.Primitive - (*Function)(nil), // 2: cnquery.llx.Function - (*Chunk)(nil), // 3: cnquery.llx.Chunk - (*AssertionMessage)(nil), // 4: cnquery.llx.AssertionMessage - (*CodeV1)(nil), // 5: cnquery.llx.CodeV1 - (*Block)(nil), // 6: cnquery.llx.Block - (*CodeV2)(nil), // 7: cnquery.llx.CodeV2 - (*Labels)(nil), // 8: cnquery.llx.Labels - (*Documentation)(nil), // 9: cnquery.llx.Documentation - (*CodeBundle)(nil), // 10: cnquery.llx.CodeBundle - (*Result)(nil), // 11: cnquery.llx.Result - (*Rating)(nil), // 12: cnquery.llx.Rating - (*AssessmentItem)(nil), // 13: cnquery.llx.AssessmentItem - (*Assessment)(nil), // 14: cnquery.llx.Assessment - nil, // 15: cnquery.llx.Primitive.MapEntry - nil, // 16: cnquery.llx.CodeV1.ChecksumsEntry - nil, // 17: cnquery.llx.CodeV1.AssertionsEntry - nil, // 18: cnquery.llx.CodeV2.ChecksumsEntry - nil, // 19: cnquery.llx.CodeV2.AssertionsEntry - nil, // 20: cnquery.llx.Labels.LabelsEntry - nil, // 21: cnquery.llx.CodeBundle.PropsEntry - nil, // 22: cnquery.llx.CodeBundle.AssertionsEntry - nil, // 23: cnquery.llx.CodeBundle.AutoExpandEntry - nil, // 24: cnquery.llx.CodeBundle.VarsEntry + (Chunk_Call)(0), // 0: cnquery.llx.Chunk.Call + (*Primitive)(nil), // 1: cnquery.llx.Primitive + (*Function)(nil), // 2: cnquery.llx.Function + (*Chunk)(nil), // 3: cnquery.llx.Chunk + (*AssertionMessage)(nil), // 4: cnquery.llx.AssertionMessage + (*CodeV1)(nil), // 5: cnquery.llx.CodeV1 + (*Block)(nil), // 6: cnquery.llx.Block + (*CodeV2)(nil), // 7: cnquery.llx.CodeV2 + (*Labels)(nil), // 8: cnquery.llx.Labels + (*Documentation)(nil), // 9: cnquery.llx.Documentation + (*CodeBundle)(nil), // 10: cnquery.llx.CodeBundle + (*Result)(nil), // 11: cnquery.llx.Result + (*ResourceRecording)(nil), // 12: cnquery.llx.ResourceRecording + (*Rating)(nil), // 13: cnquery.llx.Rating + (*AssessmentItem)(nil), // 14: cnquery.llx.AssessmentItem + (*Assessment)(nil), // 15: cnquery.llx.Assessment + nil, // 16: cnquery.llx.Primitive.MapEntry + nil, // 17: cnquery.llx.CodeV1.ChecksumsEntry + nil, // 18: cnquery.llx.CodeV1.AssertionsEntry + nil, // 19: cnquery.llx.CodeV2.ChecksumsEntry + nil, // 20: cnquery.llx.CodeV2.AssertionsEntry + nil, // 21: cnquery.llx.Labels.LabelsEntry + nil, // 22: cnquery.llx.CodeBundle.PropsEntry + nil, // 23: cnquery.llx.CodeBundle.AssertionsEntry + nil, // 24: cnquery.llx.CodeBundle.AutoExpandEntry + nil, // 25: cnquery.llx.CodeBundle.VarsEntry + nil, // 26: cnquery.llx.ResourceRecording.FieldsEntry } var file_llx_proto_depIdxs = []int32{ 1, // 0: cnquery.llx.Primitive.array:type_name -> cnquery.llx.Primitive - 15, // 1: cnquery.llx.Primitive.map:type_name -> cnquery.llx.Primitive.MapEntry + 16, // 1: cnquery.llx.Primitive.map:type_name -> cnquery.llx.Primitive.MapEntry 1, // 2: cnquery.llx.Function.args:type_name -> cnquery.llx.Primitive 0, // 3: cnquery.llx.Chunk.call:type_name -> cnquery.llx.Chunk.Call 1, // 4: cnquery.llx.Chunk.primitive:type_name -> cnquery.llx.Primitive 2, // 5: cnquery.llx.Chunk.function:type_name -> cnquery.llx.Function 3, // 6: cnquery.llx.CodeV1.code:type_name -> cnquery.llx.Chunk - 16, // 7: cnquery.llx.CodeV1.checksums:type_name -> cnquery.llx.CodeV1.ChecksumsEntry + 17, // 7: cnquery.llx.CodeV1.checksums:type_name -> cnquery.llx.CodeV1.ChecksumsEntry 5, // 8: cnquery.llx.CodeV1.functions:type_name -> cnquery.llx.CodeV1 - 17, // 9: cnquery.llx.CodeV1.assertions:type_name -> cnquery.llx.CodeV1.AssertionsEntry + 18, // 9: cnquery.llx.CodeV1.assertions:type_name -> cnquery.llx.CodeV1.AssertionsEntry 3, // 10: cnquery.llx.Block.chunks:type_name -> cnquery.llx.Chunk 6, // 11: cnquery.llx.CodeV2.blocks:type_name -> cnquery.llx.Block - 18, // 12: cnquery.llx.CodeV2.checksums:type_name -> cnquery.llx.CodeV2.ChecksumsEntry - 19, // 13: cnquery.llx.CodeV2.assertions:type_name -> cnquery.llx.CodeV2.AssertionsEntry - 20, // 14: cnquery.llx.Labels.labels:type_name -> cnquery.llx.Labels.LabelsEntry + 19, // 12: cnquery.llx.CodeV2.checksums:type_name -> cnquery.llx.CodeV2.ChecksumsEntry + 20, // 13: cnquery.llx.CodeV2.assertions:type_name -> cnquery.llx.CodeV2.AssertionsEntry + 21, // 14: cnquery.llx.Labels.labels:type_name -> cnquery.llx.Labels.LabelsEntry 7, // 15: cnquery.llx.CodeBundle.code_v2:type_name -> cnquery.llx.CodeV2 9, // 16: cnquery.llx.CodeBundle.suggestions:type_name -> cnquery.llx.Documentation 8, // 17: cnquery.llx.CodeBundle.labels:type_name -> cnquery.llx.Labels - 21, // 18: cnquery.llx.CodeBundle.props:type_name -> cnquery.llx.CodeBundle.PropsEntry - 22, // 19: cnquery.llx.CodeBundle.assertions:type_name -> cnquery.llx.CodeBundle.AssertionsEntry - 23, // 20: cnquery.llx.CodeBundle.auto_expand:type_name -> cnquery.llx.CodeBundle.AutoExpandEntry - 24, // 21: cnquery.llx.CodeBundle.vars:type_name -> cnquery.llx.CodeBundle.VarsEntry + 22, // 18: cnquery.llx.CodeBundle.props:type_name -> cnquery.llx.CodeBundle.PropsEntry + 23, // 19: cnquery.llx.CodeBundle.assertions:type_name -> cnquery.llx.CodeBundle.AssertionsEntry + 24, // 20: cnquery.llx.CodeBundle.auto_expand:type_name -> cnquery.llx.CodeBundle.AutoExpandEntry + 25, // 21: cnquery.llx.CodeBundle.vars:type_name -> cnquery.llx.CodeBundle.VarsEntry 1, // 22: cnquery.llx.Result.data:type_name -> cnquery.llx.Primitive - 1, // 23: cnquery.llx.AssessmentItem.expected:type_name -> cnquery.llx.Primitive - 1, // 24: cnquery.llx.AssessmentItem.actual:type_name -> cnquery.llx.Primitive - 1, // 25: cnquery.llx.AssessmentItem.data:type_name -> cnquery.llx.Primitive - 13, // 26: cnquery.llx.Assessment.results:type_name -> cnquery.llx.AssessmentItem - 1, // 27: cnquery.llx.Primitive.MapEntry.value:type_name -> cnquery.llx.Primitive - 4, // 28: cnquery.llx.CodeV1.AssertionsEntry.value:type_name -> cnquery.llx.AssertionMessage - 4, // 29: cnquery.llx.CodeV2.AssertionsEntry.value:type_name -> cnquery.llx.AssertionMessage - 4, // 30: cnquery.llx.CodeBundle.AssertionsEntry.value:type_name -> cnquery.llx.AssertionMessage - 31, // [31:31] is the sub-list for method output_type - 31, // [31:31] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 31, // [31:31] is the sub-list for extension extendee - 0, // [0:31] is the sub-list for field type_name + 26, // 23: cnquery.llx.ResourceRecording.fields:type_name -> cnquery.llx.ResourceRecording.FieldsEntry + 1, // 24: cnquery.llx.AssessmentItem.expected:type_name -> cnquery.llx.Primitive + 1, // 25: cnquery.llx.AssessmentItem.actual:type_name -> cnquery.llx.Primitive + 1, // 26: cnquery.llx.AssessmentItem.data:type_name -> cnquery.llx.Primitive + 14, // 27: cnquery.llx.Assessment.results:type_name -> cnquery.llx.AssessmentItem + 1, // 28: cnquery.llx.Primitive.MapEntry.value:type_name -> cnquery.llx.Primitive + 4, // 29: cnquery.llx.CodeV1.AssertionsEntry.value:type_name -> cnquery.llx.AssertionMessage + 4, // 30: cnquery.llx.CodeV2.AssertionsEntry.value:type_name -> cnquery.llx.AssertionMessage + 4, // 31: cnquery.llx.CodeBundle.AssertionsEntry.value:type_name -> cnquery.llx.AssertionMessage + 11, // 32: cnquery.llx.ResourceRecording.FieldsEntry.value:type_name -> cnquery.llx.Result + 33, // [33:33] is the sub-list for method output_type + 33, // [33:33] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_llx_proto_init() } @@ -1669,7 +1749,7 @@ func file_llx_proto_init() { } } file_llx_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Rating); i { + switch v := v.(*ResourceRecording); i { case 0: return &v.state case 1: @@ -1681,7 +1761,7 @@ func file_llx_proto_init() { } } file_llx_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AssessmentItem); i { + switch v := v.(*Rating); i { case 0: return &v.state case 1: @@ -1693,6 +1773,18 @@ func file_llx_proto_init() { } } file_llx_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AssessmentItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_llx_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Assessment); i { case 0: return &v.state @@ -1711,7 +1803,7 @@ func file_llx_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_llx_proto_rawDesc, NumEnums: 1, - NumMessages: 24, + NumMessages: 26, NumExtensions: 0, NumServices: 0, }, diff --git a/llx/llx.proto b/llx/llx.proto index d421d8b84f..8139e10902 100644 --- a/llx/llx.proto +++ b/llx/llx.proto @@ -119,6 +119,12 @@ message Result { string code_id = 3; } +message ResourceRecording { + string resource = 1; + string id = 2; + map fields = 3; +} + message Rating { string id = 1; // can either be the collection or the query string endpoint = 2; diff --git a/llx/runtime.go b/llx/runtime.go index 3d27bc11bd..3d35cda328 100644 --- a/llx/runtime.go +++ b/llx/runtime.go @@ -3,7 +3,10 @@ package llx -import "go.mondoo.com/cnquery/v10/providers-sdk/v1/resources" +import ( + "go.mondoo.com/cnquery/v10/providers-sdk/v1/inventory" + "go.mondoo.com/cnquery/v10/providers-sdk/v1/resources" +) type Runtime interface { AssetMRN() string @@ -13,6 +16,8 @@ type Runtime interface { WatchAndUpdate(resource Resource, field string, watcherUID string, callback func(res interface{}, err error)) error Schema() Schema Close() + Recording() Recording + SetRecording(recording Recording) error } type Schema interface { @@ -20,3 +25,12 @@ type Schema interface { LookupField(resource string, field string) (*resources.ResourceInfo, *resources.Field) AllResources() map[string]*resources.ResourceInfo } + +type Recording interface { + Save() error + EnsureAsset(asset *inventory.Asset, provider string, connectionID uint32, conf *inventory.Config) + AddData(connectionID uint32, resource string, id string, field string, data *RawData) + GetData(connectionID uint32, resource string, id string, field string) (*RawData, bool) + GetResource(connectionID uint32, resource string, id string) (map[string]*RawData, bool) + GetAssetData(assetMrn string) (map[string]*ResourceRecording, bool) +} diff --git a/providers-sdk/v1/testutils/testutils.go b/providers-sdk/v1/testutils/testutils.go index f820ff8e7b..1ec57740d4 100644 --- a/providers-sdk/v1/testutils/testutils.go +++ b/providers-sdk/v1/testutils/testutils.go @@ -241,7 +241,7 @@ func mockRuntime(testdata string) llx.Runtime { return mockRuntimeAbs(filepath.Join(TestutilsDir, testdata)) } -func MockFromRecording(recording providers.Recording) llx.Runtime { +func MockFromRecording(recording llx.Recording) llx.Runtime { runtime := Local().(*providers.Runtime) err := runtime.SetMockRecording(recording, runtime.Provider.Instance.ID, true) @@ -271,7 +271,7 @@ func mockRuntimeAbs(testdata string) llx.Runtime { return MockFromRecording(roRecording) } -func RecordingFromAsset(a *inventory.Asset) providers.Recording { +func RecordingFromAsset(a *inventory.Asset) llx.Recording { recording, err := providers.FromAsset(a) if err != nil { panic("failed to create recording from an asset: " + err.Error()) diff --git a/providers/coordinator.go b/providers/coordinator.go index 72847fd1df..fea0969bd9 100644 --- a/providers/coordinator.go +++ b/providers/coordinator.go @@ -340,7 +340,7 @@ func (c *coordinator) newRuntime(isEphemeral bool) *Runtime { coordinator: c, providers: map[string]*ConnectedProvider{}, schema: newExtensibleSchema(), - Recording: NullRecording{}, + recording: NullRecording{}, shutdownTimeout: defaultShutdownTimeout, isEphemeral: isEphemeral, } @@ -369,7 +369,7 @@ func (c *coordinator) newRuntime(isEphemeral bool) *Runtime { func (c *coordinator) NewRuntimeFrom(parent *Runtime) *Runtime { res := c.NewRuntime() - res.Recording = parent.Recording + res.recording = parent.Recording() for k, v := range parent.providers { res.providers[k] = v } diff --git a/providers/mock.go b/providers/mock.go index 2157c6bd9d..10fb847ec0 100644 --- a/providers/mock.go +++ b/providers/mock.go @@ -44,7 +44,7 @@ func (s *mockProviderService) ParseCLI(req *plugin.ParseCLIReq) (*plugin.ParseCL func (s *mockProviderService) Connect(req *plugin.ConnectReq, callback plugin.ProviderCallback) (*plugin.ConnectRes, error) { // initialize all other providers from all asset connections in the recording - recording := s.runtime.Recording + recording := s.runtime.Recording() if recording == nil { return nil, errors.New("cannot find recording for mock provider") } diff --git a/providers/network/provider/provider.go b/providers/network/provider/provider.go index b44849cc67..2e2f2bd569 100644 --- a/providers/network/provider/provider.go +++ b/providers/network/provider/provider.go @@ -101,7 +101,6 @@ func parseTarget(target string) (string, int, string, string, error) { path := url.Path return host, port, scheme, path, nil - } // Shutdown is automatically called when the shell closes. diff --git a/providers/recording.go b/providers/recording.go index b93fdb4a6a..8129fdcc1a 100644 --- a/providers/recording.go +++ b/providers/recording.go @@ -16,14 +16,6 @@ import ( "go.mondoo.com/cnquery/v10/utils/multierr" ) -type Recording interface { - Save() error - EnsureAsset(asset *inventory.Asset, provider string, connectionID uint32, conf *inventory.Config) - AddData(connectionID uint32, resource string, id string, field string, data *llx.RawData) - GetData(connectionID uint32, resource string, id string, field string) (*llx.RawData, bool) - GetResource(connectionID uint32, resource string, id string) (map[string]*llx.RawData, bool) -} - type recording struct { Assets []assetRecording `json:"assets"` Path string `json:"-"` @@ -137,6 +129,10 @@ func (n NullRecording) GetResource(connectionID uint32, resource string, id stri return nil, false } +func (n NullRecording) GetAssetData(assetMrn string) (map[string]*llx.ResourceRecording, bool) { + return nil, false +} + type readOnlyRecording struct { *recording } @@ -166,7 +162,7 @@ type RecordingOptions struct { // If no recording is available and users don't wish to record, it throws an error. // If users don't wish to record and no recording is available, it will return // the null-recording. -func NewRecording(path string, opts RecordingOptions) (Recording, error) { +func NewRecording(path string, opts RecordingOptions) (llx.Recording, error) { if path == "" { // we don't want to record and we don't want to load a recording path... // so there is nothing to do, so return nil @@ -375,29 +371,33 @@ func reconnectResource(v interface{}, resource *resourceRecording) (interface{}, func (r *recording) finalize() { for i := range r.Assets { asset := &r.Assets[i] - asset.Resources = make([]resourceRecording, len(asset.resources)) - asset.Connections = make([]connectionRecording, len(asset.connections)) + asset.finalize() + } +} - i := 0 - for _, v := range asset.resources { - asset.Resources[i] = *v - i++ - } +func (asset *assetRecording) finalize() { + asset.Resources = make([]resourceRecording, len(asset.resources)) + asset.Connections = make([]connectionRecording, len(asset.connections)) - sort.Slice(asset.Resources, func(i, j int) bool { - a := asset.Resources[i] - b := asset.Resources[j] - if a.Resource == b.Resource { - return a.ID < b.ID - } - return a.Resource < b.Resource - }) + i := 0 + for _, v := range asset.resources { + asset.Resources[i] = *v + i++ + } - i = 0 - for _, v := range asset.connections { - asset.Connections[i] = *v - i++ + sort.Slice(asset.Resources, func(i, j int) bool { + a := asset.Resources[i] + b := asset.Resources[j] + if a.Resource == b.Resource { + return a.ID < b.ID } + return a.Resource < b.Resource + }) + + i = 0 + for _, v := range asset.connections { + asset.Connections[i] = *v + i++ } } @@ -540,6 +540,31 @@ func (r *recording) GetResource(connectionID uint32, resource string, id string) return obj.Fields, true } +func (r *recording) GetAssetData(assetMrn string) (map[string]*llx.ResourceRecording, bool) { + var cur *assetRecording + for i := range r.Assets { + cur = &r.Assets[i] + if cur.Asset.ID != assetMrn { + continue + } + + res := make(map[string]*llx.ResourceRecording, len(cur.resources)) + for k, v := range cur.resources { + fields := make(map[string]*llx.Result, len(v.Fields)) + for fk, fv := range v.Fields { + fields[fk] = fv.Result() + } + res[k] = &llx.ResourceRecording{ + Resource: v.Resource, + Id: v.ID, + Fields: fields, + } + } + return res, true + } + return nil, false +} + func (a assetInfo) ToInventory() *inventory.Asset { return &inventory.Asset{ Id: a.ID, diff --git a/providers/runtime.go b/providers/runtime.go index 8fa864316f..5b42619d8c 100644 --- a/providers/runtime.go +++ b/providers/runtime.go @@ -28,10 +28,10 @@ const defaultShutdownTimeout = time.Duration(time.Second * 120) type Runtime struct { Provider *ConnectedProvider UpstreamConfig *upstream.UpstreamConfig - Recording Recording AutoUpdate UpdateProvidersConfig - features []byte + recording llx.Recording + features []byte // coordinator is used to grab providers coordinator *coordinator // providers for with open connections @@ -75,7 +75,7 @@ func (r *Runtime) tryShutdown() shutdownResult { func (r *Runtime) Close() { r.isClosed = true r.close.Do(func() { - if err := r.Recording.Save(); err != nil { + if err := r.Recording().Save(); err != nil { log.Error().Err(err).Msg("failed to save recording") } @@ -104,6 +104,10 @@ func (r *Runtime) DeactivateProviderDiscovery() { r.schema.lastRefreshed = math.MaxInt64 } +func (r *Runtime) Recording() llx.Recording { + return r.recording +} + func (r *Runtime) AssetMRN() string { if r.Provider != nil && r.Provider.Connection != nil && r.Provider.Connection.Asset != nil { return r.Provider.Connection.Asset.Mrn @@ -251,7 +255,7 @@ func (r *Runtime) Connect(req *plugin.ConnectReq) error { } } - r.Recording.EnsureAsset(r.Provider.Connection.Asset, r.Provider.Instance.ID, r.Provider.Connection.Id, asset.Connections[0]) + r.Recording().EnsureAsset(r.Provider.Connection.Asset, r.Provider.Instance.ID, r.Provider.Connection.Id, asset.Connections[0]) r.schema.prioritizeIDs(BuiltinCoreID, r.Provider.Instance.ID) return nil } @@ -284,8 +288,8 @@ func (r *Runtime) CreateResource(name string, args map[string]*llx.Primitive) (l return nil, err } - if _, ok := r.Recording.GetResource(provider.Connection.Id, name, string(res.Data.Value)); !ok { - r.Recording.AddData(provider.Connection.Id, name, string(res.Data.Value), "", nil) + if _, ok := r.Recording().GetResource(provider.Connection.Id, name, string(res.Data.Value)); !ok { + r.Recording().AddData(provider.Connection.Id, name, string(res.Data.Value), "", nil) } typ := types.Type(res.Data.Type) @@ -374,7 +378,7 @@ func (r *Runtime) watchAndUpdate(resource string, resourceID string, field strin } } - if cached, ok := r.Recording.GetData(provider.Connection.Id, resource, resourceID, field); ok { + if cached, ok := r.Recording().GetData(provider.Connection.Id, resource, resourceID, field); ok { return cached, nil } @@ -402,7 +406,7 @@ func (r *Runtime) watchAndUpdate(resource string, resourceID string, field strin raw = data.Data.RawData() } - r.Recording.AddData(provider.Connection.Id, resource, resourceID, field, raw) + r.Recording().AddData(provider.Connection.Id, resource, resourceID, field, raw) return raw, nil } @@ -477,8 +481,8 @@ func (p *providerCallbacks) Collect(req *plugin.DataRes) error { return nil } -func (r *Runtime) SetRecording(recording Recording) error { - r.Recording = recording +func (r *Runtime) SetRecording(recording llx.Recording) error { + r.recording = recording if r.Provider == nil || r.Provider.Instance == nil { log.Warn().Msg("set recording while no provider is set on runtime") return nil @@ -495,7 +499,7 @@ func (r *Runtime) SetRecording(recording Recording) error { return nil } -func baseRecording(anyRecording Recording) *recording { +func baseRecording(anyRecording llx.Recording) *recording { var baseRecording *recording switch x := anyRecording.(type) { case *recording: @@ -509,8 +513,8 @@ func baseRecording(anyRecording Recording) *recording { // SetMockRecording is only used for test utilities. Please do not use it! // // Deprecated: This function may not be necessary anymore, consider removing. -func (r *Runtime) SetMockRecording(anyRecording Recording, providerID string, mockConnection bool) error { - r.Recording = anyRecording +func (r *Runtime) SetMockRecording(anyRecording llx.Recording, providerID string, mockConnection bool) error { + r.recording = anyRecording baseRecording := baseRecording(anyRecording) if baseRecording == nil {