func NewManager(sources []source_api.Source, sinkManager sinks.ExternalSinkManager, res, bufferDuration time.Duration, c cache.Cache, useModel bool, modelRes time.Duration, align bool) (Manager, error) { // TimeStore constructor passed to the cluster implementation. tsConstructor := func() store.TimeStore { // TODO(afein): determine default analogy of cache duration to Timestore durations. return store.NewGCStore(store.NewCMAStore(), 5*bufferDuration) } var newCluster model.Cluster = nil if useModel { newCluster = model.NewCluster(tsConstructor, modelRes) } firstSync := time.Now() if align { firstSync = firstSync.Truncate(res).Add(res) } return &realManager{ sources: sources, sinkManager: sinkManager, cache: c, model: newCluster, lastSync: firstSync, resolution: res, align: align, decoder: sink_api.NewDecoder(), sinkStopChan: sinkManager.Sync(), }, nil }
func NewManager(sources []source_api.Source, sinkManager sinks.ExternalSinkManager, res, bufferDuration time.Duration, c cache.Cache, useModel bool, modelRes time.Duration) (Manager, error) { var newModel model.Model = nil if useModel { newModel = model.NewModel(modelRes) // Temporary semi-hack to get model storage garbage-collected. c.AddCacheListener(newModel.GetCacheListener()) } return &realManager{ sources: sources, sinkManager: sinkManager, cache: c, model: newModel, lastSync: time.Now(), resolution: res, decoder: sink_api.NewDecoder(), sinkStopChan: sinkManager.Sync(), }, nil }