in internal/beater/beater.go [611:675]
func (s *Runner) waitReady(
ctx context.Context,
tracer *apm.Tracer,
) error {
var preconditions []func(context.Context) error
var esOutputClient *elasticsearch.Client
if s.elasticsearchOutputConfig != nil {
esConfig := elasticsearch.DefaultConfig()
err := s.elasticsearchOutputConfig.Unpack(&esConfig)
if err != nil {
return err
}
esOutputClient, err = elasticsearch.NewClient(esConfig)
if err != nil {
return err
}
}
// libbeat and go-elasticsearch both ensure a minimum level of Basic.
//
// If any configured features require a higher license level, add a
// precondition which checks this.
if esOutputClient != nil {
requiredLicenseLevel := licenser.Basic
licensedFeature := ""
if s.config.Sampling.Tail.Enabled {
requiredLicenseLevel = licenser.Platinum
licensedFeature = "tail-based sampling"
}
if requiredLicenseLevel > licenser.Basic {
preconditions = append(preconditions, func(ctx context.Context) error {
license, err := getElasticsearchLicense(ctx, esOutputClient)
if err != nil {
return fmt.Errorf("error getting Elasticsearch licensing information: %w", err)
}
if licenser.IsExpired(license) {
return errors.New("the Elasticsearch license is expired")
}
if license.Type == licenser.Trial || license.Cover(requiredLicenseLevel) {
return nil
}
return fmt.Errorf(
"invalid license level %s: %s requires license level %s",
license.Type, licensedFeature, requiredLicenseLevel,
)
})
}
preconditions = append(preconditions, func(ctx context.Context) error {
return queryClusterUUID(ctx, esOutputClient)
})
}
if len(preconditions) == 0 {
return nil
}
check := func(ctx context.Context) error {
for _, pre := range preconditions {
if err := pre(ctx); err != nil {
return err
}
}
return nil
}
return waitReady(ctx, s.config.WaitReadyInterval, tracer, s.logger, check)
}