コード例 #1
0
ファイル: MsSqlService.cs プロジェクト: t4rn/NagiosChecker
 private SpWho2Session GetBlocker(SpWho2Session session, IEnumerable <SpWho2Session> allSessions)
 {
     if (string.IsNullOrWhiteSpace(session.BlkBy))
     {
         // current session isn't blocked by any other -> so it's a blocker! :D
         return(session);
     }
     else
     {
         var blocker = allSessions.Single(x => x.SPID == Convert.ToInt32(session.BlkBy));
         return(GetBlocker(blocker, allSessions));
     }
 }
コード例 #2
0
ファイル: MsSqlService.cs プロジェクト: t4rn/NagiosChecker
        public IEnumerable <SpWho2Session> GetBlockers(IEnumerable <SpWho2Session> sessions)
        {
            var blockers = new List <SpWho2Session>();

            var blockedSessions = new List <SpWho2Session>();

            foreach (SpWho2Session session in sessions)
            {
                // trim default empty value = " ."
                session.BlkBy = session.BlkBy.Replace(" .", "").Trim();

                if (!string.IsNullOrWhiteSpace(session.BlkBy))
                {
                    blockedSessions.Add(session);
                }
            }

            if (blockedSessions.Any())
            {
                var groupedByBlockId = blockedSessions.GroupBy(x => x.BlkBy);

                log.Debug($"Blocked '{blockedSessions.Count()}' sessions by '{groupedByBlockId.Count()} blockers");

                foreach (var grouped in groupedByBlockId)
                {
                    // every item in 'grouped' has the same BlkBy ID
                    SpWho2Session blockedSession = grouped.First();
                    SpWho2Session blocker        = GetBlocker(blockedSession, sessions);

                    if (!blockers.Contains(blocker))
                    {
                        blockers.Add(blocker);
                    }
                }
            }

            return(blockers);
        }
コード例 #3
0
        public void GetBlockers()
        {
            // Arrange
            int semiBlockerOne = 22;
            int semiBlockerTwo = 24;
            var blockerFirst   = new SpWho2Session {
                SPID = 11, BlkBy = " ."
            };
            var blockerSecond = new SpWho2Session {
                SPID = 999, BlkBy = " ."
            };
            var blockerThird = new SpWho2Session {
                SPID = 4444, BlkBy = " ."
            };

            var sessions = new List <SpWho2Session>()
            {
                blockerFirst,
                new SpWho2Session {
                    SPID = semiBlockerOne, BlkBy = blockerFirst.SPID.ToString()
                },
                new SpWho2Session {
                    SPID = semiBlockerTwo, BlkBy = blockerFirst.SPID.ToString()
                },
                new SpWho2Session {
                    SPID = 30, BlkBy = semiBlockerOne.ToString()
                },
                new SpWho2Session {
                    SPID = 40, BlkBy = semiBlockerTwo.ToString()
                },
                new SpWho2Session {
                    SPID = 50, BlkBy = semiBlockerOne.ToString()
                },

                new SpWho2Session {
                    SPID = 60, BlkBy = blockerSecond.SPID.ToString()
                },
                new SpWho2Session {
                    SPID = 70, BlkBy = blockerSecond.SPID.ToString()
                },
                blockerSecond,

                new SpWho2Session {
                    SPID = 80, BlkBy = blockerThird.SPID.ToString()
                },
                new SpWho2Session {
                    SPID = 90, BlkBy = blockerThird.SPID.ToString()
                },
                blockerThird,
                new SpWho2Session {
                    SPID = 91, BlkBy = blockerThird.SPID.ToString()
                },
                new SpWho2Session {
                    SPID = 92, BlkBy = blockerThird.SPID.ToString()
                },
            };

            _repoMock.Setup(x => x.GetSessions()).Returns(sessions);

            // Act
            IEnumerable <SpWho2Session> blockers = _msSqlService.GetBlockers(sessions);

            // Assert
            blockers.Should().NotBeNullOrEmpty()
            .And.HaveCount(3)
            .And.Contain(new SpWho2Session[] { blockerFirst, blockerSecond, blockerThird });
        }