internal/pkg/dl/agent.go (66 lines of code) (raw):

// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one // or more contributor license agreements. Licensed under the Elastic License; // you may not use this file except in compliance with the Elastic License. package dl import ( "context" "encoding/json" "errors" "fmt" "github.com/elastic/fleet-server/v7/internal/pkg/bulk" "github.com/elastic/fleet-server/v7/internal/pkg/dsl" "github.com/elastic/fleet-server/v7/internal/pkg/es" "github.com/elastic/fleet-server/v7/internal/pkg/model" ) const ( FieldAccessAPIKeyID = "access_api_key_id" ) var ( QueryAgentByAssessAPIKeyID = prepareAgentFindByAccessAPIKeyID() QueryAgentByID = prepareAgentFindByID() QueryAgentByEnrollmentID = prepareAgentFindByEnrollmentID() ) func prepareAgentFindByID() *dsl.Tmpl { return prepareAgentFindByField(FieldID) } func prepareAgentFindByAccessAPIKeyID() *dsl.Tmpl { return prepareAgentFindByField(FieldAccessAPIKeyID) } func prepareAgentFindByEnrollmentID() *dsl.Tmpl { return prepareAgentFindByField(FieldEnrollmentID) } func prepareAgentFindByField(field string) *dsl.Tmpl { return prepareFindByField(field, map[string]interface{}{"version": true}) } func GetAgent(ctx context.Context, bulker bulk.Bulk, agentID string, opt ...Option) (model.Agent, error) { o := newOption(FleetAgents, opt...) var agent model.Agent data, err := bulker.ReadRaw(ctx, o.indexName, agentID) if err != nil { if errors.Is(err, es.ErrElasticNotFound) { return model.Agent{}, ErrNotFound } else { return model.Agent{}, err } } err = json.Unmarshal(data.Source, &agent) if err != nil { return model.Agent{}, err } agent.Id = agentID agent.SeqNo = data.SeqNo agent.Version = data.Version return agent, err } func FindAgent(ctx context.Context, bulker bulk.Bulk, tmpl *dsl.Tmpl, name string, v interface{}, opt ...Option) (model.Agent, error) { o := newOption(FleetAgents, opt...) res, err := SearchWithOneParam(ctx, bulker, tmpl, o.indexName, name, v) if err != nil { return model.Agent{}, fmt.Errorf("failed searching for agent: %w", err) } if len(res.Hits) == 0 { return model.Agent{}, ErrNotFound } var agent model.Agent if err = res.Hits[0].Unmarshal(&agent); err != nil { return model.Agent{}, fmt.Errorf("could not unmarshal ES document into model.Agent: %w", err) } return agent, nil }