public void StructuredTextLoggerUsesHighestChildTypeToUpdateParentType()
        {
            //Arrange
            var          analytics      = new Mock <IAnalytics>();
            var          logger         = new StructuredTextLogger(@"x:\log.log", analytics.Object);
            var          fileSystemInfo = GetTextLoggerMockFileSystem();
            const string message        = "Message 1";
            const string error          = "Error 1";

            FileSystemHelpers.Instance = fileSystemInfo.FileSystem;

            //Act
            var sublogger = logger.Log(message, LogEntryType.Message);

            sublogger.Log(error, LogEntryType.Error);
            var entries = logger.GetLogEntries();

            //Assert
            Assert.Equal(1, entries.Count());
            Assert.Equal(message, entries.First().Message);
            Assert.Equal(LogEntryType.Error, entries.First().Type);

            var subEntries = logger.GetLogEntryDetails(entries.First().Id);

            Assert.Equal(1, subEntries.Count());
            Assert.Equal(error, subEntries.First().Message);
            Assert.Equal(LogEntryType.Error, subEntries.First().Type);

            //Clean up
            fileSystemInfo.MemoryStream.RealDispose();
        }
        public IActionResult CreateDeployment(DeployResult deployResult, string details)
        {
            var    id   = deployResult.Id;
            string path = Path.Combine(_environment.DeploymentsPath, id);
            IDeploymentStatusFile statusFile = _status.Open(id);

            if (statusFile != null)
            {
                return(StatusCode(StatusCodes.Status409Conflict, String.Format("Deployment with id '{0}' exists", id)));
            }

            FileSystemHelpers.EnsureDirectory(path);
            statusFile             = _status.Create(id);
            statusFile.Status      = deployResult.Status;
            statusFile.Message     = deployResult.Message;
            statusFile.Deployer    = deployResult.Deployer;
            statusFile.Author      = deployResult.Author;
            statusFile.AuthorEmail = deployResult.AuthorEmail;
            statusFile.StartTime   = deployResult.StartTime;
            statusFile.EndTime     = deployResult.EndTime;

            // miscellaneous
            statusFile.Complete     = true;
            statusFile.IsReadOnly   = true;
            statusFile.IsTemporary  = false;
            statusFile.ReceivedTime = deployResult.StartTime;
            // keep it simple regardless of success or failure
            statusFile.LastSuccessEndTime = deployResult.EndTime;
            statusFile.Save();

            if (deployResult.Current)
            {
                _status.ActiveDeploymentId = id;
            }

            var     logger = new StructuredTextLogger(Path.Combine(path, DeploymentManager.TextLogFile), _analytics);
            ILogger innerLogger;

            if (deployResult.Status == DeployStatus.Success)
            {
                innerLogger = logger.Log("Deployment successful.");
            }
            else
            {
                innerLogger = logger.Log("Deployment failed.", LogEntryType.Error);
            }

            if (!String.IsNullOrEmpty(details))
            {
                innerLogger.Log(details);
            }

            return(Ok());
        }
        public void StructuredTextLoggerLogFunction(string message, LogEntryType type)
        {
            //Arrange
            var analytics      = new Mock <IAnalytics>();
            var logger         = new StructuredTextLogger(@"x:\log.log", analytics.Object);
            var fileSystemInfo = GetTextLoggerMockFileSystem();

            FileSystemHelpers.Instance = fileSystemInfo.FileSystem;

            //Act
            logger.Log(message, type);
            var entries = logger.GetLogEntries();

            //Assert
            Assert.Equal(1, entries.Count());
            Assert.Equal(message, entries.First().Message);
            Assert.Equal(type, entries.First().Type);

            //Clean up
            fileSystemInfo.MemoryStream.RealDispose();
        }