var defaultMetricBusServiceName string
var defaultMetricBusServiceDiscriminator string
+var store map[string]*MetricBusService
+var storeLock sync.Mutex
+
func init() {
taskName := strings.ReplaceAll(path.Base(os.Args[0]), "-", "_")
flag.StringVar(&defaultMetricBusServiceName, "metricbus.client.service-name", taskName, "service name to use for publishing metrics")
}
func NewServiceWithDiscriminator(ctx context.Context, instanceDiscriminator string) *MetricBusService {
+ storeLock.Lock()
+ defer storeLock.Unlock()
+
+ if store == nil {
+ store = make(map[string]*MetricBusService)
+ }
+
+ if instance, ok := store[instanceDiscriminator]; ok {
+ return instance
+ }
+
+ instance := newServiceWithDiscriminator(ctx, instanceDiscriminator)
+ store[instanceDiscriminator] = instance
+
+ return instance
+}
+
+func newServiceWithDiscriminator(ctx context.Context, instanceDiscriminator string) *MetricBusService {
childCtx, cancel := context.WithCancel(context.Background())
svc := &MetricBusService{
name: defaultMetricBusServiceName,