func InitCollectorController(metrics met.Backend) { sec := setting.Cfg.Section("event_publisher") cmd := &m.ClearCollectorSessionCommand{ InstanceId: setting.InstanceId, } if err := bus.Dispatch(cmd); err != nil { log.Fatal(0, "failed to clear collectorSessions", err) } if sec.Key("enabled").MustBool(false) { url := sec.Key("rabbitmq_url").String() exchange := sec.Key("exchange").String() exch := rabbitmq.Exchange{ Name: exchange, ExchangeType: "topic", Durable: true, } q := rabbitmq.Queue{ Name: "", Durable: false, AutoDelete: true, Exclusive: true, } consumer := rabbitmq.Consumer{ Url: url, Exchange: &exch, Queue: &q, BindingKey: []string{"INFO.monitor.*", "INFO.collector.*"}, } err := consumer.Connect() if err != nil { log.Fatal(0, "failed to start event.consumer.", err) } consumer.Consume(eventConsumer) } else { //tap into the update/add/Delete events emitted when monitors are modified. bus.AddEventListener(EmitUpdateMonitor) bus.AddEventListener(EmitAddMonitor) bus.AddEventListener(EmitDeleteMonitor) bus.AddEventListener(HandleCollectorConnected) bus.AddEventListener(HandleCollectorDisconnected) } metricsRecvd = metrics.NewCount("collector-ctrl.metrics-recv") bufCh = make(chan m.MetricDefinition, runtime.NumCPU()*100) go metricpublisher.ProcessBuffer(bufCh) }
func InitCollectorController() { sec := setting.Cfg.Section("event_publisher") // get our instance-id dataPath := setting.DataPath + "/instance-id" log.Info("instance-id path: " + dataPath) fs, err := os.Open(dataPath) if err != nil { fs, err = os.Create(dataPath) if err != nil { log.Fatal(0, "failed to create instance-id file", err) } defer fs.Close() instanceId = uuid.NewV4().String() if _, err := fs.Write([]byte(instanceId)); err != nil { log.Fatal(0, "failed to write instanceId to file", err) } } else { defer fs.Close() content, err := ioutil.ReadAll(fs) if err != nil { log.Fatal(0, "failed to read instanceId", err) } instanceId = strings.Split(string(content), "\n")[0] } if instanceId == "" { log.Fatal(0, "invalid instanceId. check "+dataPath, nil) } cmd := &m.ClearCollectorSessionCommand{ InstanceId: instanceId, } if err := bus.Dispatch(cmd); err != nil { log.Fatal(0, "failed to clear collectorSessions", err) } if sec.Key("enabled").MustBool(false) { url := sec.Key("rabbitmq_url").String() exchange := sec.Key("exchange").String() exch := rabbitmq.Exchange{ Name: exchange, ExchangeType: "topic", Durable: true, } q := rabbitmq.Queue{ Name: "", Durable: false, AutoDelete: true, Exclusive: true, } consumer := rabbitmq.Consumer{ Url: url, Exchange: &exch, Queue: &q, BindingKey: []string{"INFO.monitor.*", "INFO.collector.*"}, } err := consumer.Connect() if err != nil { log.Fatal(0, "failed to start event.consumer.", err) } consumer.Consume(eventConsumer) } else { //tap into the update/add/Delete events emitted when monitors are modified. bus.AddEventListener(EmitUpdateMonitor) bus.AddEventListener(EmitAddMonitor) bus.AddEventListener(EmitDeleteMonitor) bus.AddEventListener(HandleCollectorConnected) bus.AddEventListener(HandleCollectorDisconnected) } bufCh = make(chan m.MetricDefinition, runtime.NumCPU()) go metricpublisher.ProcessBuffer(bufCh) }