func Init(cfg config.ConfigInterface, errorChannel chan error) error { graphiteConfig := cfg.GraphiteConfig() if graphiteConfig.TCPListenPort != "" { go setupTCPListener(graphiteConfig.TCPListenPort, errorChannel) } if graphiteConfig.UDPListenPort != "" { go setupUDPListener(graphiteConfig.UDPListenPort, errorChannel) } return nil }
func NewJobManager(jobConfig config.ConfigInterface, errorChannel chan error, completionChannel chan bool) (*JobManager, error) { result := &JobManager{ jobs: map[string]*Job{}, completionChannel: completionChannel, jobCompletionChannel: make(chan string), } apiToken, err := jobConfig.APIToken() if err != nil { return nil, err } credentials, err := gotelemetry.NewCredentials(apiToken, jobConfig.APIURL()) if err != nil { return nil, err } credentials.SetDebugChannel(errorChannel) result.credentials = credentials submissionInterval := jobConfig.SubmissionInterval() if submissionInterval < time.Second { errorChannel <- gotelemetry.NewLogError("Submission interval automatically set to 1s. You can change this value by adding a `submission_interval` property to your configuration file.") submissionInterval = time.Second } else { errorChannel <- gotelemetry.NewLogError("Submission interval set to %ds", submissionInterval/time.Second) } result.accountStreams = map[string]*gotelemetry.BatchStream{} for _, jobDescription := range jobConfig.Jobs() { jobId := jobDescription.ID() if jobId == "" { return nil, gotelemetry.NewError(500, "Job ID missing and no `flow_tag` provided.") } if !config.CLIConfig.Filter.MatchString(jobId) { continue } if config.CLIConfig.ForceRunOnce { delete(jobDescription, "refresh") } channelTag := jobDescription.ChannelTag() accountStream, ok := result.accountStreams[channelTag] if !ok { var err error accountStream, err = gotelemetry.NewBatchStream(credentials, channelTag, submissionInterval, errorChannel) if err != nil { return nil, err } result.accountStreams[channelTag] = accountStream } job, err := createJob(result, credentials, accountStream, errorChannel, jobDescription, result.jobCompletionChannel, false) if err != nil { return nil, err } if err := result.addJob(job); err != nil { return nil, err } } if len(result.jobs) == 0 { errorChannel <- gotelemetry.NewLogError("No jobs are being scheduled.") return nil, nil } go result.monitorDoneChannel() return result, nil }