public MarketMonitor(ILogger <TwitterBotCommand> log, IIndex <string, ISentimentTracking> twitterAnalysis, Func <IAnalysisManager> instance, IPublisher publisher) { this.log = log ?? throw new ArgumentNullException(nameof(log)); this.twitterAnalysis = twitterAnalysis?["Twitter"] ?? throw new ArgumentNullException(nameof(twitterAnalysis)); this.instance = instance ?? throw new ArgumentNullException(nameof(instance)); this.publisher = publisher; }
public SentimentMonitor(ILogger <SentimentMonitor> log, IIndex <string, ISentimentTracking> factory, IPublisher publisher) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } this.log = log ?? throw new ArgumentNullException(nameof(log)); log.LogDebug("SentimentMonitor"); twitterAnalysis = factory["Twitter"] ?? throw new ArgumentNullException(nameof(twitterAnalysis)); alpha = factory["Seeking"] ?? throw new ArgumentNullException(nameof(alpha)); this.publisher = publisher ?? throw new ArgumentNullException(nameof(publisher)); }
private Task <IDictionary <string, TrackingResult[]> > Get(ISentimentTracking tracker, string[] keywords, int hours, string type = null) { try { return(tracker.GetTrackingResults(new SentimentRequest(keywords) { Hours = new[] { hours }, Type = type }, CancellationToken.None)); } catch (Exception ex) { log.LogError(ex, "Error"); } return(null); }
private async Task CreateChart(string name, ISentimentTracking tracking, string[] stockItems, string type = null) { int days = 5; var data = await tracking .GetTrackingHistory(new SentimentRequest(stockItems) { Hours = new[] { HoursExtension.GetLastDaysHours(days) }, Type = type }, CancellationToken.None) .ConfigureAwait(false); var selected = data.Where(item => item.Value.Length > 0).ToArray(); foreach (var batch in selected.Batch(5)) { var messageText = new StringBuilder(name + "\r\n"); var currentBlock = batch.ToArray(); IDayChartGenerator chart = chartFactory(name); for (var i = 0; i < currentBlock.Length; i++) { var pair = currentBlock[i]; string stock = pair.Key; if (!stock.StartsWith("$")) { stock = "$" + stock; } if (i > 0) { messageText.Append(' '); } messageText.Append(stock); chart.AddSeriesByDay(pair.Key, pair.Value, days); } byte[] image = await chart.GenerateGraph().ConfigureAwait(false); if (image == null) { log.LogWarning("No image to post"); return; } var message = new MediaMessage(messageText.ToString(), image); publisher.PublishMessage(message); await Task.Delay(TimeSpan.FromMinutes(10)).ConfigureAwait(false); } }
public ChartMonitor( ILogger <ChartMonitor> log, IIndex <string, ISentimentTracking> factory, IPublisher publisher, Func <string, IDayChartGenerator> chartFactory) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } this.log = log; twitterAnalysis = factory["Twitter"] ?? throw new ArgumentNullException(nameof(twitterAnalysis)); alpha = factory["Seeking"] ?? throw new ArgumentNullException(nameof(alpha)); this.publisher = publisher ?? throw new ArgumentNullException(nameof(publisher)); this.chartFactory = chartFactory; }