private void OnTimedEvent(object source, ElapsedEventArgs e) { lock (ObjectLock) { var users = new ServiceUserLogins().GetUsersLoggedIn(); foreach (var user in users) { if (!_loggedInUsers.Contains(user)) { //user logged in var en = new EntityUserLogin(); en.UserName = user; en.LoginDateTime = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture); new ServiceUserTracker().AddTrackerEvent(en); } else { _loggedInUsers.Remove(user); } } foreach (var user in _loggedInUsers) { //user logged out var loginEntity = new ServiceUserTracker().GetUserLastLogin(user); if (loginEntity != null) { loginEntity.LogoutDateTime = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture); new ServiceUserTracker().UpdateTrackerEvent(loginEntity); } } _loggedInUsers = users; } }
private DtoTriggerResponse GetAllPoliciesForTriggerType(EnumPolicy.Trigger triggerType) { var policyRequest = new DtoPolicyRequest(); policyRequest.ClientIdentity.Name = DtoGobalSettings.ClientIdentity.Name; policyRequest.ClientIdentity.Guid = DtoGobalSettings.ClientIdentity.Guid; policyRequest.ClientIdentity.InstallationId = DtoGobalSettings.ClientIdentity.InstallationId; policyRequest.Trigger = triggerType; //user login history and application usage is submitted for every startup or checkin trigger if (triggerType != EnumPolicy.Trigger.Login) { var serviceUserTracker = new ServiceUserTracker(); serviceUserTracker.CleanupOldEvents(); policyRequest.UserLogins = serviceUserTracker.GetUserCompletedEvents(); var serviceAppMonitor = new ServiceAppMonitor(); //Clean up duplicates before sending data to server serviceAppMonitor.CleanupOldEvents(); serviceAppMonitor.RemoveDuplicates(); policyRequest.AppMonitors = serviceAppMonitor.GetCompletedEvents(); } var response = new APICall().PolicyApi.GetClientPolicies(policyRequest); if (response == null) { return(null); } //only update checkin time for startup and checkin if (triggerType != EnumPolicy.Trigger.Login) { DtoGobalSettings.ShutdownDelay = response.ShutdownDelay; //Cannot have a checkin time less than 1 minute DtoGobalSettings.CheckinTime = response.CheckinTime >= 1 ? response.CheckinTime : 1; } if (response.UserLoginsSubmitted && policyRequest.UserLogins != null) { new ServiceUserTracker().DeleteEvents(policyRequest.UserLogins); } if (response.AppMonitorSubmitted && policyRequest.AppMonitors != null) { new ServiceAppMonitor().DeleteEvents(policyRequest.AppMonitors); } if (!ValidatePolicies(response.Policies)) { return(null); } return(response); }