예제 #1
0
        private Task ExecuteLoadItemsCommand()
        {
            IsBusy = true;

            try
            {
                LogEntries.Clear();
                foreach (var item in LoggerSink.GetMessages())
                {
                    switch (ShowOnlyStateMachineLogs)
                    {
                    case true:
                    {
                        if (item.Message.Contains("ActivationStateMachine"))
                        {
                            LogEntries.Add(item);
                        }

                        break;
                    }

                    default:
                        LogEntries.Add(item);
                        break;
                    }
                }
            }
            finally
            {
                IsBusy = false;
            }

            return(Task.CompletedTask);
        }
예제 #2
0
        public void SinksScopeCreatedEvent()
        {
            // arrange
            var logger  = new FakeLogger <LoggerSink>();
            var options = Options.Create(new LoggerSinkOptions
            {
            });
            var sink = new LoggerSink(logger, options);
            var evt  = new FakeScopeCreatedEvent
            {
                ScopeId       = Guid.NewGuid(),
                Name          = Guid.NewGuid().ToString(),
                ParentScopeId = Guid.NewGuid(),
                Timestamp     = DateTimeOffset.Now
            };

            // act
            sink.Sink(evt);

            // assert
            Assert.Collection(logger.Items,
                              x =>
            {
                Assert.Equal(1, x.EventId.Id);
                Assert.Equal("ScopeCreated", x.EventId.Name);
                Assert.Equal(LogLevel.Information, x.LogLevel);
                Assert.Null(x.Exception);
            });
        }
예제 #3
0
        public void SinksTrackerCancelledEvent()
        {
            // arrange
            var logger  = new FakeLogger <LoggerSink>();
            var options = Options.Create(new LoggerSinkOptions
            {
            });
            var sink = new LoggerSink(logger, options);
            var evt  = new FakeTrackerCancelledEvent
            {
                ScopeId   = Guid.NewGuid(),
                Timestamp = DateTimeOffset.Now,
                TrackerId = Guid.NewGuid(),
                Elapsed   = TimeSpan.FromSeconds(123)
            };

            // act
            sink.Sink(evt);

            // assert
            Assert.Collection(logger.Items,
                              x =>
            {
                Assert.Equal(7, x.EventId.Id);
                Assert.Equal("TrackerCancelled", x.EventId.Name);
                Assert.Equal(LogLevel.Error, x.LogLevel);
                Assert.Null(x.Exception);
            });
        }
예제 #4
0
        public void SinkThrowsOnNullTrackingEvent()
        {
            // arrange
            var            logger        = new FakeLogger <LoggerSink>();
            var            options       = Options.Create(new LoggerSinkOptions());
            var            sink          = new LoggerSink(logger, options);
            ITrackingEvent trackingEvent = null;

            // act
            var ex = Assert.Throws <ArgumentNullException>(() => sink.Sink(trackingEvent));

            // assert
            Assert.Equal(nameof(trackingEvent), ex.ParamName);
        }
예제 #5
0
        public void SinkThrowsOnUnknownEvent()
        {
            // arrange
            var logger  = new FakeLogger <LoggerSink>();
            var options = Options.Create(new LoggerSinkOptions
            {
            });
            var sink = new LoggerSink(logger, options);
            var evt  = Mock.Of <ITrackingEvent>();

            // act
            var ex = Assert.Throws <InvalidOperationException>(() => sink.Sink(evt));

            // assert
            Assert.Contains(evt.GetType().Name, ex.Message, StringComparison.Ordinal);
        }
예제 #6
0
        /// <summary>
        /// Execute the database upgrade.
        /// </summary>
        protected override async Task OnRunAsync(ExecutorRunArgs args)
        {
            var ls = new LoggerSink();

            if (_command.HasFlag(DatabaseExecutorCommand.Drop))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB DROP: Checking database existence and dropping where found...");
                await TimeExecutionAsync(() => { DropDatabase.For.SqlDatabase(_connectionString, ls); return(Task.FromResult(true)); }).ConfigureAwait(false);
            }

            if (_command.HasFlag(DatabaseExecutorCommand.Create))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB CREATE: Checking database existence and creating where not found...");
                await TimeExecutionAsync(() => { EnsureDatabase.For.SqlDatabase(_connectionString, ls); return(Task.FromResult(true)); }).ConfigureAwait(false);
            }

            if (_command.HasFlag(DatabaseExecutorCommand.Migrate))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB MIGRATE: Migrating the database...");
                Logger.Default.Info($"Probing for embedded resources: {(string.Join(", ", GetNamespacesWithSuffix($"{MigrationsNamespace}.*.sql")))}");

                DatabaseUpgradeResult?result = null;
                await TimeExecutionAsync(() =>
                {
                    result = DeployChanges.To
                             .SqlDatabase(_connectionString)
                             .WithScripts(GetMigrationScripts(_assemblies))
                             .WithoutTransaction()
                             .LogTo(ls)
                             .Build()
                             .PerformUpgrade();

                    return(Task.FromResult(result.Successful));
                }).ConfigureAwait(false);

                if (!result !.Successful)
                {
                    Logger.Default.Exception(result.Error);
                    return;
                }
            }

            if (_command.HasFlag(DatabaseExecutorCommand.CodeGen))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB CODEGEN: Code-gen database objects...");
                CodeGenConsole.LogCodeGenExecutionArgs(_codeGenArgs);

                if (!await TimeExecutionAsync(async() =>
                {
                    var em = ExecutionManager.Create(() => new CodeGenExecutor(_codeGenArgs));
                    await em.RunAsync().ConfigureAwait(false);
                    return(em.StopExecutor?.Exception == null);
                }).ConfigureAwait(false))
                {
                    return;
                }
            }

            if (_command.HasFlag(DatabaseExecutorCommand.Schema))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB SCHEMA: Drops and creates the database objects...");

                if (!await TimeExecutionAsync(() => DropAndCreateAllObjectsAsync(new string[] { "dbo", "Ref" })).ConfigureAwait(false))
                {
                    return;
                }
            }

            if (_command.HasFlag(DatabaseExecutorCommand.Reset))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB RESET: Resets database by dropping data from all tables...");

                if (!await TimeExecutionAsync(() => DeleteAllAndResetAsync()).ConfigureAwait(false))
                {
                    return;
                }
            }

            if (_command.HasFlag(DatabaseExecutorCommand.Data))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB DATA: Insert or merge the embedded YAML data...");

                if (!await TimeExecutionAsync(() => InsertOrMergeYamlDataAsync()).ConfigureAwait(false))
                {
                    return;
                }
            }

            if (_command.HasFlag(DatabaseExecutorCommand.ScriptNew))
            {
                Logger.Default.Info(string.Empty);
                Logger.Default.Info(new string('-', 80));
                Logger.Default.Info("DB SCRIPTNEW: Creating a new SQL script from embedded template...");

                if (!await TimeExecutionAsync(() => CreateScriptNewAsync()).ConfigureAwait(false))
                {
                    return;
                }
            }

            ReturnCode = 0;
        }
예제 #7
0
 public static Logger Metrics(
     this LoggerSink sink,
     int days = -1)
 {
     const string logFileExtension = ".yml";
 }