func Init() error { initMailQueue() bus.AddHandler("email", sendResetPasswordEmail) bus.AddHandler("email", validateResetPasswordCode) bus.AddHandler("email", sendEmailCommandHandler) bus.AddEventListener(signUpStartedHandler) bus.AddEventListener(signUpCompletedHandler) mailTemplates = template.New("name") mailTemplates.Funcs(template.FuncMap{ "Subject": subjectTemplateFunc, }) templatePattern := filepath.Join(setting.StaticRootPath, setting.Smtp.TemplatesPattern) _, err := mailTemplates.ParseGlob(templatePattern) if err != nil { return err } if !util.IsEmail(setting.Smtp.FromAddress) { return errors.New("Invalid email address for smpt from_adress config") } if setting.EmailCodeValidMinutes == 0 { setting.EmailCodeValidMinutes = 120 } return nil }
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) }
func init() { bus.AddEventListener(handlePluginStateChanged) }