From 3974a7bd4fd2769a8f296ac6d854db447aa8d0bd Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Mon, 12 Apr 2021 17:24:11 +0200 Subject: [PATCH] Introduce EntitiesById --- pkg/icingadb/entitiesbyid.go | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 pkg/icingadb/entitiesbyid.go diff --git a/pkg/icingadb/entitiesbyid.go b/pkg/icingadb/entitiesbyid.go new file mode 100644 index 00000000..2f7788d6 --- /dev/null +++ b/pkg/icingadb/entitiesbyid.go @@ -0,0 +1,44 @@ +package icingadb + +import ( + "context" + "github.com/icinga/icingadb/pkg/contracts" +) + +type EntitiesById map[string]contracts.Entity + +func (ebi EntitiesById) Keys() []string { + keys := make([]string, 0, len(ebi)) + for k := range ebi { + keys = append(keys, k) + } + + return keys +} + +func (ebi EntitiesById) IDs() []interface{} { + ids := make([]interface{}, 0, len(ebi)) + for _, v := range ebi { + ids = append(ids, v.(contracts.IDer).ID()) + } + + return ids +} + +func (ebi EntitiesById) Entities(ctx context.Context) <-chan contracts.Entity { + entities := make(chan contracts.Entity, 0) + + go func() { + defer close(entities) + + for _, v := range ebi { + select { + case <-ctx.Done(): + return + case entities <- v: + } + } + }() + + return entities +}