public void Cleanup() { _logger.LogInformation($"Cleanup"); // NB: The below operation could be slow because interacts with // every running container to get stats. var runspaceIdsToRemove = _runspacesStatsMonitor.EvaluateRunspacesToRemove(); foreach (var runspaceId in runspaceIdsToRemove) { var userId = _userRunspaces.GetUser(runspaceId); // Kill Runspace Container Kill(userId, runspaceId); // Unregister from stats _runspacesStatsMonitor.Unregister(runspaceId); } // Cleanup Local Data for containers that are not running // Get all running containers and if there are such for which // local data exists but they are not available, remove local data var runningRunspaces = _runspaceProvider.List().Select(a => a.Id); // Clean up user to runspace data var userIds = _userRunspaces.ListUsers(); foreach (var userId in userIds ?? Enumerable.Empty <string>()) { var userRunspaces = _userRunspaces.List(userId); foreach (var runspaceData in userRunspaces ?? Enumerable.Empty <IRunspaceData>()) { if (!runningRunspaces.Contains(runspaceData.Id)) { _userRunspaces.RemoveData(userId, runspaceData.Id); } } } // Clean up statistics data var monitoredRunspaces = _runspacesStatsMonitor.GetRegisteredRunspaces(); foreach (var runspaceId in monitoredRunspaces ?? Enumerable.Empty <string>()) { if (!runningRunspaces.Contains(runspaceId)) { _runspacesStatsMonitor.Unregister(runspaceId); } } }
private void CleanupWebConsoles() { var webConsoleIdsToRemove = _runspacesStatsMonitor.EvaluateRunspacesToRemove(IRunspacesStatsMonitor.RunspaceType.WebConsole); foreach (var webConsoleId in webConsoleIdsToRemove) { var userId = _userWebConsoles.GetUser(webConsoleId); // Kill WebConsole KillWebConsole(userId, webConsoleId); // Unregister from stats _runspacesStatsMonitor.Unregister(webConsoleId); } // Cleanup Local Data for web consoles that are not running // Get all running web consoles and if there are such for which // local data exists but they are not available, remove local data var runningWebConsoles = _runspaceProvider.ListWebConsole().Select(a => a.Id); // Clean up user to web console data var userIds = _userWebConsoles.ListUsers(); foreach (var userId in userIds ?? Enumerable.Empty <string>()) { var userWebConosles = _userWebConsoles.List(userId); foreach (var webConsoleData in userWebConosles ?? Enumerable.Empty <IWebConsoleData>()) { if (!runningWebConsoles.Contains(webConsoleData.Id)) { _userWebConsoles.RemoveData(userId, webConsoleData.Id); } } } // Clean up statistics data var monitoredWebConsoles = _runspacesStatsMonitor.GetRegisteredWebConsoles(); foreach (var webConsoleId in monitoredWebConsoles ?? Enumerable.Empty <string>()) { if (!runningWebConsoles.Contains(webConsoleId)) { _runspacesStatsMonitor.Unregister(webConsoleId); } } }