Exemplo n.º 1
0
 private List <string> GetUserAliasesForTracking()
 {
     using (var context = new DatabaseObjectsDataContext(_databaseConnectionString))
     {
         return(context.UserAliasesForTrackings.Select(u => u.Alias.ToLowerInvariant()).ToList());
     }
 }
Exemplo n.º 2
0
        private List <JobStatistic> GetJobStatistics(
            AlertingRule rule,
            IEnumerable <Guid> jobIds,
            IEnumerable <string> jobNameFilters,
            IDictionary <string, string> userAliases,
            int lookbackDays)
        {
            using (var context = new DatabaseObjectsDataContext(_databaseConnectionString))
            {
                DateTime minimumJobEndTime = DateTime.UtcNow.AddDays(-lookbackDays);

                return(jobIds
                       .Select(id => context.JobStatistics.Where(stat => stat.Id == id).First())
                       .Where(jobStat => jobStat.EndTime == null || jobStat.EndTime > minimumJobEndTime)
                       .Where(jobStat => !rule.ShouldFilterJobName || jobNameFilters.All(filter => jobStat.Name.IndexOf(filter, StringComparison.InvariantCultureIgnoreCase) < 0))
                       .Where(jobStat => userAliases.ContainsKey(jobStat.TrueUserName.ToLowerInvariant()))
                       .ToList());
            }
        }
Exemplo n.º 3
0
        private static void UpdateAliasesInDatabase(IEnumerable <string> uniqueAliases)
        {
            using (DatabaseObjectsDataContext context = new DatabaseObjectsDataContext(Properties.Settings.Default.JobStatisticsConnectionString))
            {
#if DEBUG
                context.Log = Console.Out;
#endif

                // find out all records to be deleted
                var uniqueAliasesDictionary = uniqueAliases.ToDictionary(a => a);

                var allAliasesToBeDeleted = context.UserAliasesForTrackings
                                            .ToList()
                                            .Except(uniqueAliases.Select(a => new UserAliasesForTracking()
                {
                    Alias = a
                }), new UserAliasesForTrackingEquityComparer())
                                            .ToList();

                context.UserAliasesForTrackings.DeleteAllOnSubmit(allAliasesToBeDeleted);

                // find out all records to be added
                var allAliasesToBeAdded = uniqueAliases
                                          .Except(context.UserAliasesForTrackings.Select(a => a.Alias))
                                          .Select(a => new UserAliasesForTracking()
                {
                    Alias = a
                })
                                          .ToList();

                context.UserAliasesForTrackings.InsertAllOnSubmit(allAliasesToBeAdded);

                // submit changes
                context.SubmitChanges();
            }
        }
Exemplo n.º 4
0
        public void Fetch()
        {
            VC.Setup(_virtualCluster, VC.NoProxy, null);

            using (DatabaseObjectsDataContext context = new DatabaseObjectsDataContext(Properties.Settings.Default.JobStatisticsConnectionString))
            {
#if DEBUG
                context.Log = Console.Out;
#endif

                int lookbackDays = Properties.Settings.Default.LookbackDays;

                // load all data stored in database that submit time is not earlier than X days ago
                var storedJobStatistics = context.JobStatistics
                                          .Where(js => js.SubmitTime != null && js.SubmitTime >= DateTime.Now.AddDays(-lookbackDays))
                                          .ToDictionary(js => js.Id);

                // get jobs from server (Cosmos)
                List <JobInfo> serverJobs = new List <JobInfo>();

                var jobList = VC.GetJobsList(_virtualCluster);

                serverJobs.AddRange(jobList);

                // find out new jobs and get job statistic information for new jobs.
                var newJobs = serverJobs.Where(job => !storedJobStatistics.ContainsKey(job.ID)).ToList();

                var newJobBatches = SplitJobsToBatches(newJobs);

                int finishedNewBatchCount = 0;
                foreach (var jobBatch in newJobBatches)
                {
                    var stats = new List <JobStatistic>();

                    foreach (var job in jobBatch)
                    {
                        var statistic = GetJobStatistic(job);

                        if (statistic != null)
                        {
                            stats.Add(statistic);
                        }
                    }

                    if (stats.Any())
                    {
                        context.JobStatistics.InsertAllOnSubmit(stats);
                    }

                    context.SubmitChanges();

                    finishedNewBatchCount++;

                    Console.WriteLine("{0}/{1} new job batches has been processed", finishedNewBatchCount, newJobBatches.Count);

                    // sleep for a while to avoid impact cosmos server too much
                    System.Threading.Thread.Sleep(5000);
                }

                // find out updated jobs and get updated job statistic information
                var updatedJobs = serverJobs.Where(job =>
                {
                    if (!storedJobStatistics.ContainsKey(job.ID))
                    {
                        return(false);
                    }

                    var storedJobStatistic    = storedJobStatistics[job.ID];
                    JobInfo.JobState jobState = (JobInfo.JobState)storedJobStatistic.State;
                    if (IsJobStateFinal(jobState))
                    {
                        return(false);
                    }

                    if (jobState == JobInfo.JobState.Queued && job.State == JobInfo.JobState.Queued)
                    {
                        return(false);
                    }

                    return(true);
                }).ToList();

                var updatedJobBatches = SplitJobsToBatches(updatedJobs);

                int finishedUpdatingBatchCount = 0;
                foreach (var jobBatch in updatedJobBatches)
                {
                    foreach (var job in jobBatch)
                    {
                        var storedJobStatistic = storedJobStatistics[job.ID];

                        var newJobStatistic = GetJobStatistic(job);

                        if (newJobStatistic != null)
                        {
                            UpdateJobStatistic(storedJobStatistic, newJobStatistic);
                        }
                    }

                    context.SubmitChanges();

                    finishedUpdatingBatchCount++;

                    Console.WriteLine("{0}/{1} updating job batches has been processed", finishedUpdatingBatchCount, updatedJobBatches.Count);

                    // sleep for a while to avoid impact cosmos server too much
                    System.Threading.Thread.Sleep(5000);
                }
            }
        }