public ExpireTracking(IScheduler scheduler, ILogger <ExpireTracking> logger, TrackingConfiguration config) { if (scheduler == null) { throw new ArgumentNullException(nameof(scheduler)); } this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); this.config = config ?? throw new ArgumentNullException(nameof(config)); logger.LogDebug("Constructing. Expire: {0} Scan: {0}", config.Expire, config.ScanTime); subscription = Observable.Interval(config.ScanTime, scheduler).Subscribe(item => Scan()); }
public PersistencyTracking(ILogger <PersistencyTracking> logger, TrackingConfiguration configuration, IRatingStream stream, IRestorer restorer) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } if (restorer == null) { throw new ArgumentNullException(nameof(restorer)); } if (string.IsNullOrEmpty(configuration?.Persistency)) { throw new ArgumentNullException(nameof(configuration.Persistency)); } this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); logger.LogInformation("Creating persistency {0}", configuration.Persistency); Path.GetDirectoryName(configuration.Persistency).EnsureDirectoryExistence(); restorer.Load(configuration.Persistency); var subscription = stream.Stream.Subscribe(item => Process(item.Item1, item.Item2)); disposable.Add(subscription); configuration.Persistency.Backup(); streamWriter = new StreamWriter(configuration.Persistency, false); disposable.Add(streamWriter); writer = new CsvWriter(streamWriter, CultureInfo.CurrentCulture); disposable.Add(writer); writer.WriteField("Date"); writer.WriteField("Tag"); writer.WriteField("Type"); writer.WriteField("Id"); writer.WriteField("Rating"); writer.NextRecord(); }