Exemple #1
0
        public ScriptExecutionFileStorage(
            ILoggerFactory loggerFactory,
            ScriptExecutionStorageSettings settings,
            IFileSystem fileSystem,
            IScriptExecutionStoreProviderFactory scriptExecutionWriterFactory,
            IPollingScriptExecutionPersisterFactory scriptExecutionPersisterFactory)
        {
            _lastSttingsConfiguration = settings;
            _loggerFactory            = loggerFactory;
            _logger     = loggerFactory.CreateLogger(typeof(ScriptExecutionFileStorage));
            _rootFolder = settings.ServiceScriptStorageDir;
            _fileSystem = fileSystem;
            _scriptExecutionWriterFactory    = scriptExecutionWriterFactory;
            _scriptExecutionPersisterFactory = scriptExecutionPersisterFactory;

            _logger.LogInformation("Creating Script Execution Storage with Settings");
            _logger.LogInformation($"   StorageDir: {settings.ServiceScriptStorageDir}");
            _logger.LogInformation($"   NumberOfScriptsPerUser: {settings.NumberOfScriptsPerUser}");
            _logger.LogInformation($"   NoOlderThanDays: {settings.NoOlderThanDays}");

            // Create Retention Policy base on settings
            var lastNumberOf    = settings.NumberOfScriptsPerUser > 0 ? settings.NumberOfScriptsPerUser : DEFAULT_NUMBER_OF_SCRIPTS_PER_USER;
            var noOlderThanDays = settings.NoOlderThanDays > 0 ? settings.NoOlderThanDays : DEFAULT_NO_OLDER_THAN_DAYS;

            _retentionPolicy = new FolderScriptExecutionsRetentionPolicy(
                loggerFactory,
                _fileSystem,
                _rootFolder,
                new IScriptsRetentionRule[] {
                new LastNumberOfRecordsRetentionRule(lastNumberOf),
                new OlderThanRetentionRule(new TimeSpan(noOlderThanDays, 0, 0, 0))
            });
            StartRetentionPolicyApplier();
        }
Exemple #2
0
        public void UpdateConfiguration(ScriptExecutionStorageSettings settings)
        {
            if (settings != null &&
                (_lastSttingsConfiguration.NoOlderThanDays != settings.NoOlderThanDays ||
                 _lastSttingsConfiguration.NumberOfScriptsPerUser != settings.NumberOfScriptsPerUser ||
                 _lastSttingsConfiguration.ServiceScriptStorageDir != settings.ServiceScriptStorageDir))
            {
                _logger.LogInformation("Updating Script Execution Storage Settings");
                _logger.LogInformation($"   StorageDir: {settings.ServiceScriptStorageDir}");
                _logger.LogInformation($"   NumberOfScriptsPerUser: {settings.NumberOfScriptsPerUser}");
                _logger.LogInformation($"   NoOlderThanDays: {settings.NoOlderThanDays}");

                // Update Settings
                _rootFolder = settings.ServiceScriptStorageDir;
                var lastNumberOf    = settings.NumberOfScriptsPerUser > 0 ? settings.NumberOfScriptsPerUser : DEFAULT_NUMBER_OF_SCRIPTS_PER_USER;
                var noOlderThanDays = settings.NoOlderThanDays > 0 ? settings.NoOlderThanDays : DEFAULT_NO_OLDER_THAN_DAYS;
                _lastSttingsConfiguration = settings;

                // Update Retention policy
                lock (_retentionPolicyUpdateLock) {
                    _retentionPolicy = new FolderScriptExecutionsRetentionPolicy(
                        _loggerFactory,
                        _fileSystem,
                        _rootFolder,
                        new IScriptsRetentionRule[] {
                        new LastNumberOfRecordsRetentionRule(lastNumberOf),
                        new OlderThanRetentionRule(new TimeSpan(noOlderThanDays, 0, 0, 0))
                    });
                }
            }
        }
        private void ServiceConfigurationChanged()
        {
            try {
                // Update runspace provider configuration. Users can update
                // service settings runspace provider configuration is updated
                // before creating new runspaces.
                var providerSettings = new RunspaceProviderSettings();
                Configuration.Bind("RunspaceProviderSettings", providerSettings);
                if (!providerSettings.IsDefault())
                {
                    _logger.LogDebug("RunspaceProviderSettings update:");
                    _logger.LogDebug($"    K8sRunspaceImageName: {providerSettings.K8sRunspaceImageName}");
                    _logger.LogDebug($"    MaxNumberOfRunspaces: {providerSettings.MaxNumberOfRunspaces}");
                    _logger.LogDebug($"    MaxRunspaceActiveTimeMinutes: {providerSettings.MaxRunspaceActiveTimeMinutes}");
                    _logger.LogDebug($"    MaxRunspaceIdleTimeMinutes: {providerSettings.MaxRunspaceIdleTimeMinutes}");
                    RunspaceProviderSingleton.Instance.RunspaceProvider.UpdateConfiguration(providerSettings);
                }
            } catch (Exception configUpdateException) {
                _logger.LogError(configUpdateException, "An error occured on updating runspace provider settings");
            }

            try {
                // Update scripts storage configuration. Users can update
                // service settings for persisting scripts. We update the
                // scripts store settings on run script request.
                var scriptStorageSettings = new ScriptExecutionStorageSettings();
                Configuration.Bind("ScriptExecutionStorageSettings", scriptStorageSettings);
                if (!scriptStorageSettings.IsDefault())
                {
                    ScriptExecutionMediatorSingleton.Instance.ScriptExecutionMediator.UpdateConfiguration(scriptStorageSettings);
                }
            } catch (Exception configUpdateException) {
                _logger.LogError(configUpdateException, "An error occured on updating script storage settings");
            }
        }
Exemple #4
0
 public PersistentScriptExecutionMediator(ILoggerFactory loggerFactory, ScriptExecutionStorageSettings storageSettings)
 {
     _scriptExecutionStorage = new ScriptExecutionFileStorage(loggerFactory, storageSettings);
     _scriptExecutionStorage.ScriptResultStored += (sender, args) => {
         _scriptIdToRunspaceClient.TryRemove(args.ScriptId, out _);
     };
     _runspaceClientFactory = new RunspaceClientFactory();
 }
Exemple #5
0
 public void CreateScriptExecutionStorage(ILoggerFactory loggerFactory, ScriptExecutionStorageSettings storageSettings)
 {
     ScriptExecutionMediator = new PersistentScriptExecutionMediator(loggerFactory, storageSettings);
 }
Exemple #6
0
 public ScriptExecutionFileStorage(ILoggerFactory loggerFactory, ScriptExecutionStorageSettings settings)
     : this(loggerFactory, settings, new FileSystem(), new ScriptExecutionFileStoreProviderFactory(), new PollingScriptExecutionPersisterFactory())
 {
 }
Exemple #7
0
 public void UpdateConfiguration(ScriptExecutionStorageSettings settings)
 {
     _scriptExecutionStorage.UpdateConfiguration(settings);
 }