Example #1
0
        public override void Collect(int doc)
        {
            int slot = ordSet.Find(groupFieldTermIndex.GetOrd(doc));

            if (slot < 0)
            {
                return;
            }

            GroupCount gc       = groupCounts[slot];
            int        countOrd = countFieldTermIndex.GetOrd(doc);

            if (DoesNotContainOrd(countOrd, gc.ords))
            {
                if (countOrd == -1)
                {
                    ((ISet <BytesRef>)gc.UniqueValues).Add(null);
                }
                else
                {
                    BytesRef br = new BytesRef();
                    countFieldTermIndex.LookupOrd(countOrd, br);
                    ((ISet <BytesRef>)gc.UniqueValues).Add(br);
                }

                gc.ords = Arrays.CopyOf(gc.ords, gc.ords.Length + 1);
                gc.ords[gc.ords.Length - 1] = countOrd;
                if (gc.ords.Length > 1)
                {
                    Array.Sort(gc.ords);
                }
            }
        }
        /// <summary>
        /// Return a dictionary of Crashes per group grouped by week.
        /// </summary>
        /// <param name="Crashes">A set of Crashes to interrogate.</param>
        /// <param name="UserGroupId">The id of the user group to interrogate.</param>
        /// <returns>A dictionary of week vs. Crash count.</returns>
        public Dictionary <DateTime, int> GetWeeklyCountsByGroup(List <FCrashMinimal> Crashes, int UserGroupId)
        {
            using (FAutoScopedLogTimer LogTimer = new FAutoScopedLogTimer(this.GetType().ToString() + "(UserGroupId=" + UserGroupId + ")"))
            {
                Dictionary <DateTime, int> Results = new Dictionary <DateTime, int>();

                var UsersIds = new HashSet <int>(_entities.Users.Distinct().Select(data => data.Id));

                // Trim Crashes to user group.
                if (UserGroupId != DashboardController.AllUserGroupId)
                {
                    Crashes = Crashes.Where(Crash => UsersIds.Contains(Crash.UserId)).ToList();
                }

                try
                {
                    Results =
                        (
                            from CrashDetail in Crashes
                            group CrashDetail by CrashDetail.TimeOfCrash.AddDays(-(int)CrashDetail.TimeOfCrash.DayOfWeek).Date into GroupCount
                            orderby GroupCount.Key
                            select new { Count = GroupCount.Count(), Date = GroupCount.Key }
                        ).ToDictionary(x => x.Date, y => y.Count);
                }
                catch (Exception Ex)
                {
                    Debug.WriteLine("Exception in GetWeeklyCountsByGroup: " + Ex.ToString());
                }

                return(Results);
            }
        }
Example #3
0
        public override void Collect(int doc)
        {
            int slot = this.ordSet.Find(this.groupFieldTermIndex.GetOrd(doc));

            if ((slot < 0))
            {
                return;
            }

            GroupCount gc       = groupCounts[slot];
            int        countOrd = this.countFieldTermIndex.GetOrd(doc);

            if (this.doesNotContainOrd(countOrd, gc.ords))
            {
                if ((countOrd == -1))
                {
                    gc.uniqueValues.Add(null);
                }
                else
                {
                    BytesRef br = new BytesRef();
                    countFieldTermIndex.LookupOrd(countOrd, br);
                    gc.uniqueValues.Add(br);
                }

                gc.ords = Arrays.CopyOf(gc.ords, (gc.ords.Length + 1));
                gc.ords[(gc.ords.Length - 1)] = countOrd;
                if ((gc.ords.Length > 1))
                {
                    Arrays.Sort(gc.ords);
                }
            }
        }
Example #4
0
        /// <summary>
        /// Return a dictionary of crashes per group grouped by day.
        /// </summary>
        /// <param name="Crashes">A set of crashes to interrogate.</param>
        /// <param name="UserGroupId">The id of the user group to interrogate.</param>
        /// <returns>A dictionary of day vs. crash count.</returns>
        public Dictionary <DateTime, int> GetDailyCountsByGroup(List <FCrashMinimal> Crashes, int UserGroupId)
        {
            using (FAutoScopedLogTimer LogTimer = new FAutoScopedLogTimer(this.GetType().ToString() + "(UserGroupId=" + UserGroupId + ")"))
            {
                Dictionary <DateTime, int> Results = new Dictionary <DateTime, int>();

                var UsersIds = FRepository.Get(_Crashes).GetUserIdsFromUserGroupId(UserGroupId);

                // Trim crashes to user group.
                if (UserGroupId != DashboardController.AllUserGroupId)
                {
                    Crashes = Crashes.Where(Crash => UsersIds.Contains(Crash.UserId)).ToList();
                }

                try
                {
                    Results =
                        (
                            from CrashDetail in Crashes
                            group CrashDetail by CrashDetail.TimeOfCrash.Date into GroupCount
                            orderby GroupCount.Key
                            select new { Count = GroupCount.Count(), Date = GroupCount.Key }
                        ).ToDictionary(x => x.Date, y => y.Count);
                }
                catch (Exception Ex)
                {
                    Debug.WriteLine("Exception in GetDailyCountsByGroup: " + Ex.ToString());
                }

                return(Results);
            }
        }
        /// <summary>
        /// Gets a container of crash counts per user group for the set of crashes passed in.
        /// </summary>
        /// <param name="Crashes">The set of crashes to tabulate by user group.</param>
        /// <returns>A dictionary of user group names, and the count of Buggs for each group.</returns>
        public Dictionary <string, int> GetCountsByGroup(IQueryable <Crash> Crashes)
        {
            Dictionary <string, int> Results = new Dictionary <string, int>();

            try
            {
                Results =
                    (
                        from CrashDetail in Crashes
                        from UserDetail in CrashRepositoryDataContext.Users
                        join UserGroupDetail in CrashRepositoryDataContext.UserGroups on UserDetail.UserGroupId equals UserGroupDetail.Id
                        where CrashDetail.UserNameId == UserDetail.Id || CrashDetail.UserName == UserDetail.UserName
                        group CrashDetail by UserGroupDetail.Name into GroupCount
                        select new { Key = GroupCount.Key, Count = GroupCount.Count() }
                    ).ToDictionary(x => x.Key, y => y.Count);

                // Add in all groups, even though there are no crashes associated
                IEnumerable <string> UserGroups = (from UserGroupDetail in CrashRepositoryDataContext.UserGroups select UserGroupDetail.Name);
                foreach (string UserGroupName in UserGroups)
                {
                    if (!Results.Keys.Contains(UserGroupName))
                    {
                        Results[UserGroupName] = 0;
                    }
                }
            }
            catch (Exception Ex)
            {
                Debug.WriteLine("Exception in GetCountsByGroup: " + Ex.ToString());
            }

            return(Results);
        }
Example #6
0
        /// <summary>
        /// Return a dictionary of crashes per group grouped by day.
        /// </summary>
        /// <param name="Crashes">A set of crashes to interrogate.</param>
        /// <param name="UserGroupId">The id of the user group to interrogate.</param>
        /// <param name="UndefinedUserGroupId">Id of the undefined user group.</param>
        /// <returns>A dictionary of day vs. crash count.</returns>
        public Dictionary <DateTime, int> GetDailyCountsByGroup(IQueryable <Crash> Crashes, int UserGroupId, int UndefinedUserGroupId)
        {
            using (FAutoScopedLogTimer LogTimer = new FAutoScopedLogTimer(this.GetType().ToString() + "(UserGroupId=" + UserGroupId + ")"))
            {
                Dictionary <DateTime, int> Results = new Dictionary <DateTime, int>();

                try
                {
                    Results =
                        (
                            from CrashDetail in Crashes
                            join UserDetail in CrashRepositoryDataContext.Users on CrashDetail.UserNameId equals UserDetail.Id
                            where (UserGroupId < 0 && UserDetail.UserGroupId != UndefinedUserGroupId) || UserDetail.UserGroupId == UserGroupId
                            group CrashDetail by CrashDetail.TimeOfCrash.Value.Date into GroupCount
                            orderby GroupCount.Key
                            select new { Count = GroupCount.Count(), Date = GroupCount.Key }
                        ).ToDictionary(x => x.Date, y => y.Count);
                }
                catch (Exception Ex)
                {
                    Debug.WriteLine("Exception in GetDailyCountsByGroup: " + Ex.ToString());
                }

                return(Results);
            }
        }
Example #7
0
        /// <summary>
        /// Gets a container of crash counts per user group for all crashes.
        /// </summary>
        /// <returns>A dictionary of user group names, and the count of crashes for each group.</returns>
        public Dictionary <string, int> GetCountsByGroup()
        {
            // @TODO 2014-11-06 Optimize?
            using (FAutoScopedLogTimer LogTimer = new FAutoScopedLogTimer(this.GetType().ToString() + " SQL OPT"))
            {
                Dictionary <string, int> Results = new Dictionary <string, int>();

                try
                {
                    var GroupCounts =
                        (
                            from UserDetail in Context.Users
                            join UserGroupDetail in Context.UserGroups on UserDetail.UserGroupId equals UserGroupDetail.Id
                            group UserDetail by UserGroupDetail.Name into GroupCount
                            select new { Key = GroupCount.Key, Count = GroupCount.Count() }
                        );

                    foreach (var GroupCount in GroupCounts)
                    {
                        Results.Add(GroupCount.Key, GroupCount.Count);
                    }

                    // Add in all groups, even though there are no crashes associated
                    IEnumerable <string> UserGroups = (from UserGroupDetail in Context.UserGroups select UserGroupDetail.Name);
                    foreach (string UserGroupName in UserGroups)
                    {
                        if (!Results.Keys.Contains(UserGroupName))
                        {
                            Results[UserGroupName] = 0;
                        }
                    }
                }
                catch (Exception Ex)
                {
                    Debug.WriteLine("Exception in GetCountsByGroup: " + Ex.ToString());
                }

                return(Results);
            }
        }
Example #8
0
        private List <AbstractDistinctValuesCollector.IGroupCount <IComparable> > CreateExpectedResult(IndexContext context, string term, Sort groupSort, int topN)
        {
            List <AbstractDistinctValuesCollector.IGroupCount <IComparable> > result = new List <AbstractDistinctValuesCollector.IGroupCount <IComparable> >();
            IDictionary <string, ISet <string> > groupCounts = context.searchTermToGroupCounts[term];
            int i = 0;

            foreach (string group in groupCounts.Keys)
            {
                if (topN <= i++)
                {
                    break;
                }
                ISet <BytesRef> uniqueValues = new HashSet <BytesRef>();
                foreach (string val in groupCounts[group])
                {
                    uniqueValues.Add(val != null ? new BytesRef(val) : null);
                }
                var gc = new GroupCount(group != null ? new BytesRef(group) : (BytesRef)null, uniqueValues);
                result.Add(gc);
            }
            return(result);
        }
Example #9
0
        /// <summary>
        /// Bucket the Buggs by user group.
        /// </summary>
        /// <param name="Buggs">A list of Buggs to bucket.</param>
        /// <returns>A dictionary of user group names, and the count of Buggs for each group.</returns>
        public SortedDictionary <string, int> GetCountsByGroup(IEnumerable <Bugg> Buggs)
        {
            // @TODO yrx 2014-11-06 Optimize
            using (FAutoScopedLogTimer LogTimer = new FAutoScopedLogTimer(this.GetType().ToString() + " SQL OPT"))
            {
                Dictionary <string, int> Results = new Dictionary <string, int>();

                try
                {
                    Results =
                        (
                            from BuggDetail in Buggs
                            join BuggsUserGroupDetail in Context.Buggs_UserGroups on BuggDetail.Id equals BuggsUserGroupDetail.BuggId
                            join UserGroupDetail in Context.UserGroups on BuggsUserGroupDetail.UserGroupId equals UserGroupDetail.Id
                            group 0 by UserGroupDetail.Name into GroupCount
                            select new { Key = GroupCount.Key, Count = GroupCount.Count() }
                        ).ToDictionary(x => x.Key, y => y.Count);

                    // Add in all groups, even though there are no crashes associated
                    IEnumerable <string> UserGroups = (from UserGroupDetail in Context.UserGroups select UserGroupDetail.Name);
                    foreach (string UserGroupName in UserGroups)
                    {
                        if (!Results.Keys.Contains(UserGroupName))
                        {
                            Results[UserGroupName] = 0;
                        }
                    }
                }
                catch (Exception Ex)
                {
                    Debug.WriteLine("Exception in GetCountsByGroup: " + Ex.ToString());
                }

                SortedDictionary <string, int> SortedResults = new SortedDictionary <string, int>(Results);
                return(SortedResults);
            }
        }
        /// <summary>
        /// The main view of the dash board.
        /// </summary>
        /// <returns>A view showing two charts of Crashes over time.</returns>
        public ActionResult Index()
        {
            using (FAutoScopedLogTimer LogTimer = new FAutoScopedLogTimer(this.GetType().ToString(), bCreateNewLog: true))
            {
                DateTime Today         = DateTime.UtcNow;
                DateTime AfewMonthsAgo = Today.AddMonths(-6);

                FAutoScopedLogTimer LogTimerSQL = new FAutoScopedLogTimer("CrashesFilterByDate", "", "");

                // Get engine versions from the last 6 months.
                var           TempVersions      = _Crashes.GetVersions();
                List <string> EngineUE4Versions = new List <string>();
                foreach (var Version in TempVersions)
                {
                    if (Version.StartsWith("4."))
                    {
                        EngineUE4Versions.Add(Version);
                    }
                }

                // Only 4 latest version.
                EngineUE4Versions = EngineUE4Versions.OrderByDescending(item => item).Take(5).ToList();

                var endDate = Today.AddDays(1);

                IQueryable <Crash> CrashesInTimeFrame = _Crashes.ListAll()
                                                        .Where(MyCrash => MyCrash.TimeOfCrash >= AfewMonthsAgo && MyCrash.TimeOfCrash <= endDate);
                //IEnumerable<Crash> Crashes = FRepository.Get().Crashes.FilterByDate( FRepository.Get().Crashes.ListAll(), AfewMonthsAgo, Today );
                var VMinimalCrashes = CrashesInTimeFrame.Select(Crash => new
                {
                    TimeOfCrash   = Crash.TimeOfCrash,
                    UserID        = Crash.UserId,
                    EngineVersion = Crash.BuildVersion,
                })
                                      .ToList();

                List <FCrashMinimal> MinimalCrashes = new List <FCrashMinimal>(VMinimalCrashes.Count);
                foreach (var Anotype in VMinimalCrashes)
                {
                    MinimalCrashes.Add(new FCrashMinimal(Anotype.TimeOfCrash, Anotype.UserID, Anotype.EngineVersion));
                }
                LogTimerSQL.Dispose();

                HashSet <int> AnonumousIDs = new HashSet <int>(_entities.UserGroups.First(data => data.Name == "Anonymous").Users.Select(data => data.Id));
                int           AnonymousID  = AnonumousIDs.First();

                int GeneralUserGroupId  = 1;         //FRepository.Get( _Crashes ).FindOrAddGroup( "General" );
                int CoderUserGroupId    = 3;         //FRepository.Get( _Crashes ).FindOrAddGroup( "Coder" );
                int EngineQAUserGroupId = 22;        //FRepository.Get( _Crashes ).FindOrAddGroup( "EngineQA" );
                int GameQAUserGroupId   = 21;        //FRepository.Get( _Crashes ).FindOrAddGroup( "GameQA" );

                // Weekly
                Dictionary <DateTime, int> WeeklyGeneralResults  = GetWeeklyCountsByGroup(MinimalCrashes, GeneralUserGroupId);
                Dictionary <DateTime, int> WeeklyCoderResults    = GetWeeklyCountsByGroup(MinimalCrashes, CoderUserGroupId);
                Dictionary <DateTime, int> WeeklyEngineQAResults = GetWeeklyCountsByGroup(MinimalCrashes, EngineQAUserGroupId);
                Dictionary <DateTime, int> WeeklyGameQAResults   = GetWeeklyCountsByGroup(MinimalCrashes, GameQAUserGroupId);

                Dictionary <string, Dictionary <DateTime, int> > WeeklyEngineVersionResults = new Dictionary <string, Dictionary <DateTime, int> >();
                foreach (string UE4Version in EngineUE4Versions)
                {
                    Dictionary <DateTime, int> Results = GetWeeklyCountsByVersion(MinimalCrashes, UE4Version, AnonymousID);
                    WeeklyEngineVersionResults.Add(UE4Version, Results);
                }

                Dictionary <DateTime, int> WeeklyAllResults = GetWeeklyCountsByGroup(MinimalCrashes, AllUserGroupId);

                // Daily
                Dictionary <DateTime, int> DailyGeneralResults  = GetDailyCountsByGroup(MinimalCrashes, GeneralUserGroupId);
                Dictionary <DateTime, int> DailyCoderResults    = GetDailyCountsByGroup(MinimalCrashes, CoderUserGroupId);
                Dictionary <DateTime, int> DailyEngineQAResults = GetDailyCountsByGroup(MinimalCrashes, EngineQAUserGroupId);
                Dictionary <DateTime, int> DailyGameQAResults   = GetDailyCountsByGroup(MinimalCrashes, GameQAUserGroupId);


                Dictionary <string, Dictionary <DateTime, int> > DailyEngineVersionResults = new Dictionary <string, Dictionary <DateTime, int> >();
                foreach (string UE4Version in EngineUE4Versions)
                {
                    Dictionary <DateTime, int> Results = GetDailyCountsByVersion(MinimalCrashes, UE4Version, AnonymousID);
                    DailyEngineVersionResults.Add(UE4Version, Results);
                }

                Dictionary <DateTime, int> DailyAllResults = GetDailyCountsByGroup(MinimalCrashes, AllUserGroupId);

                // Get daily buggs stats.
                List <Bugg> Buggs = _Buggs.ListAll().Where(Bugg => Bugg.TimeOfFirstCrash >= AfewMonthsAgo).ToList();

                Dictionary <DateTime, int> BuggDailyAllResults =
                    (
                        from Bugg in Buggs
                        group Bugg by Bugg.TimeOfFirstCrash.Value.Date into GroupCount
                        orderby GroupCount.Key
                        select new { Count = GroupCount.Count(), Date = GroupCount.Key }
                    ).ToDictionary(x => x.Date, y => y.Count);


                string CrashesByWeek = "";

                foreach (KeyValuePair <DateTime, int> WeeklyResult in WeeklyAllResults)
                {
                    int GeneralCrashes = 0;
                    WeeklyGeneralResults.TryGetValue(WeeklyResult.Key, out GeneralCrashes);

                    int CoderCrashes = 0;
                    WeeklyCoderResults.TryGetValue(WeeklyResult.Key, out CoderCrashes);

                    int EngineQACrashes = 0;
                    WeeklyEngineQAResults.TryGetValue(WeeklyResult.Key, out EngineQACrashes);

                    int GameQACrashes = 0;
                    WeeklyGameQAResults.TryGetValue(WeeklyResult.Key, out GameQACrashes);

                    string AnonymousLine = "";
                    foreach (var VersionCrashes in WeeklyEngineVersionResults)
                    {
                        int EngineVersionCrashes = 0;
                        VersionCrashes.Value.TryGetValue(WeeklyResult.Key, out EngineVersionCrashes);

                        AnonymousLine += EngineVersionCrashes;
                        AnonymousLine += ", ";
                    }

                    int Year  = WeeklyResult.Key.Year;
                    int Month = WeeklyResult.Key.AddMonths(-1).Month;
                    if (WeeklyResult.Key.Month == 13 || WeeklyResult.Key.Month == 1)
                    {
                        Month = 0;
                    }

                    int Day = WeeklyResult.Key.Day + 6;

                    string Line = "[new Date(" + Year + ", " + Month + ", " + Day + "), " + GeneralCrashes + ", " + CoderCrashes + ", " + EngineQACrashes + ", " + GameQACrashes + ", " + AnonymousLine + WeeklyResult.Value + "], ";
                    CrashesByWeek += Line;
                }

                CrashesByWeek = CrashesByWeek.TrimEnd(", ".ToCharArray());

                string CrashesByDay = "";
                foreach (KeyValuePair <DateTime, int> DailyResult in DailyAllResults)
                {
                    int GeneralCrashes = 0;
                    DailyGeneralResults.TryGetValue(DailyResult.Key, out GeneralCrashes);

                    int CoderCrashes = 0;
                    DailyCoderResults.TryGetValue(DailyResult.Key, out CoderCrashes);

                    int EngineQACrashes = 0;
                    DailyEngineQAResults.TryGetValue(DailyResult.Key, out EngineQACrashes);

                    int GameQACrashes = 0;
                    DailyGameQAResults.TryGetValue(DailyResult.Key, out GameQACrashes);

                    string AnonymousLine = "";
                    foreach (var VersionCrashes in DailyEngineVersionResults)
                    {
                        int EngineVersionCrashes = 0;
                        VersionCrashes.Value.TryGetValue(DailyResult.Key, out EngineVersionCrashes);

                        AnonymousLine += EngineVersionCrashes;
                        AnonymousLine += ", ";
                    }

                    int Year  = DailyResult.Key.Year;
                    int Month = DailyResult.Key.AddMonths(-1).Month;
                    if (DailyResult.Key.Month == 13 || DailyResult.Key.Month == 1)
                    {
                        Month = 0;
                    }

                    int Day = DailyResult.Key.Day;

                    string Line = "[new Date(" + Year + ", " + Month + ", " + Day + "), " + GeneralCrashes + ", " + CoderCrashes + ", " + EngineQACrashes + ", " + GameQACrashes + ", " + AnonymousLine + DailyResult.Value + "], ";
                    CrashesByDay += Line;
                }

                CrashesByDay = CrashesByDay.TrimEnd(", ".ToCharArray());

                string BuggsByDay = "";
                foreach (KeyValuePair <DateTime, int> DailyResult in BuggDailyAllResults)
                {
                    int Year  = DailyResult.Key.Year;
                    int Month = DailyResult.Key.AddMonths(-1).Month;
                    if (DailyResult.Key.Month == 13 || DailyResult.Key.Month == 1)
                    {
                        Month = 0;
                    }

                    int Day = DailyResult.Key.Day;

                    string Line = "[new Date(" + Year + ", " + Month + ", " + Day + "), " + DailyResult.Value + "], ";
                    BuggsByDay += Line;
                }

                BuggsByDay = BuggsByDay.TrimEnd(", ".ToCharArray());

                var ResultDashboard = new DashboardViewModel
                {
                    CrashesByWeek  = CrashesByWeek,
                    CrashesByDay   = CrashesByDay,
                    BuggsByDay     = BuggsByDay,
                    EngineVersions = EngineUE4Versions,
                };
                ResultDashboard.GenerationTime = LogTimer.GetElapsedSeconds().ToString("F2");
                return(View("Index", ResultDashboard));
            }
        }
Example #11
0
        /// <summary>
        /// The main view of the dash board.
        /// </summary>
        /// <returns>A view showing two charts of crashes over time.</returns>
        public ActionResult Index()
        {
            using (FAutoScopedLogTimer LogTimer = new FAutoScopedLogTimer(this.GetType().ToString()))
            {
                /*
                 * //Temporary code to update pattern in crashes and buggs.
                 * DateTime Today11 = DateTime.UtcNow.AddDays(11);
                 * DateTime AYear = Today11.AddMonths( -12 );
                 *
                 * var CrashList = CrashRepository.Context.Crashes.Where( X => X.TimeOfCrash >= AYear ).Select( X => X );
                 * var BuggList = CrashRepository.Context.Buggs.Select( X => X );
                 *
                 * int Current = 0;
                 * foreach(Crash Crash in CrashList)
                 * {
                 *      if( string.IsNullOrEmpty(Crash.Pattern) )
                 *      {
                 *              continue;
                 *      }
                 *      if( Crash.Pattern[0] != '+' )
                 *      {
                 *              Crash.Pattern = "+" + Crash.Pattern + "+";
                 *      }
                 *      Current++;
                 *      if( Current % 16384 == 0 )
                 *      {
                 *              CrashRepository.SubmitChanges();
                 *      }
                 * }
                 *
                 *
                 * foreach(Bugg Bugg in BuggList)
                 * {
                 *      if( string.IsNullOrEmpty( Bugg.Pattern ) )
                 *      {
                 *              continue;
                 *      }
                 *
                 *      if( Bugg.Pattern[0] != '+' )
                 *      {
                 *              Bugg.Pattern = "+" + Bugg.Pattern + "+";
                 *      }
                 *      Current++;
                 *      if( Current % 16384 == 0 )
                 *      {
                 *              CrashRepository.SubmitChanges();
                 *      }
                 * }
                 */

                DateTime Today         = DateTime.UtcNow;
                DateTime AfewMonthsAgo = Today.AddMonths(-6);

                FAutoScopedLogTimer LogTimerSQL = new FAutoScopedLogTimer("CrashesFilterByDate", "", "");
                IQueryable <Crash>  Crashes     = CrashRepository.FilterByDate(CrashRepository.ListAll(), AfewMonthsAgo, Today);
                var VMinimalCrashes             = Crashes.Select(Crash => new { TimeOfCrash = Crash.TimeOfCrash.Value, UserID = Crash.UserNameId.Value }).ToList();

                List <FCrashMinimal> MinimalCrashes = new List <FCrashMinimal>(VMinimalCrashes.Count);
                foreach (var Anotype in VMinimalCrashes)
                {
                    MinimalCrashes.Add(new FCrashMinimal(Anotype.TimeOfCrash, Anotype.UserID));
                }
                LogTimerSQL.Dispose();

                int GeneralUserGroupId   = CrashRepository.FindOrAddUserGroup("General");
                int CoderUserGroupId     = CrashRepository.FindOrAddUserGroup("Coder");
                int EngineQAUserGroupId  = CrashRepository.FindOrAddUserGroup("EngineQA");
                int GameQAUserGroupId    = CrashRepository.FindOrAddUserGroup("GameQA");
                int AnonymousUserGroupId = CrashRepository.FindOrAddUserGroup("Anonymous");

                Dictionary <DateTime, int> GeneralResults   = GetWeeklyCountsByGroup(MinimalCrashes, GeneralUserGroupId);
                Dictionary <DateTime, int> CoderResults     = GetWeeklyCountsByGroup(MinimalCrashes, CoderUserGroupId);
                Dictionary <DateTime, int> EngineQAResults  = GetWeeklyCountsByGroup(MinimalCrashes, EngineQAUserGroupId);
                Dictionary <DateTime, int> GameQAResults    = GetWeeklyCountsByGroup(MinimalCrashes, GameQAUserGroupId);
                Dictionary <DateTime, int> AnonymousResults = GetWeeklyCountsByGroup(MinimalCrashes, AnonymousUserGroupId);
                Dictionary <DateTime, int> AllResults       = GetWeeklyCountsByGroup(MinimalCrashes, AllUserGroupId);

                Dictionary <DateTime, int> DailyGeneralResults   = GetDailyCountsByGroup(MinimalCrashes, GeneralUserGroupId);
                Dictionary <DateTime, int> DailyCoderResults     = GetDailyCountsByGroup(MinimalCrashes, CoderUserGroupId);
                Dictionary <DateTime, int> DailyEngineQAResults  = GetDailyCountsByGroup(MinimalCrashes, EngineQAUserGroupId);
                Dictionary <DateTime, int> DailyGameQAResults    = GetDailyCountsByGroup(MinimalCrashes, GameQAUserGroupId);
                Dictionary <DateTime, int> DailyAnonymousResults = GetDailyCountsByGroup(MinimalCrashes, AnonymousUserGroupId);
                Dictionary <DateTime, int> DailyAllResults       = GetDailyCountsByGroup(MinimalCrashes, AllUserGroupId);

                // Get daily buggs stats.
                List <Bugg> Buggs = BuggRepository.ListAll().Where(Bugg => Bugg.TimeOfFirstCrash >= AfewMonthsAgo).ToList();

                Dictionary <DateTime, int> BuggDailyAllResults =
                    (
                        from Bugg in Buggs
                        group Bugg by Bugg.TimeOfFirstCrash.Value.Date into GroupCount
                        orderby GroupCount.Key
                        select new { Count = GroupCount.Count(), Date = GroupCount.Key }
                    ).ToDictionary(x => x.Date, y => y.Count);


                string CrashesByWeek = "";

                foreach (KeyValuePair <DateTime, int> Result in AllResults)
                {
                    int GeneralCrashes = 0;
                    GeneralResults.TryGetValue(Result.Key, out GeneralCrashes);

                    int CoderCrashes = 0;
                    CoderResults.TryGetValue(Result.Key, out CoderCrashes);

                    int EngineQACrashes = 0;
                    EngineQAResults.TryGetValue(Result.Key, out EngineQACrashes);

                    int GameQACrashes = 0;
                    GameQAResults.TryGetValue(Result.Key, out GameQACrashes);

                    int AnonymousCrashes = 0;
                    AnonymousResults.TryGetValue(Result.Key, out AnonymousCrashes);

                    int Year  = Result.Key.Year;
                    int Month = Result.Key.AddMonths(-1).Month;
                    if (Result.Key.Month == 13 || Result.Key.Month == 1)
                    {
                        Month = 0;
                    }

                    int Day = Result.Key.Day + 6;

                    string Line = "[new Date(" + Year + ", " + Month + ", " + Day + "), " + GeneralCrashes + ", " + CoderCrashes + ", " + EngineQACrashes + ", " + GameQACrashes + ", " + AnonymousCrashes + ", " + Result.Value + "], ";
                    CrashesByWeek += Line;
                }

                CrashesByWeek = CrashesByWeek.TrimEnd(", ".ToCharArray());

                string CrashesByDay = "";
                foreach (KeyValuePair <DateTime, int> DailyResult in DailyAllResults)
                {
                    int GeneralCrashes = 0;
                    DailyGeneralResults.TryGetValue(DailyResult.Key, out GeneralCrashes);

                    int CoderCrashes = 0;
                    DailyCoderResults.TryGetValue(DailyResult.Key, out CoderCrashes);

                    int EngineQACrashes = 0;
                    DailyEngineQAResults.TryGetValue(DailyResult.Key, out EngineQACrashes);

                    int GameQACrashes = 0;
                    DailyGameQAResults.TryGetValue(DailyResult.Key, out GameQACrashes);

                    int AnonymousCrashes = 0;
                    DailyAnonymousResults.TryGetValue(DailyResult.Key, out AnonymousCrashes);

                    int Year  = DailyResult.Key.Year;
                    int Month = DailyResult.Key.AddMonths(-1).Month;
                    if (DailyResult.Key.Month == 13 || DailyResult.Key.Month == 1)
                    {
                        Month = 0;
                    }

                    int Day = DailyResult.Key.Day;

                    string Line = "[new Date(" + Year + ", " + Month + ", " + Day + "), " + GeneralCrashes + ", " + CoderCrashes + ", " + EngineQACrashes + ", " + GameQACrashes + ", " + AnonymousCrashes + ", " + DailyResult.Value + "], ";
                    CrashesByDay += Line;
                }

                CrashesByDay = CrashesByDay.TrimEnd(", ".ToCharArray());

                string BuggsByDay = "";
                foreach (KeyValuePair <DateTime, int> DailyResult in BuggDailyAllResults)
                {
                    int Year  = DailyResult.Key.Year;
                    int Month = DailyResult.Key.AddMonths(-1).Month;
                    if (DailyResult.Key.Month == 13 || DailyResult.Key.Month == 1)
                    {
                        Month = 0;
                    }

                    int Day = DailyResult.Key.Day;

                    string Line = "[new Date(" + Year + ", " + Month + ", " + Day + "), " + DailyResult.Value + "], ";
                    BuggsByDay += Line;
                }

                BuggsByDay = BuggsByDay.TrimEnd(", ".ToCharArray());

                return(View("Index", new DashboardViewModel {
                    CrashesByWeek = CrashesByWeek, CrashesByDay = CrashesByDay, BuggsByDay = BuggsByDay
                }));
            }
        }
Example #12
0
        /// <summary>
        /// Bucket the Buggs by user group.
        /// </summary>
        /// <param name="Buggs">A list of Buggs to bucket.</param>
        /// <returns>A dictionary of user group names, and the count of Buggs for each group.</returns>
        public SortedDictionary <string, int> GetCountsByGroup(IEnumerable <Bugg> Buggs)
        {
            using (FAutoScopedLogTimer LogTimer = new FAutoScopedLogTimer(this.GetType().ToString() + " SQL OPT"))
            {
                Dictionary <string, int> Results = new Dictionary <string, int>();
                try
                {
                    Results =
                        (
                            from BuggDetail in Buggs
                            join BuggsUserGroupDetail in Context.Buggs_UserGroups on BuggDetail.Id equals BuggsUserGroupDetail.BuggId
                            join UserGroupDetail in Context.UserGroups on BuggsUserGroupDetail.UserGroupId equals UserGroupDetail.Id
                            group 0 by UserGroupDetail.Name into GroupCount
                            select new { Key = GroupCount.Key, Count = GroupCount.Count() }
                        ).ToDictionary(x => x.Key, y => y.Count);

                    // Add in all groups, even though there are no crashes associated
                    IEnumerable <string> UserGroups = (from UserGroupDetail in Context.UserGroups select UserGroupDetail.Name);
                    foreach (string UserGroupName in UserGroups)
                    {
                        if (!Results.Keys.Contains(UserGroupName))
                        {
                            Results[UserGroupName] = 0;
                        }
                    }

                    /*
                     * //
                     * var UsersIDsAndGroupIDs = Context.Users.Select( User => new { UserId = User.Id, UserGroupId = User.UserGroupId } ).ToList();
                     * var UserGroupArray = Context.UserGroups.ToList();
                     * UserGroupArray.Sort( ( UG1, UG2 ) => UG1.Name.CompareTo( UG2.Name ) );
                     *
                     * // Initialize all groups to 0.
                     * foreach( var UserGroup in UserGroupArray )
                     * {
                     *      Results.Add( UserGroup.Name, 0 );
                     * }
                     *
                     * Dictionary<int, string> UserIdToGroupName = new Dictionary<int, string>();
                     * foreach( var UserIds in UsersIDsAndGroupIDs )
                     * {
                     *      // Find group name for the user id.
                     *      string UserGroupName = UserGroupArray.Where( UG => UG.Id == UserIds.UserGroupId ).First().Name;
                     *      UserIdToGroupName.Add( UserIds.UserId, UserGroupName );
                     * }
                     *
                     * HashSet<int> UserNameIds = new HashSet<int>();
                     * foreach( Bugg Bugg in Buggs )
                     * {
                     *      var CrashList =
                     *      (
                     *              from BuggCrash in Context.Buggs_Crashes
                     *              where BuggCrash.BuggId == Bugg.Id
                     *              select BuggCrash.Crash.UserNameId.GetValueOrDefault()
                     *      ).ToList();
                     *
                     *      UserNameIds.UnionWith( CrashList );
                     * }
                     *
                     * foreach( int UserId in UserNameIds )
                     * {
                     *      string UserGroupName = UserIdToGroupName[UserId];
                     *      Results[UserGroupName]++;
                     * }*/
                }
                catch (Exception Ex)
                {
                    Debug.WriteLine("Exception in GetCountsByGroup: " + Ex.ToString());
                }

                SortedDictionary <string, int> SortedResults = new SortedDictionary <string, int>(Results);
                return(SortedResults);
            }
        }
Example #13
0
 public int MinVal()
 {
     return(GroupCount.Min());
 }
Example #14
0
        // calculators

        public int MaxVal()
        {
            return(GroupCount.Max());
        }
Example #15
0
        /// <summary>
        /// The main view of the dash board.
        /// </summary>
        /// <returns>A view showing two charts of crashes over time.</returns>
        public ActionResult Index()
        {
            using (FAutoScopedLogTimer LogTimer = new FAutoScopedLogTimer(this.GetType().ToString(), bCreateNewLog: true))
            {
                DateTime Today         = DateTime.UtcNow;
                DateTime AfewMonthsAgo = Today.AddMonths(-6);

                FAutoScopedLogTimer LogTimerSQL = new FAutoScopedLogTimer("CrashesFilterByDate", "", "");

                IQueryable <Crash> CrashesInTimeFrame = _Crashes.ListAll()
                                                        .Where(MyCrash => MyCrash.TimeOfCrash >= AfewMonthsAgo && MyCrash.TimeOfCrash <= Today.AddDays(1));
                //IEnumerable<Crash> Crashes = FRepository.Get().Crashes.FilterByDate( FRepository.Get().Crashes.ListAll(), AfewMonthsAgo, Today );
                var VMinimalCrashes = CrashesInTimeFrame.Select(Crash => new { TimeOfCrash = Crash.TimeOfCrash.Value, UserID = Crash.UserNameId.Value }).ToList();

                List <FCrashMinimal> MinimalCrashes = new List <FCrashMinimal>(VMinimalCrashes.Count);
                foreach (var Anotype in VMinimalCrashes)
                {
                    MinimalCrashes.Add(new FCrashMinimal(Anotype.TimeOfCrash, Anotype.UserID));
                }
                LogTimerSQL.Dispose();

                int GeneralUserGroupId   = FRepository.Get(_Crashes).FindOrAddGroup("General");
                int CoderUserGroupId     = FRepository.Get(_Crashes).FindOrAddGroup("Coder");
                int EngineQAUserGroupId  = FRepository.Get(_Crashes).FindOrAddGroup("EngineQA");
                int GameQAUserGroupId    = FRepository.Get(_Crashes).FindOrAddGroup("GameQA");
                int AnonymousUserGroupId = FRepository.Get(_Crashes).FindOrAddGroup("Anonymous");

                Dictionary <DateTime, int> GeneralResults   = GetWeeklyCountsByGroup(MinimalCrashes, GeneralUserGroupId);
                Dictionary <DateTime, int> CoderResults     = GetWeeklyCountsByGroup(MinimalCrashes, CoderUserGroupId);
                Dictionary <DateTime, int> EngineQAResults  = GetWeeklyCountsByGroup(MinimalCrashes, EngineQAUserGroupId);
                Dictionary <DateTime, int> GameQAResults    = GetWeeklyCountsByGroup(MinimalCrashes, GameQAUserGroupId);
                Dictionary <DateTime, int> AnonymousResults = GetWeeklyCountsByGroup(MinimalCrashes, AnonymousUserGroupId);
                Dictionary <DateTime, int> AllResults       = GetWeeklyCountsByGroup(MinimalCrashes, AllUserGroupId);

                Dictionary <DateTime, int> DailyGeneralResults   = GetDailyCountsByGroup(MinimalCrashes, GeneralUserGroupId);
                Dictionary <DateTime, int> DailyCoderResults     = GetDailyCountsByGroup(MinimalCrashes, CoderUserGroupId);
                Dictionary <DateTime, int> DailyEngineQAResults  = GetDailyCountsByGroup(MinimalCrashes, EngineQAUserGroupId);
                Dictionary <DateTime, int> DailyGameQAResults    = GetDailyCountsByGroup(MinimalCrashes, GameQAUserGroupId);
                Dictionary <DateTime, int> DailyAnonymousResults = GetDailyCountsByGroup(MinimalCrashes, AnonymousUserGroupId);
                Dictionary <DateTime, int> DailyAllResults       = GetDailyCountsByGroup(MinimalCrashes, AllUserGroupId);

                // Get daily buggs stats.
                List <Bugg> Buggs = _Buggs.ListAll().Where(Bugg => Bugg.TimeOfFirstCrash >= AfewMonthsAgo).ToList();

                Dictionary <DateTime, int> BuggDailyAllResults =
                    (
                        from Bugg in Buggs
                        group Bugg by Bugg.TimeOfFirstCrash.Value.Date into GroupCount
                        orderby GroupCount.Key
                        select new { Count = GroupCount.Count(), Date = GroupCount.Key }
                    ).ToDictionary(x => x.Date, y => y.Count);


                string CrashesByWeek = "";

                foreach (KeyValuePair <DateTime, int> Result in AllResults)
                {
                    int GeneralCrashes = 0;
                    GeneralResults.TryGetValue(Result.Key, out GeneralCrashes);

                    int CoderCrashes = 0;
                    CoderResults.TryGetValue(Result.Key, out CoderCrashes);

                    int EngineQACrashes = 0;
                    EngineQAResults.TryGetValue(Result.Key, out EngineQACrashes);

                    int GameQACrashes = 0;
                    GameQAResults.TryGetValue(Result.Key, out GameQACrashes);

                    int AnonymousCrashes = 0;
                    AnonymousResults.TryGetValue(Result.Key, out AnonymousCrashes);

                    int Year  = Result.Key.Year;
                    int Month = Result.Key.AddMonths(-1).Month;
                    if (Result.Key.Month == 13 || Result.Key.Month == 1)
                    {
                        Month = 0;
                    }

                    int Day = Result.Key.Day + 6;

                    string Line = "[new Date(" + Year + ", " + Month + ", " + Day + "), " + GeneralCrashes + ", " + CoderCrashes + ", " + EngineQACrashes + ", " + GameQACrashes + ", " + AnonymousCrashes + ", " + Result.Value + "], ";
                    CrashesByWeek += Line;
                }

                CrashesByWeek = CrashesByWeek.TrimEnd(", ".ToCharArray());

                string CrashesByDay = "";
                foreach (KeyValuePair <DateTime, int> DailyResult in DailyAllResults)
                {
                    int GeneralCrashes = 0;
                    DailyGeneralResults.TryGetValue(DailyResult.Key, out GeneralCrashes);

                    int CoderCrashes = 0;
                    DailyCoderResults.TryGetValue(DailyResult.Key, out CoderCrashes);

                    int EngineQACrashes = 0;
                    DailyEngineQAResults.TryGetValue(DailyResult.Key, out EngineQACrashes);

                    int GameQACrashes = 0;
                    DailyGameQAResults.TryGetValue(DailyResult.Key, out GameQACrashes);

                    int AnonymousCrashes = 0;
                    DailyAnonymousResults.TryGetValue(DailyResult.Key, out AnonymousCrashes);

                    int Year  = DailyResult.Key.Year;
                    int Month = DailyResult.Key.AddMonths(-1).Month;
                    if (DailyResult.Key.Month == 13 || DailyResult.Key.Month == 1)
                    {
                        Month = 0;
                    }

                    int Day = DailyResult.Key.Day;

                    string Line = "[new Date(" + Year + ", " + Month + ", " + Day + "), " + GeneralCrashes + ", " + CoderCrashes + ", " + EngineQACrashes + ", " + GameQACrashes + ", " + AnonymousCrashes + ", " + DailyResult.Value + "], ";
                    CrashesByDay += Line;
                }

                CrashesByDay = CrashesByDay.TrimEnd(", ".ToCharArray());

                string BuggsByDay = "";
                foreach (KeyValuePair <DateTime, int> DailyResult in BuggDailyAllResults)
                {
                    int Year  = DailyResult.Key.Year;
                    int Month = DailyResult.Key.AddMonths(-1).Month;
                    if (DailyResult.Key.Month == 13 || DailyResult.Key.Month == 1)
                    {
                        Month = 0;
                    }

                    int Day = DailyResult.Key.Day;

                    string Line = "[new Date(" + Year + ", " + Month + ", " + Day + "), " + DailyResult.Value + "], ";
                    BuggsByDay += Line;
                }

                BuggsByDay = BuggsByDay.TrimEnd(", ".ToCharArray());

                var ResultDashboard = new DashboardViewModel {
                    CrashesByWeek = CrashesByWeek, CrashesByDay = CrashesByDay, BuggsByDay = BuggsByDay
                };
                ResultDashboard.GenerationTime = LogTimer.GetElapsedSeconds().ToString("F2");
                return(View("Index", ResultDashboard));
            }
        }
Example #16
0
        int FillObjects(string Table, TreeIter root, TableInfo.Params ParametersIn)
        {
            TreeIter     DeleteIter, ClearIter, GroupIter, ItemIter;
            int          Totalcount = 0;
            int          DelCount   = 0;
            int          ClearCount = 0;
            int          GroupCount;
            DbCommand    cmd;
            DbDataReader rdr;

            QSMain.CheckConnectionAlive();
            logger.Debug("Поиск зависимостей для таблицы {0}", Table);
            if (!QSMain.ProjectTables.ContainsKey(Table))
            {
                ErrorString = "Нет описания для таблицы " + Table;
                logger.Error(ErrorString);
                ErrorHappens = true;
                return(0);
            }
            if (QSMain.ProjectTables[Table].DeleteItems.Count > 0)
            {
                if (!ObjectsTreeStore.IterIsValid(root))
                {
                    DeleteIter = ObjectsTreeStore.AppendNode();
                }
                else
                {
                    DeleteIter = ObjectsTreeStore.AppendNode(root);
                }
                foreach (KeyValuePair <string, TableInfo.DeleteDependenceItem> pair in QSMain.ProjectTables[Table].DeleteItems)
                {
                    GroupCount = 0;
                    if (!QSMain.ProjectTables.ContainsKey(pair.Key))
                    {
                        ErrorString = String.Format("Зависимость удаления у таблицы {1} ссылается на таблицу {0} описания для которой нет.", pair.Key, Table);
                        logger.Error(ErrorString);
                        ErrorHappens = true;
                        return(0);
                    }
                    string sql = QSMain.ProjectTables[pair.Key].SqlSelect + pair.Value.sqlwhere;
                    cmd             = QSMain.ConnectionDB.CreateCommand();
                    cmd.CommandText = sql;
                    AddParameters(cmd, pair.Value.SqlParam, ParametersIn);

                    rdr = cmd.ExecuteReader();
                    if (!rdr.HasRows)
                    {
                        rdr.Close();
                        continue;
                    }
                    GroupIter = ObjectsTreeStore.AppendNode(DeleteIter);
                    int IndexIntParam = 0;
                    int IndexStrParam = 0;
                    if (QSMain.ProjectTables[pair.Key].PrimaryKey.ParamInt != "")
                    {
                        IndexIntParam = rdr.GetOrdinal(QSMain.ProjectTables[pair.Key].PrimaryKey.ParamInt);
                    }
                    if (QSMain.ProjectTables[pair.Key].PrimaryKey.ParamStr != "")
                    {
                        IndexStrParam = rdr.GetOrdinal(QSMain.ProjectTables[pair.Key].PrimaryKey.ParamStr);
                    }
                    List <object[]> ReadedData = new List <object[]>();
                    while (rdr.Read())
                    {
                        object[] Fields = new object[rdr.FieldCount];
                        rdr.GetValues(Fields);
                        ReadedData.Add(Fields);
                    }
                    rdr.Close();

                    foreach (object[] row in ReadedData)
                    {
                        ItemIter = ObjectsTreeStore.AppendValues(GroupIter, String.Format(QSMain.ProjectTables[pair.Key].DisplayString, row));
                        if (QSMain.ProjectTables[pair.Key].DeleteItems.Count > 0 || QSMain.ProjectTables[pair.Key].ClearItems.Count > 0)
                        {
                            TableInfo.Params OutParam = new TableInfo.Params();
                            if (QSMain.ProjectTables[pair.Key].PrimaryKey.ParamInt != "")
                            {
                                OutParam.ParamInt = Convert.ToInt32(row[IndexIntParam]);
                            }
                            if (QSMain.ProjectTables[pair.Key].PrimaryKey.ParamStr != "")
                            {
                                OutParam.ParamStr = row[IndexStrParam].ToString();
                            }
                            Totalcount += FillObjects(pair.Key, ItemIter, OutParam);
                        }
                        GroupCount++;
                        Totalcount++;
                        DelCount++;
                    }
                    ObjectsTreeStore.SetValues(GroupIter, QSMain.ProjectTables[pair.Key].ObjectsName + "(" + GroupCount.ToString() + ")");
                }
                if (DelCount > 0)
                {
                    ObjectsTreeStore.SetValues(DeleteIter, String.Format("Будет удалено ({0}/{1}) объектов:", DelCount, Totalcount));
                }
                else
                {
                    ObjectsTreeStore.Remove(ref DeleteIter);
                }
            }

            if (QSMain.ProjectTables[Table].ClearItems.Count > 0)
            {
                if (!ObjectsTreeStore.IterIsValid(root))
                {
                    ClearIter = ObjectsTreeStore.AppendNode();
                }
                else
                {
                    ClearIter = ObjectsTreeStore.AppendNode(root);
                }
                foreach (KeyValuePair <string, TableInfo.ClearDependenceItem> pair in QSMain.ProjectTables[Table].ClearItems)
                {
                    GroupCount = 0;
                    if (!QSMain.ProjectTables.ContainsKey(pair.Key))
                    {
                        ErrorString = String.Format("Зависимость очистки у таблицы {1} ссылается на таблицу {0} описания для которой нет.", pair.Key, Table);
                        logger.Error(ErrorString);
                        ErrorHappens = true;
                        return(0);
                    }
                    string sql = QSMain.ProjectTables[pair.Key].SqlSelect + pair.Value.sqlwhere;
                    cmd             = QSMain.ConnectionDB.CreateCommand();
                    cmd.CommandText = sql;
                    AddParameters(cmd, pair.Value.SqlParam, ParametersIn);

                    rdr = cmd.ExecuteReader();
                    if (!rdr.HasRows)
                    {
                        rdr.Close();
                        continue;
                    }
                    GroupIter = ObjectsTreeStore.AppendNode(ClearIter);

                    while (rdr.Read())
                    {
                        object[] Fields = new object[rdr.FieldCount];
                        rdr.GetValues(Fields);
                        ItemIter = ObjectsTreeStore.AppendValues(GroupIter, String.Format(QSMain.ProjectTables[pair.Key].DisplayString, Fields));
                        GroupCount++;
                        Totalcount++;
                        ClearCount++;
                    }
                    ObjectsTreeStore.SetValues(GroupIter, QSMain.ProjectTables[pair.Key].ObjectsName + "(" + GroupCount.ToString() + ")");
                    rdr.Close();
                }
                if (ClearCount > 0)
                {
                    ObjectsTreeStore.SetValues(ClearIter, String.Format("Будет очищено ссылок у {0} объектов:", ClearCount));
                }
                else
                {
                    ObjectsTreeStore.Remove(ref ClearIter);
                }
            }
            return(Totalcount);
        }