-
Notifications
You must be signed in to change notification settings - Fork 0
/
multiple.go
54 lines (46 loc) · 1.75 KB
/
multiple.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package config
import (
"github.com/kube-cicd/pipelines-feedback-core/pkgs/apis/pipelinesfeedback.keskad.pl/v1alpha1"
"github.com/kube-cicd/pipelines-feedback-core/pkgs/contract"
"github.com/kube-cicd/pipelines-feedback-core/pkgs/logging"
"github.com/pkg/errors"
)
func CreateMultipleCollector(collectors []ConfigurationCollector, logger *logging.InternalLogger) *MultipleCollector {
return &MultipleCollector{collectors: collectors, logger: logger}
}
// MultipleCollector is an "adapter of adapters" pattern that lets you use multiple configuration sources at a single time
type MultipleCollector struct {
collectors []ConfigurationCollector
logger *logging.InternalLogger
}
func (mc *MultipleCollector) SetLogger(logger *logging.InternalLogger) {
mc.logger = logger
}
func (mc *MultipleCollector) CanHandle(adapterName string) bool {
return true
}
func (mc *MultipleCollector) GetImplementationName() string {
return "multiple"
}
func (mc *MultipleCollector) CollectInitially() ([]*v1alpha1.PFConfig, error) {
all := make([]*v1alpha1.PFConfig, 0)
for _, collector := range mc.collectors {
collected, err := collector.CollectInitially()
if err != nil {
return all, errors.Wrapf(err, "one of configuration collectors - '%v' failed", collector.GetImplementationName())
}
all = append(all, collected...)
}
return all, nil
}
func (mc *MultipleCollector) CollectOnRequest(info contract.PipelineInfo) ([]*v1alpha1.PFConfig, error) {
all := make([]*v1alpha1.PFConfig, 0)
for _, collector := range mc.collectors {
collected, err := collector.CollectOnRequest(info)
if err != nil {
return all, errors.Wrapf(err, "one of configuration collectors - '%v' failed", collector.GetImplementationName())
}
all = append(all, collected...)
}
return all, nil
}