Пример #1
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            await Task.Yield();

            while (!stoppingToken.IsCancellationRequested)
            {
                await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken);

                var defaultLevel = LogEventLevel.Information;

                if (_logLevelState.ValidToUtc is null)
                {
                    continue;
                }

                if (_customClock.UtcNow() > _logLevelState.ValidToUtc &&
                    _logLevelState.LevelSwitch.MinimumLevel != defaultLevel)
                {
                    _logLevelState.LevelSwitch.MinimumLevel = defaultLevel;
                    _logLevelState.ValidToUtc = null;

                    _logger.Information("Log level reset to {DefaultLevel}", defaultLevel);
                }
            }
        }
        public void SetLevel(LogEventLevel newLevel, TimeSpan timeSpan)
        {
            var oldLevel = LevelSwitch.MinimumLevel;

            if (oldLevel != newLevel)
            {
                _logger.Information("Switching log level from {OldLogLevel} to {NewLogLevel}",
                                    oldLevel,
                                    newLevel);

                LevelSwitch.MinimumLevel = newLevel;

                if (timeSpan < TimeSpan.Zero || timeSpan.TotalHours > 1)
                {
                    const int minutes = 5;
                    timeSpan = TimeSpan.FromMinutes(minutes);
                    _logger.Warning("Invalid timespan for log level, setting time to {Minutes} minutes", minutes);
                }

                _logger.Information("Switched log level from {OldLogLevel} to {NewLogLevel} for {Minutes}",
                                    oldLevel,
                                    newLevel,
                                    timeSpan.TotalMinutes.ToString("F1"));

                ValidToUtc = _customClock.UtcNow().Add(timeSpan);
            }
        }
        public async Task <DeploymentTaskResult> ExecuteDeploymentAsync(
            [NotNull] DeploymentTask deploymentTask,
            ILogger logger,
            CancellationToken cancellationToken)
        {
            if (deploymentTask == null)
            {
                throw new ArgumentNullException(nameof(deploymentTask));
            }

            DateTime  start     = _customClock.UtcNow().UtcDateTime;
            Stopwatch stopwatch = Stopwatch.StartNew();

            (ExitCode, DateTime)result;

            DirectoryInfo deploymentJobsDirectory = EnsureDeploymentJobsDirectoryExists();

            DeploymentTarget deploymentTarget = null;

            try
            {
                deploymentTarget = await _targetSource.GetDeploymentTargetAsync(deploymentTask.DeploymentTargetId,
                                                                                cancellationToken);

                VerifyPreReleaseAllowed(deploymentTask.SemanticVersion,
                                        deploymentTarget,
                                        deploymentTask.PackageId,
                                        logger);

                VerifyAllowedPackageIsAllowed(deploymentTarget, deploymentTask.PackageId, logger);

                result = await RunDeploymentToolAsync(deploymentTask,
                                                      deploymentJobsDirectory,
                                                      deploymentTarget,
                                                      logger,
                                                      cancellationToken);
            }
            catch (Exception ex) when(!ex.IsFatal())
            {
                result = (ExitCode.Failure, _customClock.UtcNow().UtcDateTime);
                logger.Error(ex, "Error deploying");
            }

            stopwatch.Stop();

            string metadataContent = LogJobMetadata(deploymentTask,
                                                    start,
                                                    result.Item2,
                                                    stopwatch,
                                                    result.Item1,
                                                    deploymentJobsDirectory,
                                                    deploymentTarget);

            var deploymentTaskResult = new DeploymentTaskResult(deploymentTask.DeploymentTaskId,
                                                                deploymentTask.DeploymentTargetId,
                                                                result.Item1,
                                                                start,
                                                                result.Item2,
                                                                metadataContent);

            await _mediator.Publish(new DeploymentMetadataLogNotification(deploymentTask, deploymentTaskResult),
                                    cancellationToken);

            return(deploymentTaskResult);
        }