public void SaveLogsTestPass()
        {
            // Arrange

            IAuditingRestClient auditingRestClient = new AuditingRestClient("http://localhost:9500/", "pledge", "pledge/user");
            PledgeLog logEntry = new PledgeLog()
            {
                Message = "Pledge job had run with 10 errors",
                Subject = "Pledge Run",
                DateCreated = DateTime.UtcNow,
                Type = LogType.Regular,
                StartTime = DateTime.UtcNow,
                EndTime = DateTime.UtcNow,
                UserName = "******"
            };

            // Act
            bool saved = auditingRestClient.SaveLogs(new LogList<PledgeLog>(new List<PledgeLog>() { logEntry}));

            // Assert
            
            // While developing localy
            // Assert.True(saved);

            // any where else!
            Assert.True(true);
        }
        //[Test]
        // ReSharper disable once UnusedMember.Global
        public void AuditingRestClientSaveLogsTestPass()
        {
            // Arrange
            IAuditorRestClient auditingRestClient = new AuditorRestClient();
            const string userName = "******";
            var logs = new List<PledgeLog>();
            for (var i = 0; i < 1; i++)
            {
                var date = DateTime.UtcNow;
                var logEntry = new PledgeLog()
                {
                    Message = "Pledge job had run with 10 errors",
                    Subject = i + " -- Pledge Run",
                    DateCreated = date,
                    Type = LogType.Regular,
                    StartTime = date,
                    EndTime = date.AddSeconds(_randomizer.NextUInt()),
                    UserName = userName,
                    SessionId = Guid.Empty.ToString(),
                    RunType = RunType.Undefined,
                    ConfigId = Guid.Empty.ToString(),
                    ConfigName = "Random Config Name",
                    FailedRows = 12,
                    JobId = Guid.Empty.ToString(),
                    PassedRows = 325
                };
                logEntry.TimeTaken = (logEntry.EndTime - logEntry.StartTime).TotalMilliseconds;
                logEntry.TotalRows = logEntry.FailedRows + logEntry.PassedRows;
                logs.Add(logEntry);
            }
            // Act
            auditingRestClient.SaveLogs(logs);

            // Assert
        }
Example #3
0
        /// <summary>
        /// Logs the specified message.
        /// </summary>
        /// <param name="entry">The message.</param>
        /// <exception cref="InvalidLogException"></exception>
        public void Log(PledgeLog entry)
        {
            WriteDefaultValues(entry);

            if (entry.IsValid())
            {
                Logs.Add(entry);
            }
            else
            {
                throw new InvalidLogException(entry);
            }
        }
Example #4
0
        private static PledgeLog CreateFileProcessPledgeLog(IConfiguration configuration, IRemoteJob job, Dictionary<string, string> loggingOptions)
        {
            string sessionId = Guid.Empty.ToString();
            string fileName = null;

            loggingOptions?.TryGetValue(PledgeGlobal.SessionId, out sessionId);
            loggingOptions?.TryGetValue(PledgeGlobal.InputFileName, out fileName);

            PledgeLog logEntry = new PledgeLog()
            {
                ConfigId = configuration.Id.ToString(),
                StartTime = DateTime.UtcNow,
                DateCreated = DateTime.UtcNow,
                SessionId = sessionId,
                RunType = sessionId == Guid.Empty.ToString() ? RunType.ScheduledJobRun : RunType.WebsiteRun
            };

            if (job != null)
            {
                logEntry.JobId = job.JobId.ToString();
                var propertyBag = job.IngestMediumSettings;
                if (string.IsNullOrWhiteSpace(fileName))
                {
                    var sourceFolder = propertyBag.GetProperty(PledgeGlobal.ImportFolderKey);
                    var filePattern = propertyBag.GetProperty(PledgeGlobal.FilePatternKey);
                    try
                    {
                        fileName = Directory.GetFiles(sourceFolder, filePattern).FirstOrDefault();
                    }
                    catch
                    {
                        fileName = $"{filePattern} (in) {sourceFolder}";
                    }

                }
                logEntry.Write(propertyBag, nameof(job.IngestMediumSettings));
                logEntry.Write(job.EgestHandlerType.ToString(), nameof(job.EgestHandlerType));
                logEntry.Write(job.IngestHandlerType.ToString(), nameof(job.IngestHandlerType));
                logEntry.Write(loggingOptions, nameof(loggingOptions));
            }

            logEntry.Subject = $"Process File: {fileName}";

            return logEntry;
        }
        public void SaveAuditAfterPledgeRun()
        {
            // Arrange
            var controller = CreateController();
            var date = DateTime.UtcNow.AddSeconds(_randomizer.NextUInt());
            PledgeLog logEntry = new PledgeLog()
            {
                Message = "Pledge job had run with 10 errors",
                Subject = " -- Pledge Run",
                DateCreated = date,
                Type = LogType.Regular,
                StartTime = date,
                EndTime = date.AddSeconds(56),
                UserName = _authenticationManager.User.Identity.Name,
                SessionId = Guid.Empty.ToString(),
                RunType = RunType.Undefined,
                ConfigId = Guid.NewGuid().ToString(),
                ConfigName = _randomizer.GetString(12),
                FailedRows = _randomizer.NextUInt(25),
                JobId = Guid.Empty.ToString(),
                PassedRows = _randomizer.NextUInt(32)
            };

            Moq.FakeAuditorRestClient.ClearLogs();
            
            // Act
            _auditor.Log(logEntry);
            _auditor.SaveLogs();
            var result = controller.GetAuditLogsForUser(1, 1);
            var logView = result.Data.First();

            // Assert
            Assert.AreEqual(1, result.Data.Count);
            Assert.AreEqual(logEntry.ConfigId, logView.ConfigId);
            Assert.AreEqual(logEntry.ConfigName, logView.ConfigName);
            Assert.AreEqual(logEntry.EndTime, logView.EndTime);
            Assert.AreEqual(logEntry.FailedRows, logView.FailedRows);
            Assert.AreEqual(logEntry.JobId, logView.JobId);
            Assert.AreEqual(logEntry.PassedRows, logView.PassedRows);
            Assert.AreEqual(logEntry.StartTime, logView.StartTime);
            Assert.AreEqual(logEntry.TimeTaken, logView.TimeTaken);
            Assert.AreEqual(logEntry.TotalRows, logView.TotalRows);
        }
Example #6
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="log"></param>
 private PledgeLogView(PledgeLog log)
 {
     if (null == log) return;
     StartTime = log.StartTime;
     EndTime = log.EndTime;
     TimeTaken = log.TimeTaken;
     FailedRows = log.FailedRows;
     PassedRows = log.PassedRows;
     TotalRows = log.TotalRows;
     ConfigId = log.ConfigId;
     ConfigName = log.ConfigName;
     ConfigAuthor = log.ConfigAuthor;
     GroupName = log.GroupName;
     JobId = log.JobId;
     Type = log.Type;
     Subject = log.Subject;
     Message = log.Message;
     DateCreated = log.DateCreated;
 }
Example #7
0
        public void SaveAndGetLogsTest()
        {
            // Test to save logs and get them back
            // Arrange

            var unsavedLogs = new List<PledgeLog>();
            var userName = _randomizer.GetString(12);
            for (int i = 0; i < 3; i++)
            {
                var date = DateTime.UtcNow.AddSeconds(i);
                PledgeLog logEntry = new PledgeLog
                {
                    Message = "Pledge job had run with 10 errors",
                    Subject = i + " -- Pledge Run",
                    DateCreated = date,
                    Type = LogType.Regular,
                    StartTime = date,
                    EndTime = date.AddSeconds(56),
                    UserName = userName,
                    SessionId = Guid.Empty.ToString(),
                    RunType = RunType.Undefined,
                    ConfigId = Guid.NewGuid().ToString(),
                    ConfigName = _randomizer.GetString(12),
                    FailedRows = _randomizer.NextUInt(25),
                    JobId = Guid.Empty.ToString(),
                    PassedRows = _randomizer.NextUInt(32)
                };
                logEntry.TimeTaken = (logEntry.EndTime - logEntry.StartTime).TotalMilliseconds;
                logEntry.TotalRows = logEntry.FailedRows + logEntry.PassedRows;
                unsavedLogs.Add(logEntry);
            }

            // Act
            unsavedLogs.ForEach(logMessage => _auditor.Log(logMessage));
            _auditor.SaveLogs();
            RestResult<PledgeLog> savedLogs = _auditor.GetAllByUserName(userName, LogType.Regular, 1, unsavedLogs.Count, false);

            // Assert
            Assert.AreEqual(unsavedLogs.Count, savedLogs?.Data?.Count ?? 0, 0);
            unsavedLogs.ForEach(item => Assert.True(savedLogs?.Data?.Contains(item)));
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="entry"></param>
 public InvalidLogException(PledgeLog entry) : base(entry?.ToString())
 {
 }
Example #9
0
 private static void LogEntry(PledgeLog log)
 {
     _logs.Add(log);
 }
Example #10
0
        public void SaveLogsTimeTakenWillBeCalculatedDuringTheSavingTest()
        {
            // Test to save logs and get them back
            // Arrange
            var userName = _randomizer.GetString(12);
            var log = new PledgeLog
            {
                UserName = userName,
                Message = _randomizer.GetString(365),
                StartTime = DateTime.UtcNow,
                SessionId = Guid.NewGuid().ToString(),
                EndTime = DateTime.UtcNow.AddMilliseconds(_randomizer.NextUShort()),
                RunType = RunType.WebsiteRun,
                FailedRows = _randomizer.NextUShort(),
                TimeTaken = 0,
                DateCreated = DateTime.UtcNow,
                ConfigId = Guid.NewGuid().ToString(),
                PassedRows = 0,
                JobId = Guid.Empty.ToString(),
                Type = LogType.Regular,
                ConfigName = _randomizer.GetString(12),
                Subject = "Process File: " + _randomizer.GetString(32) + ".txt"
            };

            var timeTaken = (log.EndTime - log.StartTime).TotalMilliseconds;

            // Act
            _auditor.Log(log);
            _auditor.SaveLogs();

            // Assert
            Assert.AreEqual(timeTaken, log.TimeTaken, 0.001);
        }
Example #11
0
        public void SaveLogsTypeWillBeSetDuringTheSavingIfWasntAlreadySetTest()
        {
            // Test to save logs and get them back
            // Arrange
            var userName = _randomizer.GetString(12);
            var log = new PledgeLog
            {
                Message = _randomizer.GetString(365),
                StartTime = DateTime.UtcNow,
                UserName = userName,
                SessionId = Guid.NewGuid().ToString(),
                EndTime = DateTime.UtcNow.AddMilliseconds(_randomizer.NextUShort()),
                RunType = RunType.WebsiteRun,
                FailedRows = _randomizer.NextUShort(),
                TimeTaken = 0,
                ConfigId = Guid.NewGuid().ToString(),
                PassedRows = 0,
                JobId = Guid.Empty.ToString(),
                ConfigName = _randomizer.GetString(12),
                Subject = "Process File: " + _randomizer.GetString(32) + ".txt"
            };

            // Act
            _auditor.Log(log);
            _auditor.SaveLogs();

            // Assert
            Assert.AreNotEqual(default(DateTime), log.DateCreated);
        }
        //[Test]
        // ReSharper disable once UnusedMember.Global
        public void AuditingRestClientGetLogsTestPass()
        {
            // Arrange
            IAuditorRestClient auditingRestClient = new AuditorRestClient();
            var logs = new List<PledgeLog>();
            const string userName = "******";
            const int items = 10;
            for (var i = 0; i < items; i++)
            {
                var logEntry = new PledgeLog()
                {
                    Message = "Pledge job had run with 10 errors",
                    Subject = "Pledge Run",
                    DateCreated = DateTime.UtcNow,
                    Type = LogType.Regular,
                    StartTime = DateTime.UtcNow,
                    EndTime = DateTime.UtcNow.AddSeconds(56),
                    UserName = userName,
                    SessionId = Guid.Empty.ToString(),
                    RunType = RunType.Undefined,
                    ConfigId = Guid.Empty.ToString(),
                    ConfigName = "Random Config Name",
                    FailedRows = 12,
                    JobId = Guid.Empty.ToString(),
                    PassedRows = 325
                };
                logEntry.TimeTaken = (logEntry.EndTime - logEntry.StartTime).TotalMilliseconds;
                logEntry.TotalRows = logEntry.FailedRows + logEntry.PassedRows;
                logs.Add(logEntry);
            }
            // Act
            auditingRestClient.SaveLogs(logs);
            var logsFromServer = auditingRestClient.GetLogsByUserName(userName, LogType.Regular, -1, -1, true);

            // Assert
            // DEv Test
            Assert.GreaterOrEqual(logsFromServer?.TotalHits ?? 0, items);
        }
Example #13
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="pledgeLog"></param>
 /// <returns></returns>
 public static PledgeLogView From(PledgeLog pledgeLog)
 {
     if (null == pledgeLog) return null;
     return new PledgeLogView(pledgeLog);
 }
Example #14
0
        /// <summary>
        /// Runs the job.
        /// </summary>
        /// <returns></returns>
        public async Task<string> RunJob(CancellationToken token)
        {
            var logEntry = new PledgeLog();
            var client = new HttpClient();
            try
            {
                client.BaseAddress = new Uri(ApiAddress);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                //Check if the credentials provided for the remote job are vaild.
                var content = new StringContent($"grant_type=password&username={UserName}&password={Password}",
                    Encoding.UTF8, "application/x-www-form-urlencoded");
                var response = await client.PostAsync("Token", content, token);
                if (!response.IsSuccessStatusCode)
                {
                    return response.ReasonPhrase;
                }

                //Once authenticated, add access token as header
                var login = await response.Content.ReadAsAsync<AuthenticationResponse>(token);
                var accessToken = login.AccessToken;
                client.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");

                //Get the config object attached to the JobId
                response = await client.GetAsync($"api/jobs/get/{JobId}", token);
                if (!response.IsSuccessStatusCode)
                {
                    return response.ReasonPhrase;
                }
                var jobData = await response.Content.ReadAsAsync<JobData>(token);
                if (jobData == null)
                {
                    return "Object Deserialization error";
                }


                //Add LogEntry details
                logEntry.JobId = JobId;
                logEntry.ConfigId = jobData.PledgeConfiguration.Id.ToString();
                logEntry.ConfigName = jobData.PledgeConfiguration.Name;
                logEntry.UserName = UserName;
                logEntry.Type = LogType.Regular;
                logEntry.Subject = $"Process Job: {JobId}";
                logEntry.DateCreated = DateTime.UtcNow;
                logEntry.StartTime = DateTime.UtcNow;
                
                //Run pledge pipeline
                var activeJob = jobData.Job;
                var jobName = jobData.Job.JobName;
                var builder = new ModelBuilder();
                var pipeline = builder.CreatePipeline(activeJob, jobData.PledgeConfiguration);
                var payload = pipeline.Run(token);

                //Add remaining LogEntry details on successful run of the job
                logEntry.EndTime = DateTime.UtcNow;
                logEntry.TotalRows = payload.PledgeResult.TotalRecordsProcessed;
                logEntry.PassedRows = payload.PledgeResult.TotalPassedRecordsCount;
                logEntry.FailedRows = payload.PledgeResult.TotalFailedRecordsCount;


                //Cleanup(activeJob, payload);
                return $"Execution of {jobName} complete";
            }
            catch (Exception error)
            {
                //Add remaining LogEntry details on failure of the job
                logEntry.EndTime = DateTime.UtcNow;
                logEntry.Write(error);
                return error.Message;
            }
            finally
            {
                //Fire and Forget : Post log entry to the Audit (Web API) End-point
                await client.PostAsJsonAsync("api/audit/post/", logEntry);
                // Logging - END
            }
        }
Example #15
0
 // ReSharper disable once UnusedMember.Global
 public void PostAuditLog(PledgeLog logEntry)
 {
     _pledgeAuditor.Log(logEntry);
     _pledgeAuditor.SaveLogs();
 }
Example #16
0
        private void WriteDefaultValues(PledgeLog logEntry)
        {
            if (logEntry == null) return;

            if (logEntry.TimeTaken <= 0 && logEntry.EndTime != logEntry.StartTime)
            {
                logEntry.TimeTaken = (logEntry.EndTime - logEntry.StartTime).TotalMilliseconds;
            }

            if (logEntry.DateCreated == default(DateTime))
            {
                logEntry.DateCreated = DateTime.UtcNow;
            }

            if (logEntry.TotalRows == 0 && (logEntry.PassedRows > 0 || logEntry.FailedRows > 0))
            {
                logEntry.TotalRows = logEntry.PassedRows + logEntry.FailedRows;
            }

            if ((logEntry.Type) == LogType.Undefined)
            {
                logEntry.Type = LogType.Regular;
            }

            if (string.IsNullOrWhiteSpace(logEntry.UserName))
            {
                logEntry.UserName = UserName;
            }

            if (string.IsNullOrWhiteSpace(logEntry.SessionId))
            {
                logEntry.SessionId = SessionId;
            }
            

        }