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);
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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;
        }