Example #1
0
        public void TestConstructor()
        {
            TestSubscriberProvider provider = new TestSubscriberProvider();

            using (ScGimp gimp = new ScGimp(provider, provider, provider))
            {
                Assert.IsNotNull(gimp);
            }
        }
Example #2
0
        public async Task TestProcessSpectrum()
        {
            TestSubscriberProvider provider = new TestSubscriberProvider();
            ScGimpCoreConfig       config   = new ScGimpCoreConfig();

            config.Options.ProcessType = ScGimpProcessType.SpectrumFeed;

            using (ScGimp gimp = new ScGimp(provider, provider, provider, config.Options))
            {
                await gimp.Process();

                Assert.IsNotNull(gimp.SpectrumFeed);
                Assert.IsTrue(gimp.SpectrumFeed.Count() > 0);
            }
        }
Example #3
0
        public async Task TestStartAndStop()
        {
            TestSubscriberProvider provider = new TestSubscriberProvider();
            ScGimpCoreConfig       config   = new ScGimpCoreConfig();

            config.Options.ProcessType = ScGimpProcessType.RssFeed;

            using (ScGimp gimp = new ScGimp(provider, provider, provider, config.Options))
            {
                await gimp.Start();

                System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1d));

                await gimp.Stop();
            }
        }
Example #4
0
        public async Task TestSpectrumFeedNotifications()
        {
            TestSubscriberProvider provider = new TestSubscriberProvider();
            ScGimpCoreConfig       config   = new ScGimpCoreConfig();

            config.Options.ProcessType = ScGimpProcessType.SpectrumFeed;

            using (ScGimp gimp = new ScGimp(provider, provider, provider, config.Options))
            {
                await gimp.Notify
                (
                    new SpectrumThread[]
                {
                    SpectrumThread.FromThread
                    (
                        new SpectrumThread.Thread()
                    {
                        id           = "1",
                        subject      = "Test announcement Publish to LIVE!",
                        slug         = "test-announcement-publish-to-live",
                        channel_id   = "1",
                        time_created = (int)DateTimeOffset.Now.AddDays(-1).ToUnixTimeMilliseconds()
                    }
                    ),
                    SpectrumThread.FromThread
                    (
                        new SpectrumThread.Thread()
                    {
                        id           = "2",
                        subject      = "Test announcement Release notes",
                        slug         = "test-announcement-release-notes",
                        channel_id   = "1",
                        time_created = (int)DateTimeOffset.Now.AddDays(-2).ToUnixTimeMilliseconds()
                    }
                    )
                }
                );

                await Task.Delay(TimeSpan.FromSeconds(60));

                Assert.IsTrue(gimp.Errors.Count() == 0);
            }
        }
Example #5
0
        public async Task TestAntiSpam()
        {
            TestSubscriberProvider provider = new TestSubscriberProvider();
            ScGimpCoreConfig       config   = new ScGimpCoreConfig();

            FeedItem[] items = new FeedItem[]
            {
                new FeedItem()
                {
                    Content     = "Test around the verse content.",
                    Element     = null,
                    Link        = "https://www.robertsspaceindustries.com/",
                    PublishDate = DateTimeOffset.Now.AddDays(1d),
                    Title       = "Test around the verse",
                    Type        = FeedItemType.Sale
                },
                new FeedItem()
                {
                    Content     = "Test bugsmashers content.",
                    Element     = null,
                    Link        = "https://www.robertsspaceindustries.com/",
                    PublishDate = DateTimeOffset.Now.AddDays(1d),
                    Title       = "Test bugsmashers",
                    Type        = FeedItemType.Bugsmashers
                }
            };

            config.Options.ProcessType = ScGimpProcessType.RssFeed;

            using (ScGimp gimp = new ScGimp(provider, provider, provider, config.Options))
            {
                await gimp.Notify(items);

                await Task.Delay(TimeSpan.FromSeconds(5));

                await gimp.Notify(items);

                Assert.IsTrue(gimp.Errors.Where(e => !e.Message.Contains("Spam")).Count() == 0);
            }
        }
Example #6
0
        public async Task TestRssFeedNotifications()
        {
            TestSubscriberProvider provider = new TestSubscriberProvider();
            ScGimpCoreConfig       config   = new ScGimpCoreConfig();

            config.Options.ProcessType = ScGimpProcessType.RssFeed;

            using (ScGimp gimp = new ScGimp(provider, provider, provider, config.Options))
            {
                await gimp.Notify
                (
                    new FeedItem[]
                {
                    new FeedItem()
                    {
                        Content     = "Test around the verse content.",
                        Element     = null,
                        Link        = "https://www.robertsspaceindustries.com/",
                        PublishDate = DateTimeOffset.Now.AddDays(1d),
                        Title       = "Test around the verse",
                        Type        = FeedItemType.Sale
                    },
                    new FeedItem()
                    {
                        Content     = "Test bugsmashers content.",
                        Element     = null,
                        Link        = "https://www.robertsspaceindustries.com/",
                        PublishDate = DateTimeOffset.Now.AddDays(1d),
                        Title       = "Test bugsmashers",
                        Type        = FeedItemType.Bugsmashers
                    }
                }
                );

                Assert.IsTrue(gimp.Errors.Count() == 0);
            }
        }
Example #7
0
        public async Task TestStoreFeedNotifications()
        {
            TestSubscriberProvider provider = new TestSubscriberProvider();
            ScGimpCoreConfig       config   = new ScGimpCoreConfig();

            config.Options.ProcessType = ScGimpProcessType.StoreFeed;

            using (ScGimp gimp = new ScGimp(provider, provider, provider, config.Options))
            {
                await gimp.Notify
                (
                    new StoreItem[]
                {
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 200.50m,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store warbond dingy LTI",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    },
                    new StoreItem()
                    {
                        Element  = null,
                        Cost     = 45,
                        Url      = "https://www.robertsspaceindustries.com/",
                        Currency = "USD",
                        Title    = "Test store float package",
                        Type     = StoreItemType.Unknown
                    }
                }
                );

                Assert.IsTrue(gimp.Errors.Count() == 0);
            }
        }
Example #8
0
        public static async Task Worker(TextWriter log, CancellationToken token)
        {
            try
            {
                _log = log;

                ScGimpWebJobConfig config = new ScGimpWebJobConfig();

                _debug = config.Debug;

                object provider = null;

                if (config.Debug)
                {
                    provider = new DummySubscriberProvider();

                    await log.WriteLineAsync($"WARNING: Debug mode is enabled.");
                }
                else
                {
                    provider = new DbProvider();
                }

                await log.WriteLineAsync($"Gimp subscriber provider: {provider.GetType().FullName}");

                await log.WriteLineAsync($"Gimp discord webhook provider: {provider.GetType().FullName}");

                await log.WriteLineAsync($"Gimp notification log provider: {provider.GetType().FullName}");

                using
                (
                    ScGimp gimp = new ScGimp
                                  (
                        (ISubscriberProvider)provider,
                        (IDiscordWebhookProvider)provider,
                        (INotificationLogProvider)provider,
                        config.Options
                                  )
                )
                {
                    gimp.Error              += OnError;
                    gimp.Processing         += OnProcessing;
                    gimp.Processed          += OnProcessed;
                    gimp.RssFeedUpdate      += OnRssFeedUpdate;
                    gimp.SpectrumFeedUpdate += OnSpectrumFeedUpdate;
                    gimp.StoreFeedUpdate    += OnStoreFeedUpdate;

                    await log.WriteLineAsync($"Gimp process type: {Enum.GetName(typeof(ScGimpProcessType), gimp.GetScGimpProcessType())}");

                    await log.WriteLineAsync($"Gimp default sleep: {gimp.Options.Sleep.ToString()}");

                    await log.WriteLineAsync($"Gimp after hours sleep multiplier: {gimp.Options.AfterHoursSleepMultiplier.ToString()}");

                    await log.WriteLineAsync($"Gimp outside comm link sleep multiplier: {gimp.Options.OutsideCommLinkSleepMultiplier.ToString()}");

                    await log.WriteLineAsync($"CIG comm link end: {gimp.Options.CigCommLinkEnd.ToString()}");

                    await log.WriteLineAsync($"CIG comm link start: {gimp.Options.CigCommLinkStart.ToString()}");

                    await log.WriteLineAsync($"CIG working hours end: {gimp.Options.CigWorkingHoursEnd.ToString()}");

                    await log.WriteLineAsync($"CIG working hours start: {gimp.Options.CigWorkingHoursStart.ToString()}");

                    await log.WriteLineAsync($"Starting the gimp.");

                    await gimp.Start();

                    await log.WriteLineAsync($"The gimp has started.");

                    while (!token.IsCancellationRequested)
                    {
                        try
                        {
                            // auto restart if not running.
                            if
                            (
                                gimp.Status == null ||
                                gimp.Status.Value == TaskStatus.Faulted ||
                                gimp.Status.Value == TaskStatus.Canceled ||
                                gimp.Status.Value == TaskStatus.RanToCompletion ||
                                (
                                    gimp.LastUpdated.HasValue &&
                                    gimp.LastUpdated.Value.ToUniversalTime() < DateTimeOffset.UtcNow.AddHours(-1d)
                                )
                            )
                            {
                                await log.WriteLineAsync($"Restarting the gimp.");

                                await gimp.Start();

                                await log.WriteLineAsync($"The gimp has restarted.");
                            }

                            await Task.Delay(TimeSpan.FromMinutes(5), token);
                        }
                        catch (TaskCanceledException) { }
                        catch (Exception ex)
                        {
                            LogException(ex);
                        }
                    }

                    gimp.Processing         -= OnProcessing;
                    gimp.Processed          -= OnProcessed;
                    gimp.RssFeedUpdate      -= OnRssFeedUpdate;
                    gimp.SpectrumFeedUpdate -= OnSpectrumFeedUpdate;
                    gimp.StoreFeedUpdate    -= OnStoreFeedUpdate;
                    gimp.Error -= OnError;

                    await log.WriteLineAsync($"Stopping the gimp.");

                    await gimp.Stop();

                    await log.WriteLineAsync($"The gimp has stopped.");
                }
            }
            catch (TaskCanceledException) { }
            catch (Exception exception)
            {
                LogException(exception);
            }
        }