diff --git a/elastic-agent-client.proto b/elastic-agent-client.proto index 5a6b437..3a29bc6 100644 --- a/elastic-agent-client.proto +++ b/elastic-agent-client.proto @@ -292,12 +292,32 @@ message CheckinAgentInfo { bool snapshot = 3; } +// Feature flags configurations. +message Features { + // Source is the original source of the features. All values from the features + // are included here even if other concrete fields are defined for this message. + google.protobuf.Struct source = 1; + + FQDNFeature fqdn = 2; +} + +// FQDN feature flag indicates to use FQDN for host.name instead of hostname. +message FQDNFeature { + bool enabled = 1; +} + // A set of units and their expected states and configuration. message CheckinExpected { // Units is the expected units the component should be running. repeated UnitExpected units = 1; // Agent info is provided only on first CheckinExpected response to the component. CheckinAgentInfo agent_info = 2; + + // Features are the expected feature flags configurations. + // Added on Elastic Agent v8.7.1. + Features features = 3; + // Index of the either current features configuration or new the configuration provided. + uint64 features_idx = 4; } // Observed status for a unit. @@ -344,6 +364,12 @@ message CheckinObserved { // Version information about the running program. Should always be included on first checkin, and not again unless // one of the values have changed. optional CheckinObservedVersionInfo version_info = 3; + + // Features are the expected feature flags configurations. + // Added on Elastic Agent v8.7.1. + Features features = 4; + // Index of the either current features configuration or new the configuration provided. + uint64 features_idx = 5; } service ElasticAgent { diff --git a/go.mod b/go.mod index 9b6f7ff..9d5d317 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/elastic/elastic-agent-client/v7 -go 1.17 +go 1.18 require ( github.com/gofrs/uuid v4.2.0+incompatible diff --git a/go.sum b/go.sum index 966114e..11afa8e 100644 --- a/go.sum +++ b/go.sum @@ -73,38 +73,30 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -114,17 +106,12 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -132,9 +119,6 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/magefile.go b/magefile.go index b3fb77f..e6b684a 100644 --- a/magefile.go +++ b/magefile.go @@ -8,6 +8,7 @@ package main import ( + "fmt" "os" "strings" @@ -67,14 +68,38 @@ func (Update) Prepare() error { return GoInstall(goProtocGenGoGRPC) } -// Generate generates the GRPC code. +// Generate generates the necessary GRPC and Go code. It generates both, +// then reports all errors if any. func (Update) Generate() error { defer mg.SerialDeps(Format.All) - return sh.RunV( + + errGRPC := sh.RunV( "protoc", - "--go_out=pkg/proto", "--go_opt=paths=source_relative", - "--go-grpc_out=pkg/proto", "--go-grpc_opt=paths=source_relative", + "--go_out=pkg/proto", + "--go_opt=paths=source_relative", + "--go-grpc_out=pkg/proto", + "--go-grpc_opt=paths=source_relative", "elastic-agent-client.proto") + if errGRPC != nil { + errGRPC = fmt.Errorf("failed to generate GRPC code: %w") + } + + errGenerate := sh.RunV("go", "generate", "./...") + if errGenerate != nil { + errGenerate = fmt.Errorf("failed to run go generate: %w") + } + + switch { + case errGRPC != nil && errGenerate != nil: + return fmt.Errorf("all code generation failed: '%v' and '%v'", + errGRPC, errGenerate) + case errGRPC != nil: + return errGRPC + case errGenerate != nil: + return errGenerate + } + + return nil } // All runs update:prepare then update:generate. diff --git a/pkg/client/client_test.go b/pkg/client/client_test.go index 0024c7b..7cb36d2 100644 --- a/pkg/client/client_test.go +++ b/pkg/client/client_test.go @@ -427,14 +427,16 @@ func (c *StubClientImpl) OnError(err error) { } func waitFor(check func() error) error { + timeout := 5 * time.Minute started := time.Now() for { err := check() if err == nil { return nil } - if time.Now().Sub(started) >= 5*time.Second { - return fmt.Errorf("check timed out after 1 second: %s", err) + if time.Now().Sub(started) >= timeout { + return fmt.Errorf("check timed out after %s: %s", + timeout, err) } time.Sleep(10 * time.Millisecond) } diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 3c9cdad..a96feb3 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -12,6 +12,7 @@ import ( "fmt" "io" "runtime/pprof" + "strings" "sync" "time" @@ -22,19 +23,77 @@ import ( "github.com/elastic/elastic-agent-client/v7/pkg/utils" ) -// UnitChangedType defines types for when units are adjusted. -type UnitChangedType int +type ( + // UnitChangedType defines types for when units are adjusted. + UnitChangedType int + // Trigger indicates what triggered a change. This is a bitmask as + // a unit change can have one or more triggers that caused the change. + Trigger uint +) const ( // UnitChangedAdded is when a new unit is added. - UnitChangedAdded UnitChangedType = 1 + UnitChangedAdded UnitChangedType = iota + 1 // unit_added // UnitChangedModified is when an existing unit is modified. - UnitChangedModified UnitChangedType = 2 + UnitChangedModified // unit_modified // UnitChangedRemoved is when an existing unit is removed. - UnitChangedRemoved UnitChangedType = 3 + UnitChangedRemoved // unit_removed ) -// String returns string representation for the unit changed type. +const ( + // TriggeredNothing is Trigger zero value, nothing was triggered. + // It exists only for completeness and documentation purposes. + TriggeredNothing Trigger = 0 // nothing_triggered + + // TriggeredConfigChange indicates a change in config triggered the change. + // This constant represents a single bit in a bitmask. @see Trigger. + TriggeredConfigChange Trigger = 1 << iota // config_change_triggered + // TriggeredFeatureChange indicates a change in the features triggered the change. + // This constant represents a single bit in a bitmask. @see Trigger. + TriggeredFeatureChange // feature_change_triggered + // TriggeredLogLevelChange indicates a change the log level triggered the change. + // This constant represents a single bit in a bitmask. @see Trigger. + TriggeredLogLevelChange // log_level_triggered + // TriggeredStateChange indicates when a unit state has ganged. + // This constant represents a single bit in a bitmask. @see Trigger. + TriggeredStateChange // state_change_triggered +) + +func (t Trigger) String() string { + var triggers []string + if t == 0 { + return "nothing_triggered" + } + + current := t + if current&TriggeredConfigChange == TriggeredConfigChange { + current &= ^TriggeredConfigChange + triggers = append(triggers, "config_change_triggered") + } + if current&TriggeredFeatureChange == TriggeredFeatureChange { + current &= ^TriggeredFeatureChange + triggers = append(triggers, "feature_change_triggered") + } + if current&TriggeredLogLevelChange == TriggeredLogLevelChange { + current &= ^TriggeredLogLevelChange + triggers = append(triggers, "log_level_triggered") + } + if current&TriggeredStateChange == TriggeredStateChange { + current &= ^TriggeredStateChange + triggers = append(triggers, "state_change_triggered") + } + + if current != 0 { + return fmt.Sprintf("invalid trigger value: %d", t) + } + + return strings.Join(triggers, ", ") +} + +// GoString is the same as String, but for the %#v format. +func (t Trigger) GoString() string { return t.String() } + +// String returns a string representation for the unit changed type. func (t UnitChangedType) String() string { switch t { case UnitChangedAdded: @@ -44,12 +103,22 @@ func (t UnitChangedType) String() string { case UnitChangedRemoved: return "removed" } + return "unknown" } -// UnitChanged is what is sent over the UnitChanges channel any time a unit is added, modified, or removed. +// GoString is the same as String, but for the %#v format. +func (t UnitChangedType) GoString() string { + return t.String() +} + +// UnitChanged is what is sent over the UnitChanged channel any time a change happens: +// - a unit is added, modified, or removed +// - a feature changes type UnitChanged struct { - Type UnitChangedType + Type UnitChangedType + Triggers Trigger + // Unit is any change in a unit. Unit *Unit } @@ -271,16 +340,7 @@ func (c *clientV2) checkinRoundTrip() { close(done) return } - if expected.AgentInfo != nil { - c.agentInfoMu.Lock() - c.agentInfo = &AgentInfo{ - ID: expected.AgentInfo.Id, - Version: expected.AgentInfo.Version, - Snapshot: expected.AgentInfo.Snapshot, - } - c.agentInfoMu.Unlock() - } - c.syncUnits(expected) + c.sync(expected) } }() @@ -354,7 +414,21 @@ func (c *clientV2) sendObserved(client proto.ElasticAgent_CheckinV2Client) error return client.Send(msg) } -// syncUnits syncs the expected units with the current state. +// sync syncs the expected state with the current state. +func (c *clientV2) sync(expected *proto.CheckinExpected) { + if expected.AgentInfo != nil { + c.agentInfoMu.Lock() + c.agentInfo = &AgentInfo{ + ID: expected.AgentInfo.Id, + Version: expected.AgentInfo.Version, + Snapshot: expected.AgentInfo.Snapshot, + } + c.agentInfoMu.Unlock() + } + + c.syncUnits(expected) +} + func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { c.unitsMu.Lock() defer c.unitsMu.Unlock() @@ -372,28 +446,56 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { removed = true } } + // resize so units that no longer exist are removed from the slice c.units = c.units[:i] for _, agentUnit := range expected.Units { unit := c.findUnit(agentUnit.Id, UnitType(agentUnit.Type)) if unit == nil { // new unit - unit = newUnit(agentUnit.Id, UnitType(agentUnit.Type), UnitState(agentUnit.State), UnitLogLevel(agentUnit.LogLevel), agentUnit.Config, agentUnit.ConfigStateIdx, c) + unit = newUnit( + agentUnit.Id, + UnitType(agentUnit.Type), + UnitState(agentUnit.State), + UnitLogLevel(agentUnit.LogLevel), + agentUnit.Config, + agentUnit.ConfigStateIdx, + expected.Features, + c) c.units = append(c.units, unit) - c.changesCh <- UnitChanged{ + + changed := UnitChanged{ Type: UnitChangedAdded, Unit: unit, } + + if expected.Features != nil { + changed.Triggers = TriggeredFeatureChange + } + + c.changesCh <- changed } else { // existing unit - if unit.updateState(UnitState(agentUnit.State), UnitLogLevel(agentUnit.LogLevel), agentUnit.Config, agentUnit.ConfigStateIdx) { - c.changesCh <- UnitChanged{ - Type: UnitChangedModified, - Unit: unit, - } + triggers := unit.updateState( + UnitState(agentUnit.State), + UnitLogLevel(agentUnit.LogLevel), + expected.FeaturesIdx, + expected.Features, + agentUnit.Config, + agentUnit.ConfigStateIdx) + + changed := UnitChanged{ + Triggers: triggers, + Type: UnitChangedModified, + Unit: unit, + } + + if changed.Triggers > TriggeredNothing { // a.k.a something changed + c.changesCh <- changed } } } + if removed { // unit removed send updated observed change so agent is notified now // otherwise it will not be notified until the next checkin timeout diff --git a/pkg/client/client_v2_test.go b/pkg/client/client_v2_test.go index 5de6c7d..94a362e 100644 --- a/pkg/client/client_v2_test.go +++ b/pkg/client/client_v2_test.go @@ -37,6 +37,7 @@ func TestClientV2_Checkin_Initial(t *testing.T) { gotValid := false unitOneID := mock.NewID() unitTwoID := mock.NewID() + wantFQDN := true reportedVersion := VersionInfo{} srv := mock.StubServerV2{ CheckinV2Impl: func(observed *proto.CheckinObserved) *proto.CheckinExpected { @@ -54,6 +55,9 @@ func TestClientV2_Checkin_Initial(t *testing.T) { Version: "8.5.0", Snapshot: true, }, + Features: &proto.Features{ + Fqdn: &proto.FQDNFeature{Enabled: wantFQDN}, + }, Units: []*proto.UnitExpected{ { Id: unitOneID, @@ -125,12 +129,17 @@ func TestClientV2_Checkin_Initial(t *testing.T) { // receive the units var unitsMu sync.Mutex var units []*Unit + var gotFQDN bool go func() { for { select { case <-ctx.Done(): return case change := <-validClient.UnitChanges(): + if change.Triggers&TriggeredFeatureChange == TriggeredFeatureChange { + gotFQDN = change.Unit.Expected().Features.Fqdn.Enabled + } + switch change.Type { case UnitChangedAdded: unitsMu.Lock() @@ -170,10 +179,13 @@ func TestClientV2_Checkin_Initial(t *testing.T) { assert.Equal(t, agentInfo.Version, "8.5.0") assert.True(t, agentInfo.Snapshot) + assert.Equal(t, wantFQDN, gotFQDN) + assert.Equal(t, units[0].ID(), unitOneID) assert.Equal(t, units[0].Type(), UnitTypeOutput) assert.Equal(t, units[1].ID(), unitTwoID) assert.Equal(t, units[1].Type(), UnitTypeInput) + assert.Equal(t, reportedVersion.Name, "program") assert.Equal(t, reportedVersion.Version, "v1.0.0") assert.Equal(t, reportedVersion.Meta, map[string]string{ @@ -185,8 +197,9 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { var m sync.Mutex token := mock.NewID() connected := false - unitOne := newUnit(mock.NewID(), UnitTypeOutput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil) - unitTwo := newUnit(mock.NewID(), UnitTypeInput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil) + unitOne := newUnit(mock.NewID(), UnitTypeOutput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil, nil) + unitTwo := newUnit(mock.NewID(), UnitTypeInput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil, nil) + wantFQDN := true srv := mock.StubServerV2{ CheckinV2Impl: func(observed *proto.CheckinObserved) *proto.CheckinExpected { m.Lock() @@ -198,6 +211,8 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { if unitOne.state == UnitStateStarting && unitTwo.state == UnitStateStarting { // first checkin; create units return &proto.CheckinExpected{ + Features: &proto.Features{Fqdn: &proto.FQDNFeature{Enabled: false}}, + FeaturesIdx: 1, Units: []*proto.UnitExpected{ { Id: unitOne.id, @@ -224,6 +239,8 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { } else if (unitOne.state == UnitStateHealthy && unitTwo.state == UnitStateHealthy) || (unitOne.state == UnitStateHealthy && unitTwo.state == UnitStateStopping) { // stop second input return &proto.CheckinExpected{ + Features: &proto.Features{Fqdn: &proto.FQDNFeature{Enabled: wantFQDN}}, + FeaturesIdx: 1, Units: []*proto.UnitExpected{ { Id: unitOne.id, @@ -246,6 +263,8 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { } else if unitOne.state == UnitStateHealthy && unitTwo.state == UnitStateStopped { // input stopped, remove the unit return &proto.CheckinExpected{ + Features: &proto.Features{Fqdn: &proto.FQDNFeature{Enabled: wantFQDN}}, + FeaturesIdx: 1, Units: []*proto.UnitExpected{ { Id: unitOne.id, @@ -284,12 +303,18 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { // receive the units var unitsMu sync.Mutex units := make(map[string]*Unit) + var gotFQDN bool + var gotTriggers Trigger go func() { for { select { case <-ctx.Done(): return case change := <-client.UnitChanges(): + if change.Triggers&TriggeredFeatureChange == TriggeredFeatureChange { + gotFQDN = change.Unit.Expected().Features.Fqdn.Enabled + } + switch change.Type { case UnitChangedAdded: unitsMu.Lock() @@ -299,8 +324,11 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { "custom": "payload", }) case UnitChangedModified: - state, _, _ := change.Unit.Expected() - if state == UnitStateStopped { + expected := change.Unit.Expected() + gotFQDN = expected.Features.Fqdn.Enabled + gotTriggers = change.Triggers + + if expected.State == UnitStateStopped { change.Unit.UpdateState(UnitStateStopping, "Stopping", nil) go func() { time.Sleep(100 * time.Millisecond) @@ -347,6 +375,8 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { return nil })) + assert.Equal(t, wantFQDN, gotFQDN) + assert.Equal(t, gotTriggers&TriggeredFeatureChange, TriggeredFeatureChange) assert.Equal(t, UnitStateHealthy, unitOne.state) assert.Equal(t, "Healthy", unitOne.stateMsg) assert.Equal(t, UnitStateStopped, unitTwo.state) @@ -582,6 +612,41 @@ func TestClientV2_DiagnosticAction(t *testing.T) { assert.ElementsMatch(t, names, []string{"goroutine", "heap", "allocs", "threadcreate", "block", "mutex", "custom_component", "custom_unit"}) } +func TestTrigger_String(t *testing.T) { + tcs := []struct { + Name string + Trigger Trigger + Want string + }{ + { + Name: "nothing triggered, zero value", + Want: "nothing_triggered", + }, + { + Name: "one change: feature_change_triggered", + Trigger: TriggeredFeatureChange, + Want: "feature_change_triggered", + }, + { + Name: "two changes: feature_change_triggered, state_change_triggered", + Trigger: TriggeredFeatureChange | TriggeredStateChange, + Want: "feature_change_triggered, state_change_triggered", + }, + { + Name: "invalid trigger value", + Trigger: 1618, + Want: "invalid trigger value: 1618", + }, + } + + for _, tc := range tcs { + t.Run(tc.Name, func(t *testing.T) { + got := tc.Trigger.String() + assert.Equal(t, got, tc.Want) + }) + } +} + func storeErrors(ctx context.Context, client V2, errs *[]error, lock *sync.Mutex) { go func() { for { diff --git a/pkg/client/unit.go b/pkg/client/unit.go index 1ebbbe1..895e778 100644 --- a/pkg/client/unit.go +++ b/pkg/client/unit.go @@ -118,9 +118,14 @@ type Unit struct { expectedStateMu sync.RWMutex expectedState UnitState - logLevel UnitLogLevel - config *proto.UnitExpectedConfig - configIdx uint64 + + logLevel UnitLogLevel + config *proto.UnitExpectedConfig + configIdx uint64 + + // do I need a mutex? + features *proto.Features + featuresIdx uint64 // do I really need it? stateMu sync.RWMutex state UnitState @@ -146,11 +151,25 @@ func (u *Unit) Type() UnitType { return u.unitType } -// Expected returns the expected state and config for the unit. -func (u *Unit) Expected() (UnitState, UnitLogLevel, *proto.UnitExpectedConfig) { +// Expected contains the expected state, log level, features and config for a unit. +type Expected struct { + Config *proto.UnitExpectedConfig + Features *proto.Features + LogLevel UnitLogLevel + State UnitState +} + +// Expected returns the expected state, log level, features and config for the unit. +func (u *Unit) Expected() Expected { u.expectedStateMu.RLock() defer u.expectedStateMu.RUnlock() - return u.expectedState, u.logLevel, u.config + + return Expected{ + Config: u.config, + Features: u.features, + LogLevel: u.logLevel, + State: u.expectedState, + } } // State returns the currently reported state for the unit. @@ -257,27 +276,43 @@ func (u *Unit) RegisterDiagnosticHook(name string, description string, filename func (u *Unit) updateState( exp UnitState, logLevel UnitLogLevel, + expFeaturesIdx uint64, + expFeatures *proto.Features, cfg *proto.UnitExpectedConfig, - cfgIdx uint64) bool { + cfgIdx uint64) Trigger { + + var triggers Trigger + u.expectedStateMu.Lock() defer u.expectedStateMu.Unlock() - changed := false if u.expectedState != exp { u.expectedState = exp - changed = true + triggers |= TriggeredStateChange } + if u.logLevel != logLevel { u.logLevel = logLevel - changed = true + triggers |= TriggeredLogLevelChange + } + + if u.featuresIdx != expFeaturesIdx { + u.featuresIdx = expFeaturesIdx + if expFeatures != nil && + !gproto.Equal(u.features, expFeatures) { + u.features = expFeatures + triggers |= TriggeredFeatureChange + } } + if u.configIdx != cfgIdx { u.configIdx = cfgIdx if !gproto.Equal(u.config.GetSource(), cfg.GetSource()) { u.config = cfg - changed = true + triggers |= TriggeredConfigChange } } - return changed + + return triggers } // toObserved returns the observed unit protocol to send over the stream. @@ -298,18 +333,30 @@ func (u *Unit) toObserved() *proto.UnitObserved { } // newUnit creates a new unit that needs to be created in this process. -func newUnit(id string, unitType UnitType, exp UnitState, logLevel UnitLogLevel, cfg *proto.UnitExpectedConfig, cfgIdx uint64, client *clientV2) *Unit { - return &Unit{ +func newUnit( + id string, + unitType UnitType, + exp UnitState, + logLevel UnitLogLevel, + cfg *proto.UnitExpectedConfig, + cfgIdx uint64, + features *proto.Features, + client *clientV2) *Unit { + + unit := Unit{ id: id, unitType: unitType, config: cfg, configIdx: cfgIdx, expectedState: exp, logLevel: logLevel, + features: features, state: UnitStateStarting, stateMsg: "Starting", client: client, actions: make(map[string]Action), diagHooks: make(map[string]diagHook), } + + return &unit } diff --git a/pkg/client/unit_test.go b/pkg/client/unit_test.go index d7a5b93..f4d12b0 100644 --- a/pkg/client/unit_test.go +++ b/pkg/client/unit_test.go @@ -6,15 +6,19 @@ package client import ( "testing" - "github.com/elastic/elastic-agent-client/v7/pkg/proto" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" gproto "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/structpb" + + "github.com/elastic/elastic-agent-client/v7/pkg/proto" ) var defaultTest = Unit{ expectedState: UnitStateHealthy, logLevel: UnitLogLevelDebug, + featuresIdx: 0, + features: nil, configIdx: 1, config: &proto.UnitExpectedConfig{}, } @@ -34,9 +38,9 @@ func TestUnitUpdateWithSameMap(t *testing.T) { _, err = gproto.Marshal(newUnit) require.NoError(t, err) - // This should return false, as the two underlying maps in `source` are the same - result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) - require.False(t, result) + // This should return TriggeredNothing, as the two underlying maps in `source` are the same + got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, 0, nil, newUnit, 2) + assert.Equal(t, TriggeredNothing, got) } func TestUnitUpdateWithNewMap(t *testing.T) { @@ -54,17 +58,22 @@ func TestUnitUpdateWithNewMap(t *testing.T) { _, err = gproto.Marshal(newUnit) require.NoError(t, err) - // This should return true, as we have an actually new map - result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) - require.True(t, result) + // This should return TriggeredConfigChange, as we have an actually new map + got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, 0, nil, newUnit, 2) + assert.Equal(t, TriggeredConfigChange, got) } func TestUnitUpdateLog(t *testing.T) { - result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) - require.True(t, result) + got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, 0, nil, &proto.UnitExpectedConfig{}, 2) + assert.Equal(t, TriggeredLogLevelChange, got) +} + +func TestUnitUpdateFeatureFlags(t *testing.T) { + got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, 1, &proto.Features{}, &proto.UnitExpectedConfig{}, 2) + assert.Equal(t, TriggeredFeatureChange, got) } func TestUnitUpdateState(t *testing.T) { - result := defaultTest.updateState(UnitStateStopped, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) - require.True(t, result) + got := defaultTest.updateState(UnitStateStopped, UnitLogLevelInfo, 1, &proto.Features{}, &proto.UnitExpectedConfig{}, 2) + assert.Equal(t, TriggeredStateChange, got) } diff --git a/pkg/proto/elastic-agent-client.pb.go b/pkg/proto/elastic-agent-client.pb.go index ee57c92..a1d245a 100644 --- a/pkg/proto/elastic-agent-client.pb.go +++ b/pkg/proto/elastic-agent-client.pb.go @@ -11,13 +11,14 @@ package proto import ( + reflect "reflect" + sync "sync" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" emptypb "google.golang.org/protobuf/types/known/emptypb" structpb "google.golang.org/protobuf/types/known/structpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" ) const ( @@ -570,7 +571,7 @@ func (x StoreGetKeyResponse_Status) Number() protoreflect.EnumNumber { // Deprecated: Use StoreGetKeyResponse_Status.Descriptor instead. func (StoreGetKeyResponse_Status) EnumDescriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{20, 0} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{22, 0} } // Connection information sent to the application on startup so it knows how to connected back to the Elastic Agent. @@ -1660,6 +1661,112 @@ func (x *CheckinAgentInfo) GetSnapshot() bool { return false } +// Feature flags configurations. +type Features struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Source is the original source of the features. All values from the features + // are included here even if other concrete fields are defined for this message. + Source *structpb.Struct `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` + Fqdn *FQDNFeature `protobuf:"bytes,2,opt,name=fqdn,proto3" json:"fqdn,omitempty"` +} + +func (x *Features) Reset() { + *x = Features{} + if protoimpl.UnsafeEnabled { + mi := &file_elastic_agent_client_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Features) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Features) ProtoMessage() {} + +func (x *Features) ProtoReflect() protoreflect.Message { + mi := &file_elastic_agent_client_proto_msgTypes[13] + 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 Features.ProtoReflect.Descriptor instead. +func (*Features) Descriptor() ([]byte, []int) { + return file_elastic_agent_client_proto_rawDescGZIP(), []int{13} +} + +func (x *Features) GetSource() *structpb.Struct { + if x != nil { + return x.Source + } + return nil +} + +func (x *Features) GetFqdn() *FQDNFeature { + if x != nil { + return x.Fqdn + } + return nil +} + +// FQDN feature flag indicates to use FQDN for host.name instead of hostname. +type FQDNFeature struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *FQDNFeature) Reset() { + *x = FQDNFeature{} + if protoimpl.UnsafeEnabled { + mi := &file_elastic_agent_client_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FQDNFeature) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FQDNFeature) ProtoMessage() {} + +func (x *FQDNFeature) ProtoReflect() protoreflect.Message { + mi := &file_elastic_agent_client_proto_msgTypes[14] + 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 FQDNFeature.ProtoReflect.Descriptor instead. +func (*FQDNFeature) Descriptor() ([]byte, []int) { + return file_elastic_agent_client_proto_rawDescGZIP(), []int{14} +} + +func (x *FQDNFeature) GetEnabled() bool { + if x != nil { + return x.Enabled + } + return false +} + // A set of units and their expected states and configuration. type CheckinExpected struct { state protoimpl.MessageState @@ -1670,12 +1777,17 @@ type CheckinExpected struct { Units []*UnitExpected `protobuf:"bytes,1,rep,name=units,proto3" json:"units,omitempty"` // Agent info is provided only on first CheckinExpected response to the component. AgentInfo *CheckinAgentInfo `protobuf:"bytes,2,opt,name=agent_info,json=agentInfo,proto3" json:"agent_info,omitempty"` + // Features are the expected feature flags configurations. + // Added on Elastic Agent v8.7.1. + Features *Features `protobuf:"bytes,3,opt,name=features,proto3" json:"features,omitempty"` + // Index of the either current features configuration or new the configuration provided. + FeaturesIdx uint64 `protobuf:"varint,4,opt,name=features_idx,json=featuresIdx,proto3" json:"features_idx,omitempty"` } func (x *CheckinExpected) Reset() { *x = CheckinExpected{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[13] + mi := &file_elastic_agent_client_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1688,7 +1800,7 @@ func (x *CheckinExpected) String() string { func (*CheckinExpected) ProtoMessage() {} func (x *CheckinExpected) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[13] + mi := &file_elastic_agent_client_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1701,7 +1813,7 @@ func (x *CheckinExpected) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckinExpected.ProtoReflect.Descriptor instead. func (*CheckinExpected) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{13} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{15} } func (x *CheckinExpected) GetUnits() []*UnitExpected { @@ -1718,6 +1830,20 @@ func (x *CheckinExpected) GetAgentInfo() *CheckinAgentInfo { return nil } +func (x *CheckinExpected) GetFeatures() *Features { + if x != nil { + return x.Features + } + return nil +} + +func (x *CheckinExpected) GetFeaturesIdx() uint64 { + if x != nil { + return x.FeaturesIdx + } + return 0 +} + // Observed status for a unit. // // Contains the currently applied `config_state_idx` (0 in the case of initial start, 1 is the first @@ -1747,7 +1873,7 @@ type UnitObserved struct { func (x *UnitObserved) Reset() { *x = UnitObserved{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[14] + mi := &file_elastic_agent_client_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1760,7 +1886,7 @@ func (x *UnitObserved) String() string { func (*UnitObserved) ProtoMessage() {} func (x *UnitObserved) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[14] + mi := &file_elastic_agent_client_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1773,7 +1899,7 @@ func (x *UnitObserved) ProtoReflect() protoreflect.Message { // Deprecated: Use UnitObserved.ProtoReflect.Descriptor instead. func (*UnitObserved) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{14} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{16} } func (x *UnitObserved) GetId() string { @@ -1835,7 +1961,7 @@ type CheckinObservedVersionInfo struct { func (x *CheckinObservedVersionInfo) Reset() { *x = CheckinObservedVersionInfo{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[15] + mi := &file_elastic_agent_client_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1848,7 +1974,7 @@ func (x *CheckinObservedVersionInfo) String() string { func (*CheckinObservedVersionInfo) ProtoMessage() {} func (x *CheckinObservedVersionInfo) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[15] + mi := &file_elastic_agent_client_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1861,7 +1987,7 @@ func (x *CheckinObservedVersionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckinObservedVersionInfo.ProtoReflect.Descriptor instead. func (*CheckinObservedVersionInfo) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{15} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{17} } func (x *CheckinObservedVersionInfo) GetName() string { @@ -1901,12 +2027,17 @@ type CheckinObserved struct { // Version information about the running program. Should always be included on first checkin, and not again unless // one of the values have changed. VersionInfo *CheckinObservedVersionInfo `protobuf:"bytes,3,opt,name=version_info,json=versionInfo,proto3,oneof" json:"version_info,omitempty"` + // Features are the expected feature flags configurations. + // Added on Elastic Agent v8.7.1. + Features *Features `protobuf:"bytes,4,opt,name=features,proto3" json:"features,omitempty"` + // Index of the either current features configuration or new the configuration provided. + FeaturesIdx uint64 `protobuf:"varint,5,opt,name=features_idx,json=featuresIdx,proto3" json:"features_idx,omitempty"` } func (x *CheckinObserved) Reset() { *x = CheckinObserved{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[16] + mi := &file_elastic_agent_client_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1919,7 +2050,7 @@ func (x *CheckinObserved) String() string { func (*CheckinObserved) ProtoMessage() {} func (x *CheckinObserved) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[16] + mi := &file_elastic_agent_client_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1932,7 +2063,7 @@ func (x *CheckinObserved) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckinObserved.ProtoReflect.Descriptor instead. func (*CheckinObserved) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{16} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{18} } func (x *CheckinObserved) GetToken() string { @@ -1956,6 +2087,20 @@ func (x *CheckinObserved) GetVersionInfo() *CheckinObservedVersionInfo { return nil } +func (x *CheckinObserved) GetFeatures() *Features { + if x != nil { + return x.Features + } + return nil +} + +func (x *CheckinObserved) GetFeaturesIdx() uint64 { + if x != nil { + return x.FeaturesIdx + } + return 0 +} + // Begins a new transaction. // // A started transaction must either have commit or discard called. @@ -1977,7 +2122,7 @@ type StoreBeginTxRequest struct { func (x *StoreBeginTxRequest) Reset() { *x = StoreBeginTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[17] + mi := &file_elastic_agent_client_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1990,7 +2135,7 @@ func (x *StoreBeginTxRequest) String() string { func (*StoreBeginTxRequest) ProtoMessage() {} func (x *StoreBeginTxRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[17] + mi := &file_elastic_agent_client_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2003,7 +2148,7 @@ func (x *StoreBeginTxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreBeginTxRequest.ProtoReflect.Descriptor instead. func (*StoreBeginTxRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{17} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{19} } func (x *StoreBeginTxRequest) GetToken() string { @@ -2047,7 +2192,7 @@ type StoreBeginTxResponse struct { func (x *StoreBeginTxResponse) Reset() { *x = StoreBeginTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[18] + mi := &file_elastic_agent_client_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2060,7 +2205,7 @@ func (x *StoreBeginTxResponse) String() string { func (*StoreBeginTxResponse) ProtoMessage() {} func (x *StoreBeginTxResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[18] + mi := &file_elastic_agent_client_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2073,7 +2218,7 @@ func (x *StoreBeginTxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreBeginTxResponse.ProtoReflect.Descriptor instead. func (*StoreBeginTxResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{18} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{20} } func (x *StoreBeginTxResponse) GetId() string { @@ -2100,7 +2245,7 @@ type StoreGetKeyRequest struct { func (x *StoreGetKeyRequest) Reset() { *x = StoreGetKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[19] + mi := &file_elastic_agent_client_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2113,7 +2258,7 @@ func (x *StoreGetKeyRequest) String() string { func (*StoreGetKeyRequest) ProtoMessage() {} func (x *StoreGetKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[19] + mi := &file_elastic_agent_client_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2126,7 +2271,7 @@ func (x *StoreGetKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreGetKeyRequest.ProtoReflect.Descriptor instead. func (*StoreGetKeyRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{19} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{21} } func (x *StoreGetKeyRequest) GetToken() string { @@ -2164,7 +2309,7 @@ type StoreGetKeyResponse struct { func (x *StoreGetKeyResponse) Reset() { *x = StoreGetKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[20] + mi := &file_elastic_agent_client_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2177,7 +2322,7 @@ func (x *StoreGetKeyResponse) String() string { func (*StoreGetKeyResponse) ProtoMessage() {} func (x *StoreGetKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[20] + mi := &file_elastic_agent_client_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2190,7 +2335,7 @@ func (x *StoreGetKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreGetKeyResponse.ProtoReflect.Descriptor instead. func (*StoreGetKeyResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{20} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{22} } func (x *StoreGetKeyResponse) GetStatus() StoreGetKeyResponse_Status { @@ -2230,7 +2375,7 @@ type StoreSetKeyRequest struct { func (x *StoreSetKeyRequest) Reset() { *x = StoreSetKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[21] + mi := &file_elastic_agent_client_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2243,7 +2388,7 @@ func (x *StoreSetKeyRequest) String() string { func (*StoreSetKeyRequest) ProtoMessage() {} func (x *StoreSetKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[21] + mi := &file_elastic_agent_client_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2256,7 +2401,7 @@ func (x *StoreSetKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreSetKeyRequest.ProtoReflect.Descriptor instead. func (*StoreSetKeyRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{21} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{23} } func (x *StoreSetKeyRequest) GetToken() string { @@ -2304,7 +2449,7 @@ type StoreSetKeyResponse struct { func (x *StoreSetKeyResponse) Reset() { *x = StoreSetKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[22] + mi := &file_elastic_agent_client_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2317,7 +2462,7 @@ func (x *StoreSetKeyResponse) String() string { func (*StoreSetKeyResponse) ProtoMessage() {} func (x *StoreSetKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[22] + mi := &file_elastic_agent_client_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2330,7 +2475,7 @@ func (x *StoreSetKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreSetKeyResponse.ProtoReflect.Descriptor instead. func (*StoreSetKeyResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{22} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{24} } // Deletes a key in the store. @@ -2354,7 +2499,7 @@ type StoreDeleteKeyRequest struct { func (x *StoreDeleteKeyRequest) Reset() { *x = StoreDeleteKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[23] + mi := &file_elastic_agent_client_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2367,7 +2512,7 @@ func (x *StoreDeleteKeyRequest) String() string { func (*StoreDeleteKeyRequest) ProtoMessage() {} func (x *StoreDeleteKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[23] + mi := &file_elastic_agent_client_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2380,7 +2525,7 @@ func (x *StoreDeleteKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDeleteKeyRequest.ProtoReflect.Descriptor instead. func (*StoreDeleteKeyRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{23} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{25} } func (x *StoreDeleteKeyRequest) GetToken() string { @@ -2414,7 +2559,7 @@ type StoreDeleteKeyResponse struct { func (x *StoreDeleteKeyResponse) Reset() { *x = StoreDeleteKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[24] + mi := &file_elastic_agent_client_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2427,7 +2572,7 @@ func (x *StoreDeleteKeyResponse) String() string { func (*StoreDeleteKeyResponse) ProtoMessage() {} func (x *StoreDeleteKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[24] + mi := &file_elastic_agent_client_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2440,7 +2585,7 @@ func (x *StoreDeleteKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDeleteKeyResponse.ProtoReflect.Descriptor instead. func (*StoreDeleteKeyResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{24} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{26} } // Commits the transaction in the store. @@ -2460,7 +2605,7 @@ type StoreCommitTxRequest struct { func (x *StoreCommitTxRequest) Reset() { *x = StoreCommitTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[25] + mi := &file_elastic_agent_client_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2473,7 +2618,7 @@ func (x *StoreCommitTxRequest) String() string { func (*StoreCommitTxRequest) ProtoMessage() {} func (x *StoreCommitTxRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[25] + mi := &file_elastic_agent_client_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2486,7 +2631,7 @@ func (x *StoreCommitTxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCommitTxRequest.ProtoReflect.Descriptor instead. func (*StoreCommitTxRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{25} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{27} } func (x *StoreCommitTxRequest) GetToken() string { @@ -2513,7 +2658,7 @@ type StoreCommitTxResponse struct { func (x *StoreCommitTxResponse) Reset() { *x = StoreCommitTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[26] + mi := &file_elastic_agent_client_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2526,7 +2671,7 @@ func (x *StoreCommitTxResponse) String() string { func (*StoreCommitTxResponse) ProtoMessage() {} func (x *StoreCommitTxResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[26] + mi := &file_elastic_agent_client_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2539,7 +2684,7 @@ func (x *StoreCommitTxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCommitTxResponse.ProtoReflect.Descriptor instead. func (*StoreCommitTxResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{26} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{28} } // Discards the transaction in the store. @@ -2557,7 +2702,7 @@ type StoreDiscardTxRequest struct { func (x *StoreDiscardTxRequest) Reset() { *x = StoreDiscardTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[27] + mi := &file_elastic_agent_client_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2570,7 +2715,7 @@ func (x *StoreDiscardTxRequest) String() string { func (*StoreDiscardTxRequest) ProtoMessage() {} func (x *StoreDiscardTxRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[27] + mi := &file_elastic_agent_client_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2583,7 +2728,7 @@ func (x *StoreDiscardTxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDiscardTxRequest.ProtoReflect.Descriptor instead. func (*StoreDiscardTxRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{27} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{29} } func (x *StoreDiscardTxRequest) GetToken() string { @@ -2610,7 +2755,7 @@ type StoreDiscardTxResponse struct { func (x *StoreDiscardTxResponse) Reset() { *x = StoreDiscardTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[28] + mi := &file_elastic_agent_client_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2623,7 +2768,7 @@ func (x *StoreDiscardTxResponse) String() string { func (*StoreDiscardTxResponse) ProtoMessage() {} func (x *StoreDiscardTxResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[28] + mi := &file_elastic_agent_client_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2636,7 +2781,7 @@ func (x *StoreDiscardTxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDiscardTxResponse.ProtoReflect.Descriptor instead. func (*StoreDiscardTxResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{28} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{30} } // Requests an artifact from the Elastic Agent. @@ -2657,7 +2802,7 @@ type ArtifactFetchRequest struct { func (x *ArtifactFetchRequest) Reset() { *x = ArtifactFetchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[29] + mi := &file_elastic_agent_client_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2670,7 +2815,7 @@ func (x *ArtifactFetchRequest) String() string { func (*ArtifactFetchRequest) ProtoMessage() {} func (x *ArtifactFetchRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[29] + mi := &file_elastic_agent_client_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2683,7 +2828,7 @@ func (x *ArtifactFetchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ArtifactFetchRequest.ProtoReflect.Descriptor instead. func (*ArtifactFetchRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{29} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{31} } func (x *ArtifactFetchRequest) GetToken() string { @@ -2723,7 +2868,7 @@ type ArtifactFetchResponse struct { func (x *ArtifactFetchResponse) Reset() { *x = ArtifactFetchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[30] + mi := &file_elastic_agent_client_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2736,7 +2881,7 @@ func (x *ArtifactFetchResponse) String() string { func (*ArtifactFetchResponse) ProtoMessage() {} func (x *ArtifactFetchResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[30] + mi := &file_elastic_agent_client_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2749,7 +2894,7 @@ func (x *ArtifactFetchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ArtifactFetchResponse.ProtoReflect.Descriptor instead. func (*ArtifactFetchResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{30} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{32} } func (m *ArtifactFetchResponse) GetContentEof() isArtifactFetchResponse_ContentEof { @@ -2807,7 +2952,7 @@ type LogMessage struct { func (x *LogMessage) Reset() { *x = LogMessage{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[31] + mi := &file_elastic_agent_client_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2820,7 +2965,7 @@ func (x *LogMessage) String() string { func (*LogMessage) ProtoMessage() {} func (x *LogMessage) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[31] + mi := &file_elastic_agent_client_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2833,7 +2978,7 @@ func (x *LogMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use LogMessage.ProtoReflect.Descriptor instead. func (*LogMessage) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{31} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{33} } func (x *LogMessage) GetUnitId() string { @@ -2871,7 +3016,7 @@ type LogMessageRequest struct { func (x *LogMessageRequest) Reset() { *x = LogMessageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[32] + mi := &file_elastic_agent_client_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2884,7 +3029,7 @@ func (x *LogMessageRequest) String() string { func (*LogMessageRequest) ProtoMessage() {} func (x *LogMessageRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[32] + mi := &file_elastic_agent_client_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2897,7 +3042,7 @@ func (x *LogMessageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LogMessageRequest.ProtoReflect.Descriptor instead. func (*LogMessageRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{32} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{34} } func (x *LogMessageRequest) GetToken() string { @@ -2923,7 +3068,7 @@ type LogMessageResponse struct { func (x *LogMessageResponse) Reset() { *x = LogMessageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[33] + mi := &file_elastic_agent_client_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2936,7 +3081,7 @@ func (x *LogMessageResponse) String() string { func (*LogMessageResponse) ProtoMessage() {} func (x *LogMessageResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[33] + mi := &file_elastic_agent_client_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2949,7 +3094,7 @@ func (x *LogMessageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LogMessageResponse.ProtoReflect.Descriptor instead. func (*LogMessageResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{33} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{35} } var File_elastic_agent_client_proto protoreflect.FileDescriptor @@ -3117,206 +3262,225 @@ var file_elastic_agent_client_proto_rawDesc = []byte{ 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x22, 0x74, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, - 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, - 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, - 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x55, 0x6e, - 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1a, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, + 0x68, 0x6f, 0x74, 0x22, 0x63, 0x0a, 0x08, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, + 0x2f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x26, 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x51, 0x44, 0x4e, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x52, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x22, 0x27, 0x0a, 0x0b, 0x46, 0x51, 0x44, 0x4e, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, + 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, + 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x49, 0x64, 0x78, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, + 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, + 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, + 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xae, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x75, - 0x6e, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, - 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, - 0x00, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x88, 0x01, - 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, - 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, - 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, - 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x26, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, - 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x09, 0x0a, 0x05, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, - 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, - 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, - 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xfe, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, + 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x05, + 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, + 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, + 0x12, 0x2b, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, + 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x49, 0x64, 0x78, + 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, + 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, + 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, + 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, + 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, + 0x0a, 0x05, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, + 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, + 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, 0x15, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, + 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, + 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x41, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, - 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, - 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x15, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, - 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, - 0x36, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, - 0x6e, 0x0a, 0x15, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x65, 0x6f, 0x66, - 0x42, 0x0d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6f, 0x66, 0x22, - 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, - 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x15, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x50, - 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x10, 0x00, 0x12, - 0x0d, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x10, 0x01, 0x12, 0x09, - 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x04, - 0x2a, 0x68, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, - 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, - 0x47, 0x55, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, - 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, - 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, - 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, - 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x21, 0x0a, 0x08, 0x55, 0x6e, - 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, - 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, - 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, - 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, - 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, - 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, - 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, - 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, - 0x32, 0xc6, 0x01, 0x0a, 0x0c, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x12, 0x39, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x64, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x09, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x64, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, - 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, - 0x07, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, - 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, 0x03, 0x0a, 0x11, 0x45, 0x6c, - 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, - 0x42, 0x0a, 0x07, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x18, + 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x6e, + 0x0a, 0x15, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x65, 0x6f, 0x66, 0x42, + 0x0d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6f, 0x66, 0x22, 0x6d, + 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, + 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, + 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, + 0x11, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x50, 0x0a, + 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x10, 0x00, 0x12, 0x0d, + 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x10, 0x01, 0x12, 0x09, 0x0a, + 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x04, 0x2a, + 0x68, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, + 0x55, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, + 0x48, 0x59, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, + 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, + 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, + 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x21, 0x0a, 0x08, 0x55, 0x6e, 0x69, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, 0x00, + 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, 0x0c, + 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, + 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, + 0x45, 0x42, 0x55, 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, + 0x04, 0x2a, 0x2c, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, + 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x32, + 0xc6, 0x01, 0x0a, 0x0c, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x12, 0x39, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x09, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x14, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, 0x03, 0x0a, 0x11, 0x45, 0x6c, 0x61, + 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x42, + 0x0a, 0x07, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x45, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, - 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, - 0x64, 0x54, 0x78, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, - 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x32, 0x5c, 0x0a, 0x14, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, - 0x68, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, - 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x4d, - 0x0a, 0x0f, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x6f, - 0x67, 0x12, 0x3a, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x14, 0x5a, - 0x0f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, + 0x79, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, + 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, + 0x54, 0x78, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, + 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, + 0x5c, 0x0a, 0x14, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, + 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, + 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, + 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x4d, 0x0a, + 0x0f, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, + 0x12, 0x3a, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x14, 0x5a, 0x0f, + 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, + 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3332,7 +3496,7 @@ func file_elastic_agent_client_proto_rawDescGZIP() []byte { } var file_elastic_agent_client_proto_enumTypes = make([]protoimpl.EnumInfo, 10) -var file_elastic_agent_client_proto_msgTypes = make([]protoimpl.MessageInfo, 35) +var file_elastic_agent_client_proto_msgTypes = make([]protoimpl.MessageInfo, 37) var file_elastic_agent_client_proto_goTypes = []interface{}{ (ConnInfoServices)(0), // 0: proto.ConnInfoServices (State)(0), // 1: proto.State @@ -3357,31 +3521,33 @@ var file_elastic_agent_client_proto_goTypes = []interface{}{ (*UnitExpectedConfig)(nil), // 20: proto.UnitExpectedConfig (*UnitExpected)(nil), // 21: proto.UnitExpected (*CheckinAgentInfo)(nil), // 22: proto.CheckinAgentInfo - (*CheckinExpected)(nil), // 23: proto.CheckinExpected - (*UnitObserved)(nil), // 24: proto.UnitObserved - (*CheckinObservedVersionInfo)(nil), // 25: proto.CheckinObservedVersionInfo - (*CheckinObserved)(nil), // 26: proto.CheckinObserved - (*StoreBeginTxRequest)(nil), // 27: proto.StoreBeginTxRequest - (*StoreBeginTxResponse)(nil), // 28: proto.StoreBeginTxResponse - (*StoreGetKeyRequest)(nil), // 29: proto.StoreGetKeyRequest - (*StoreGetKeyResponse)(nil), // 30: proto.StoreGetKeyResponse - (*StoreSetKeyRequest)(nil), // 31: proto.StoreSetKeyRequest - (*StoreSetKeyResponse)(nil), // 32: proto.StoreSetKeyResponse - (*StoreDeleteKeyRequest)(nil), // 33: proto.StoreDeleteKeyRequest - (*StoreDeleteKeyResponse)(nil), // 34: proto.StoreDeleteKeyResponse - (*StoreCommitTxRequest)(nil), // 35: proto.StoreCommitTxRequest - (*StoreCommitTxResponse)(nil), // 36: proto.StoreCommitTxResponse - (*StoreDiscardTxRequest)(nil), // 37: proto.StoreDiscardTxRequest - (*StoreDiscardTxResponse)(nil), // 38: proto.StoreDiscardTxResponse - (*ArtifactFetchRequest)(nil), // 39: proto.ArtifactFetchRequest - (*ArtifactFetchResponse)(nil), // 40: proto.ArtifactFetchResponse - (*LogMessage)(nil), // 41: proto.LogMessage - (*LogMessageRequest)(nil), // 42: proto.LogMessageRequest - (*LogMessageResponse)(nil), // 43: proto.LogMessageResponse - nil, // 44: proto.CheckinObservedVersionInfo.MetaEntry - (*timestamppb.Timestamp)(nil), // 45: google.protobuf.Timestamp - (*structpb.Struct)(nil), // 46: google.protobuf.Struct - (*emptypb.Empty)(nil), // 47: google.protobuf.Empty + (*Features)(nil), // 23: proto.Features + (*FQDNFeature)(nil), // 24: proto.FQDNFeature + (*CheckinExpected)(nil), // 25: proto.CheckinExpected + (*UnitObserved)(nil), // 26: proto.UnitObserved + (*CheckinObservedVersionInfo)(nil), // 27: proto.CheckinObservedVersionInfo + (*CheckinObserved)(nil), // 28: proto.CheckinObserved + (*StoreBeginTxRequest)(nil), // 29: proto.StoreBeginTxRequest + (*StoreBeginTxResponse)(nil), // 30: proto.StoreBeginTxResponse + (*StoreGetKeyRequest)(nil), // 31: proto.StoreGetKeyRequest + (*StoreGetKeyResponse)(nil), // 32: proto.StoreGetKeyResponse + (*StoreSetKeyRequest)(nil), // 33: proto.StoreSetKeyRequest + (*StoreSetKeyResponse)(nil), // 34: proto.StoreSetKeyResponse + (*StoreDeleteKeyRequest)(nil), // 35: proto.StoreDeleteKeyRequest + (*StoreDeleteKeyResponse)(nil), // 36: proto.StoreDeleteKeyResponse + (*StoreCommitTxRequest)(nil), // 37: proto.StoreCommitTxRequest + (*StoreCommitTxResponse)(nil), // 38: proto.StoreCommitTxResponse + (*StoreDiscardTxRequest)(nil), // 39: proto.StoreDiscardTxRequest + (*StoreDiscardTxResponse)(nil), // 40: proto.StoreDiscardTxResponse + (*ArtifactFetchRequest)(nil), // 41: proto.ArtifactFetchRequest + (*ArtifactFetchResponse)(nil), // 42: proto.ArtifactFetchResponse + (*LogMessage)(nil), // 43: proto.LogMessage + (*LogMessageRequest)(nil), // 44: proto.LogMessageRequest + (*LogMessageResponse)(nil), // 45: proto.LogMessageResponse + nil, // 46: proto.CheckinObservedVersionInfo.MetaEntry + (*timestamppb.Timestamp)(nil), // 47: google.protobuf.Timestamp + (*structpb.Struct)(nil), // 48: google.protobuf.Struct + (*emptypb.Empty)(nil), // 49: google.protobuf.Empty } var file_elastic_agent_client_proto_depIdxs = []int32{ 0, // 0: proto.ConnInfo.services:type_name -> proto.ConnInfoServices @@ -3389,16 +3555,16 @@ var file_elastic_agent_client_proto_depIdxs = []int32{ 6, // 2: proto.StateExpected.state:type_name -> proto.StateExpected.State 2, // 3: proto.ActionRequest.unit_type:type_name -> proto.UnitType 7, // 4: proto.ActionRequest.type:type_name -> proto.ActionRequest.Type - 45, // 5: proto.ActionDiagnosticUnitResult.generated:type_name -> google.protobuf.Timestamp + 47, // 5: proto.ActionDiagnosticUnitResult.generated:type_name -> google.protobuf.Timestamp 8, // 6: proto.ActionResponse.status:type_name -> proto.ActionResponse.Status 14, // 7: proto.ActionResponse.diagnostic:type_name -> proto.ActionDiagnosticUnitResult - 46, // 8: proto.Package.source:type_name -> google.protobuf.Struct - 46, // 9: proto.Meta.source:type_name -> google.protobuf.Struct + 48, // 8: proto.Package.source:type_name -> google.protobuf.Struct + 48, // 9: proto.Meta.source:type_name -> google.protobuf.Struct 16, // 10: proto.Meta.package:type_name -> proto.Package - 46, // 11: proto.DataStream.source:type_name -> google.protobuf.Struct - 46, // 12: proto.Stream.source:type_name -> google.protobuf.Struct + 48, // 11: proto.DataStream.source:type_name -> google.protobuf.Struct + 48, // 12: proto.Stream.source:type_name -> google.protobuf.Struct 18, // 13: proto.Stream.data_stream:type_name -> proto.DataStream - 46, // 14: proto.UnitExpectedConfig.source:type_name -> google.protobuf.Struct + 48, // 14: proto.UnitExpectedConfig.source:type_name -> google.protobuf.Struct 17, // 15: proto.UnitExpectedConfig.meta:type_name -> proto.Meta 18, // 16: proto.UnitExpectedConfig.data_stream:type_name -> proto.DataStream 19, // 17: proto.UnitExpectedConfig.streams:type_name -> proto.Stream @@ -3406,47 +3572,51 @@ var file_elastic_agent_client_proto_depIdxs = []int32{ 1, // 19: proto.UnitExpected.state:type_name -> proto.State 20, // 20: proto.UnitExpected.config:type_name -> proto.UnitExpectedConfig 3, // 21: proto.UnitExpected.log_level:type_name -> proto.UnitLogLevel - 21, // 22: proto.CheckinExpected.units:type_name -> proto.UnitExpected - 22, // 23: proto.CheckinExpected.agent_info:type_name -> proto.CheckinAgentInfo - 2, // 24: proto.UnitObserved.type:type_name -> proto.UnitType - 1, // 25: proto.UnitObserved.state:type_name -> proto.State - 46, // 26: proto.UnitObserved.payload:type_name -> google.protobuf.Struct - 44, // 27: proto.CheckinObservedVersionInfo.meta:type_name -> proto.CheckinObservedVersionInfo.MetaEntry - 24, // 28: proto.CheckinObserved.units:type_name -> proto.UnitObserved - 25, // 29: proto.CheckinObserved.version_info:type_name -> proto.CheckinObservedVersionInfo - 2, // 30: proto.StoreBeginTxRequest.unit_type:type_name -> proto.UnitType - 4, // 31: proto.StoreBeginTxRequest.type:type_name -> proto.StoreTxType - 9, // 32: proto.StoreGetKeyResponse.status:type_name -> proto.StoreGetKeyResponse.Status - 47, // 33: proto.ArtifactFetchResponse.eof:type_name -> google.protobuf.Empty - 2, // 34: proto.LogMessage.unit_type:type_name -> proto.UnitType - 41, // 35: proto.LogMessageRequest.messages:type_name -> proto.LogMessage - 11, // 36: proto.ElasticAgent.Checkin:input_type -> proto.StateObserved - 26, // 37: proto.ElasticAgent.CheckinV2:input_type -> proto.CheckinObserved - 15, // 38: proto.ElasticAgent.Actions:input_type -> proto.ActionResponse - 27, // 39: proto.ElasticAgentStore.BeginTx:input_type -> proto.StoreBeginTxRequest - 29, // 40: proto.ElasticAgentStore.GetKey:input_type -> proto.StoreGetKeyRequest - 31, // 41: proto.ElasticAgentStore.SetKey:input_type -> proto.StoreSetKeyRequest - 33, // 42: proto.ElasticAgentStore.DeleteKey:input_type -> proto.StoreDeleteKeyRequest - 35, // 43: proto.ElasticAgentStore.CommitTx:input_type -> proto.StoreCommitTxRequest - 37, // 44: proto.ElasticAgentStore.DiscardTx:input_type -> proto.StoreDiscardTxRequest - 39, // 45: proto.ElasticAgentArtifact.Fetch:input_type -> proto.ArtifactFetchRequest - 42, // 46: proto.ElasticAgentLog.Log:input_type -> proto.LogMessageRequest - 12, // 47: proto.ElasticAgent.Checkin:output_type -> proto.StateExpected - 23, // 48: proto.ElasticAgent.CheckinV2:output_type -> proto.CheckinExpected - 13, // 49: proto.ElasticAgent.Actions:output_type -> proto.ActionRequest - 28, // 50: proto.ElasticAgentStore.BeginTx:output_type -> proto.StoreBeginTxResponse - 30, // 51: proto.ElasticAgentStore.GetKey:output_type -> proto.StoreGetKeyResponse - 32, // 52: proto.ElasticAgentStore.SetKey:output_type -> proto.StoreSetKeyResponse - 34, // 53: proto.ElasticAgentStore.DeleteKey:output_type -> proto.StoreDeleteKeyResponse - 36, // 54: proto.ElasticAgentStore.CommitTx:output_type -> proto.StoreCommitTxResponse - 38, // 55: proto.ElasticAgentStore.DiscardTx:output_type -> proto.StoreDiscardTxResponse - 40, // 56: proto.ElasticAgentArtifact.Fetch:output_type -> proto.ArtifactFetchResponse - 43, // 57: proto.ElasticAgentLog.Log:output_type -> proto.LogMessageResponse - 47, // [47:58] is the sub-list for method output_type - 36, // [36:47] is the sub-list for method input_type - 36, // [36:36] is the sub-list for extension type_name - 36, // [36:36] is the sub-list for extension extendee - 0, // [0:36] is the sub-list for field type_name + 48, // 22: proto.Features.source:type_name -> google.protobuf.Struct + 24, // 23: proto.Features.fqdn:type_name -> proto.FQDNFeature + 21, // 24: proto.CheckinExpected.units:type_name -> proto.UnitExpected + 22, // 25: proto.CheckinExpected.agent_info:type_name -> proto.CheckinAgentInfo + 23, // 26: proto.CheckinExpected.features:type_name -> proto.Features + 2, // 27: proto.UnitObserved.type:type_name -> proto.UnitType + 1, // 28: proto.UnitObserved.state:type_name -> proto.State + 48, // 29: proto.UnitObserved.payload:type_name -> google.protobuf.Struct + 46, // 30: proto.CheckinObservedVersionInfo.meta:type_name -> proto.CheckinObservedVersionInfo.MetaEntry + 26, // 31: proto.CheckinObserved.units:type_name -> proto.UnitObserved + 27, // 32: proto.CheckinObserved.version_info:type_name -> proto.CheckinObservedVersionInfo + 23, // 33: proto.CheckinObserved.features:type_name -> proto.Features + 2, // 34: proto.StoreBeginTxRequest.unit_type:type_name -> proto.UnitType + 4, // 35: proto.StoreBeginTxRequest.type:type_name -> proto.StoreTxType + 9, // 36: proto.StoreGetKeyResponse.status:type_name -> proto.StoreGetKeyResponse.Status + 49, // 37: proto.ArtifactFetchResponse.eof:type_name -> google.protobuf.Empty + 2, // 38: proto.LogMessage.unit_type:type_name -> proto.UnitType + 43, // 39: proto.LogMessageRequest.messages:type_name -> proto.LogMessage + 11, // 40: proto.ElasticAgent.Checkin:input_type -> proto.StateObserved + 28, // 41: proto.ElasticAgent.CheckinV2:input_type -> proto.CheckinObserved + 15, // 42: proto.ElasticAgent.Actions:input_type -> proto.ActionResponse + 29, // 43: proto.ElasticAgentStore.BeginTx:input_type -> proto.StoreBeginTxRequest + 31, // 44: proto.ElasticAgentStore.GetKey:input_type -> proto.StoreGetKeyRequest + 33, // 45: proto.ElasticAgentStore.SetKey:input_type -> proto.StoreSetKeyRequest + 35, // 46: proto.ElasticAgentStore.DeleteKey:input_type -> proto.StoreDeleteKeyRequest + 37, // 47: proto.ElasticAgentStore.CommitTx:input_type -> proto.StoreCommitTxRequest + 39, // 48: proto.ElasticAgentStore.DiscardTx:input_type -> proto.StoreDiscardTxRequest + 41, // 49: proto.ElasticAgentArtifact.Fetch:input_type -> proto.ArtifactFetchRequest + 44, // 50: proto.ElasticAgentLog.Log:input_type -> proto.LogMessageRequest + 12, // 51: proto.ElasticAgent.Checkin:output_type -> proto.StateExpected + 25, // 52: proto.ElasticAgent.CheckinV2:output_type -> proto.CheckinExpected + 13, // 53: proto.ElasticAgent.Actions:output_type -> proto.ActionRequest + 30, // 54: proto.ElasticAgentStore.BeginTx:output_type -> proto.StoreBeginTxResponse + 32, // 55: proto.ElasticAgentStore.GetKey:output_type -> proto.StoreGetKeyResponse + 34, // 56: proto.ElasticAgentStore.SetKey:output_type -> proto.StoreSetKeyResponse + 36, // 57: proto.ElasticAgentStore.DeleteKey:output_type -> proto.StoreDeleteKeyResponse + 38, // 58: proto.ElasticAgentStore.CommitTx:output_type -> proto.StoreCommitTxResponse + 40, // 59: proto.ElasticAgentStore.DiscardTx:output_type -> proto.StoreDiscardTxResponse + 42, // 60: proto.ElasticAgentArtifact.Fetch:output_type -> proto.ArtifactFetchResponse + 45, // 61: proto.ElasticAgentLog.Log:output_type -> proto.LogMessageResponse + 51, // [51:62] is the sub-list for method output_type + 40, // [40:51] is the sub-list for method input_type + 40, // [40:40] is the sub-list for extension type_name + 40, // [40:40] is the sub-list for extension extendee + 0, // [0:40] is the sub-list for field type_name } func init() { file_elastic_agent_client_proto_init() } @@ -3612,7 +3782,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckinExpected); i { + switch v := v.(*Features); i { case 0: return &v.state case 1: @@ -3624,7 +3794,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnitObserved); i { + switch v := v.(*FQDNFeature); i { case 0: return &v.state case 1: @@ -3636,7 +3806,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckinObservedVersionInfo); i { + switch v := v.(*CheckinExpected); i { case 0: return &v.state case 1: @@ -3648,7 +3818,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckinObserved); i { + switch v := v.(*UnitObserved); i { case 0: return &v.state case 1: @@ -3660,7 +3830,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreBeginTxRequest); i { + switch v := v.(*CheckinObservedVersionInfo); i { case 0: return &v.state case 1: @@ -3672,7 +3842,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreBeginTxResponse); i { + switch v := v.(*CheckinObserved); i { case 0: return &v.state case 1: @@ -3684,7 +3854,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreGetKeyRequest); i { + switch v := v.(*StoreBeginTxRequest); i { case 0: return &v.state case 1: @@ -3696,7 +3866,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreGetKeyResponse); i { + switch v := v.(*StoreBeginTxResponse); i { case 0: return &v.state case 1: @@ -3708,7 +3878,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreSetKeyRequest); i { + switch v := v.(*StoreGetKeyRequest); i { case 0: return &v.state case 1: @@ -3720,7 +3890,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreSetKeyResponse); i { + switch v := v.(*StoreGetKeyResponse); i { case 0: return &v.state case 1: @@ -3732,7 +3902,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDeleteKeyRequest); i { + switch v := v.(*StoreSetKeyRequest); i { case 0: return &v.state case 1: @@ -3744,7 +3914,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDeleteKeyResponse); i { + switch v := v.(*StoreSetKeyResponse); i { case 0: return &v.state case 1: @@ -3756,7 +3926,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreCommitTxRequest); i { + switch v := v.(*StoreDeleteKeyRequest); i { case 0: return &v.state case 1: @@ -3768,7 +3938,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreCommitTxResponse); i { + switch v := v.(*StoreDeleteKeyResponse); i { case 0: return &v.state case 1: @@ -3780,7 +3950,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDiscardTxRequest); i { + switch v := v.(*StoreCommitTxRequest); i { case 0: return &v.state case 1: @@ -3792,7 +3962,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDiscardTxResponse); i { + switch v := v.(*StoreCommitTxResponse); i { case 0: return &v.state case 1: @@ -3804,7 +3974,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArtifactFetchRequest); i { + switch v := v.(*StoreDiscardTxRequest); i { case 0: return &v.state case 1: @@ -3816,7 +3986,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArtifactFetchResponse); i { + switch v := v.(*StoreDiscardTxResponse); i { case 0: return &v.state case 1: @@ -3828,7 +3998,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogMessage); i { + switch v := v.(*ArtifactFetchRequest); i { case 0: return &v.state case 1: @@ -3840,7 +4010,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogMessageRequest); i { + switch v := v.(*ArtifactFetchResponse); i { case 0: return &v.state case 1: @@ -3852,6 +4022,30 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_elastic_agent_client_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogMessageRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_elastic_agent_client_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LogMessageResponse); i { case 0: return &v.state @@ -3864,8 +4058,8 @@ func file_elastic_agent_client_proto_init() { } } } - file_elastic_agent_client_proto_msgTypes[16].OneofWrappers = []interface{}{} - file_elastic_agent_client_proto_msgTypes[30].OneofWrappers = []interface{}{ + file_elastic_agent_client_proto_msgTypes[18].OneofWrappers = []interface{}{} + file_elastic_agent_client_proto_msgTypes[32].OneofWrappers = []interface{}{ (*ArtifactFetchResponse_Content)(nil), (*ArtifactFetchResponse_Eof)(nil), } @@ -3875,7 +4069,7 @@ func file_elastic_agent_client_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_elastic_agent_client_proto_rawDesc, NumEnums: 10, - NumMessages: 35, + NumMessages: 37, NumExtensions: 0, NumServices: 4, },