Ejemplo n.º 1
0
        protected override async void Process()
        {
            Log.Message(LogLevel.Info, "[Process] - Starting processor.");
            while (_isEnabled)
            {
                try
                {
                    DateTime now = DateTime.UtcNow;
                    Entity.SiteStatistics latestReport;
                    using (var context = MonitoringDataContextFactory.CreateReadOnlyContext())
                    {
                        latestReport = await context.SiteStatisticsReport
                                       .OrderByDescending(x => x.DateCreated)
                                       .FirstOrDefaultNoLockAsync()
                                       .ConfigureAwait(false);
                    }

                    if (latestReport == null || latestReport.DateCreated.Date < now.Date)
                    {
                        Log.Message(LogLevel.Info, "[Process] - Starting process...");
                        await ProcessInternal().ConfigureAwait(false);
                    }

                    await Task.Delay(TimeSpan.FromMinutes(_delay), _token).ConfigureAwait(false);
                }
                catch (TaskCanceledException)
                {
                    Log.Message(LogLevel.Info, "[Process] - Processing canceled");
                    break;
                }
            }

            _isRunning = false;
            Log.Message(LogLevel.Info, "[Process] - Stopped processor.");
        }
Ejemplo n.º 2
0
        private async Task <IWriterResult> SaveReport(Infrastructure.Incapsula.Common.Classes.SiteStatistics incoming)
        {
            try
            {
                using (var context = MonitoringDataContextFactory.CreateContext())
                {
                    Cryptopia.Entity.SiteStatistics report = new Cryptopia.Entity.SiteStatistics()
                    {
                        DateCreated = DateTime.UtcNow
                    };
                    context.SiteStatisticsReport.Add(report);
                    await context.SaveChangesAsync();

                    if (incoming != null)
                    {
                        if (incoming.VisitsTimeseries != null)
                        {
                            report.VisitSummaries = new Collection <Cryptopia.Entity.VisitSummary>();

                            foreach (var visit in incoming.VisitsTimeseries)
                            {
                                var vs = new Cryptopia.Entity.VisitSummary
                                {
                                    SiteStatisticsId = report.Id,
                                    Name             = visit.Name
                                };

                                vs.Visits = visit.ProcessedData.Select(v => new Cryptopia.Entity.VisitDataPoint
                                {
                                    Parent                   = vs,
                                    DateOccurred             = v.Day,
                                    DateOccurredMilliseconds = v.Day.ToTotalMilliseconds(),
                                    NumberOccurred           = v.Number
                                }).ToList();

                                report.VisitSummaries.Add(vs);
                            }
                        }

                        if (incoming.RequestsGeoDistributionSummary != null)
                        {
                            var distribution = new Cryptopia.Entity.GeoDistributionSummary()
                            {
                                SiteStatisticsId = report.Id
                            };
                            distribution.DistributionData = incoming.RequestsGeoDistributionSummary.ProcessedData
                                                            .Select(g => new Cryptopia.Entity.GeoDistributionDataPoint
                            {
                                DateOccurred             = g.Day,
                                DateOccurredMilliseconds = g.Day.ToTotalMilliseconds(),
                                NumberOccurred           = g.Number,
                                Location = g.Location
                            }).ToList();

                            report.GeoDistribution = distribution;
                        }

                        if (incoming.VisitsDistributionSummary != null)
                        {
                            report.VisitDistribution = new Collection <Cryptopia.Entity.VisitDistributionSummary>();

                            foreach (var summary in incoming.VisitsDistributionSummary)
                            {
                                var vds = new Cryptopia.Entity.VisitDistributionSummary
                                {
                                    Name = summary.Name
                                };

                                vds.VisitDistibutionData = summary.ProcessedData.Select(v => new Cryptopia.Entity.VisitDistributionDataPoint
                                {
                                    Parent                   = vds,
                                    DateOccurred             = v.Day,
                                    DateOccurredMilliseconds = v.Day.ToTotalMilliseconds(),
                                    CountryCode              = v.CountryCode,
                                    NumberOccurred           = v.Number
                                }).ToList();

                                report.VisitDistribution.Add(vds);
                            }
                        }

                        if (incoming.Caching != null)
                        {
                            report.CachingReport = new Cryptopia.Entity.CachingReport
                            {
                                SiteStatisticsId = report.Id,
                                SavedRequests    = incoming.Caching.SavedRequests,
                                TotalRequests    = incoming.Caching.TotalRequests,
                                SavedBytes       = incoming.Caching.SavedBytes,
                                TotalBytes       = incoming.Caching.TotalBytes
                            };
                        }

                        if (incoming.CachingTimeseries != null)
                        {
                            report.CachingSummaries = new Collection <Cryptopia.Entity.CachingSummary>();

                            foreach (var summary in incoming.CachingTimeseries)
                            {
                                var cs = new Cryptopia.Entity.CachingSummary
                                {
                                    Name = summary.Name
                                };

                                cs.CachingData = summary.ProcessedData.Select(c => new Cryptopia.Entity.CachingDataPoint
                                {
                                    Parent                   = cs,
                                    DateOccurred             = c.Day,
                                    DateOccurredMilliseconds = c.Day.ToTotalMilliseconds(),
                                    NumberOccurred           = c.Number
                                }).ToList();

                                report.CachingSummaries.Add(cs);
                            }
                        }

                        if (incoming.HitsTimeseries != null)
                        {
                            report.HitsSummaries = new Collection <Cryptopia.Entity.HitsSummary>();

                            foreach (var hit in incoming.HitsTimeseries)
                            {
                                var hs = new Cryptopia.Entity.HitsSummary
                                {
                                    Name = hit.Name
                                };

                                hs.HitsData = hit.ProcessedData.Select(h => new Cryptopia.Entity.HitDataPoint
                                {
                                    Parent                   = hs,
                                    DateOccurred             = h.Day,
                                    DateOccurredMilliseconds = h.Day.ToTotalMilliseconds(),
                                    NumberOccurred           = h.Number
                                }).ToList();

                                report.HitsSummaries.Add(hs);
                            }
                        }

                        if (incoming.Threats != null)
                        {
                            report.Threats = new Collection <Cryptopia.Entity.Threat>();

                            foreach (var threat in incoming.Threats)
                            {
                                report.Threats.Add(new Cryptopia.Entity.Threat
                                {
                                    Name         = threat.Name,
                                    Incidents    = threat.Incidents,
                                    Status       = threat.Status,
                                    StatusText   = threat.StatusText,
                                    StatusTextId = threat.StatusTextId,
                                    FollowUp     = threat.FollowUp,
                                    FollowupText = threat.FollowupText,
                                    FollowupUrl  = threat.FollowupUrl
                                });
                            }
                        }

                        if (incoming.BandwidthTimeseries != null)
                        {
                            report.BandwidthSummaries = new Collection <Cryptopia.Entity.BandwidthSummary>();

                            foreach (var summary in incoming.BandwidthTimeseries)
                            {
                                var bs = new Cryptopia.Entity.BandwidthSummary
                                {
                                    Name = summary.Name
                                };

                                bs.BandwidthData = summary.ProcessedData.Select(b => new Cryptopia.Entity.BandwidthDataPoint
                                {
                                    Parent                   = bs,
                                    DateOccurred             = b.Day,
                                    DateOccurredMilliseconds = b.Day.ToTotalMilliseconds(),
                                    NumberOccurred           = b.Number
                                }).ToList();

                                report.BandwidthSummaries.Add(bs);
                            }
                        }
                    }

                    var returnCode = await context.SaveChangesAsync();

                    return(new WriterResult(true, "Successfully created statistics report in database."));
                }
            }
            catch (Exception ex)
            {
                Log.Exception(ex.Message, ex);
            }

            return(new WriterResult(false, "Something went wrong creating the statistics report in the database."));
        }