public void CleanUpInvalidSessions()
        {
            _logger.LogDebug("Performing session cleanup");

            lock (SyncRoot)
            {
                var invalidSessions = SessionsByUsername
                                      .Values
                                      .Where(_ => !_clarifyApplication.IsSessionValid(_.Id))
                                      .ToList();

                foreach (var session in invalidSessions)
                {
                    _logger.LogDebug("Ejecting inactive session {0} for user {1}.".ToFormat(session.Id, session.UserName));
                    EjectSession(session.UserName);
                }

                var count = invalidSessions.Count();
                if (count != 0)
                {
                    _logger.LogInfo("{0} sessions cleaned up", count);
                }
                else
                {
                    _logger.LogDebug("No sessions to clean up");
                }
            }
        }
        public IClarifySessionUsage GetUsage()
        {
            var validSessions   = new List <ClarifySessionUser>();
            var inValidSessions = new List <ClarifySessionUser>();

            var sessionsByUserDictionary = _clarifySessionCache.SessionsByUsername;

            _logger.LogDebug("Building clarify session usage report from {0} items in the cache.".ToFormat(sessionsByUserDictionary.Count));

            foreach (var username in sessionsByUserDictionary.Keys)
            {
                var session     = sessionsByUserDictionary[username];
                var sessionUser = new ClarifySessionUser {
                    SessionId = session.Id, Username = session.UserName
                };
                if (_clarifyApplication.IsSessionValid(session.Id))
                {
                    validSessions.Add(sessionUser);
                }
                else
                {
                    inValidSessions.Add(sessionUser);
                }
            }

            _logger.LogDebug("Found {0} sessions and {1} invalid sessions (now ejected) in the cache.".ToFormat(validSessions.Count, inValidSessions.Count));

            return(new ClarifySessionUsage(validSessions, inValidSessions));
        }