public void SeriLogPublisher_NewPublisher_Elasticsearch_WriteToSink_UsingAny_ILogEventSink_IPML_Success() { //-------------------------Arrange------------------------------ var testEventSink = new TestLogEventSink(); var seriConfig = new TestSeriLogSinkConfig(testEventSink); var dependency = new Depends(Depends.ContainerType.AnonymousElasticsearch); var hostName = "http://" + dependency.Container.IP; var loggerSource = new SerilogElasticsearchSource { Port = DefaultPort, HostName = hostName, }; var loggerConnection = loggerSource.NewConnection(seriConfig); var loggerPublisher = loggerConnection.NewPublisher(); var error = new { ServerName = "testServer", Error = "testError" }; var fatal = new { ServerName = "testServer", Error = "testFatalError" }; var info = new { Message = "test message" }; //-------------------------Act---------------------------------- loggerPublisher.Info(GlobalConstants.WarewolfLogsTemplate, info); loggerPublisher.Error(GlobalConstants.WarewolfLogsTemplate, error); loggerPublisher.Fatal(GlobalConstants.WarewolfLogsTemplate, fatal); var actualLogEventList = testEventSink.LogData; //-------------------------Assert------------------------------- Assert.AreEqual(3, actualLogEventList.Count); Assert.AreEqual(expected: LogEventLevel.Information, actual: actualLogEventList[0].Level); Assert.AreEqual(expected: GlobalConstants.WarewolfLogsTemplate, actual: actualLogEventList[0].MessageTemplate.Text); var o1 = JObject.Parse(actualLogEventList[0].Properties["Data"].ToString()); Assert.AreEqual(expected: "test message", actual: o1["Message"].ToString()); Assert.AreEqual(expected: LogEventLevel.Error, actual: actualLogEventList[1].Level); Assert.AreEqual(expected: GlobalConstants.WarewolfLogsTemplate, actual: actualLogEventList[1].MessageTemplate.Text); var o2 = JObject.Parse(actualLogEventList[1].Properties["Data"].ToString()); Assert.AreEqual(expected: "testServer", o2["ServerName"].ToString()); Assert.AreEqual(expected: "testError", o2["Error"].ToString()); Assert.AreEqual(expected: LogEventLevel.Fatal, actual: actualLogEventList[2].Level); Assert.AreEqual(expected: GlobalConstants.WarewolfLogsTemplate, actual: actualLogEventList[2].MessageTemplate.Text); var o3 = JObject.Parse(actualLogEventList[2].Properties["Data"].ToString()); Assert.AreEqual(expected: "testServer", o3["ServerName"].ToString()); Assert.AreEqual(expected: "testFatalError", o3["Error"].ToString()); }
public void SeriLogELasticsearchConfig_NoParamConstructor_Returns_Default() { var source = new SerilogElasticsearchSource { ResourceID = Guid.Parse("24e12ae4-58b6-4fec-b521-48493230fef7"), HostName = "localhost", Port = "9200", ResourceName = "TestSource", SearchIndex = "warewolftestlogs" }; var config = new SeriLogElasticsearchConfig(source); Assert.IsNotNull(config.Logger); Assert.IsNotNull(config.Endpoint); }
public IEnumerable <object> GetPublishedData(SerilogElasticsearchSource source, string executionID) { var uri = new Uri(source.HostName + ":" + source.Port); var settings = new ConnectionSettings(uri) .RequestTimeout(TimeSpan.FromMinutes(2)) .DefaultIndex(source.SearchIndex); if (source.AuthenticationType == AuthenticationType.Password) { settings.BasicAuthentication(source.Username, source.Password); } var client = new ElasticClient(settings); var result = client.Ping(); var isValid = result.IsValid; if (!isValid) { throw new Exception("Invalid Data Source"); } else { var jArray = new JArray(); var jsonQueryexecutionId = new JObject { ["match"] = new JObject { ["fields.Data.Audit.ExecutionID"] = executionID } }; jArray.Add(jsonQueryexecutionId); var objMust = new JObject(); objMust.Add("must", jArray); var obj = new JObject(); obj.Add("bool", objMust); var query = obj.ToString(); var search = new SearchDescriptor <object>() .Query(q => q.Raw(query)); var logEvents = client.Search <object>(search); var sources = logEvents.HitsMetadata.Hits.Select(h => h.Source); return(sources); } }
private void LoadExecutionHistoryintoElastic(Guid executionId, Guid resourceId, string auditType, string detail, string eventLevel) { var dependency = new Depends(Depends.ContainerType.AnonymousElasticsearch); var hostName = "http://" + dependency.Container.IP; var port = dependency.Container.Port; var loggerSource = new SerilogElasticsearchSource { Port = port, HostName = hostName, SearchIndex = "warewolftestlogs" }; var uri = new Uri(hostName + ":" + port); var logger = new LoggerConfiguration() .MinimumLevel.Verbose() .WriteTo.Sink(new ElasticsearchSink(new ElasticsearchSinkOptions(uri) { AutoRegisterTemplate = true, IndexDecider = (e, o) => loggerSource.SearchIndex, })) .CreateLogger(); var mockSeriLogConfig = new Mock <ISeriLogConfig>(); mockSeriLogConfig.SetupGet(o => o.Logger).Returns(logger); using (var loggerConnection = loggerSource.NewConnection(mockSeriLogConfig.Object)) { var loggerPublisher = loggerConnection.NewPublisher(); var executionInfo = new ExecutionInfo(DateTime.Now, DateTime.Now - DateTime.UtcNow, DateTime.Today, Triggers.QueueRunStatus.Success, executionId, executionId.ToString()); var executionHistory = new ExecutionHistory(resourceId, "", executionInfo, "username"); //-------------------------Act---------------------------------- if (eventLevel == "Debug") { loggerPublisher.Debug(GlobalConstants.WarewolfLogsTemplate, executionHistory); } else { loggerPublisher.Info(GlobalConstants.WarewolfLogsTemplate, executionHistory); } } Task.Delay(225).Wait(); }
public void SeriLogPublisher_NewPublisher_Reading_LogData_From_Elasticsearch_Success() { //-------------------------Arrange------------------------------ var dependency = new Depends(Depends.ContainerType.AnonymousElasticsearch); var hostName = "http://" + dependency.Container.IP; var loggerSource = new SerilogElasticsearchSource { Port = DefaultPort, HostName = hostName, SearchIndex = "warewolftestlogs" }; var uri = new Uri(hostName + ":" + DefaultPort); var logger = new LoggerConfiguration() .MinimumLevel.Verbose() .WriteTo.Sink(new ElasticsearchSink(new ElasticsearchSinkOptions(uri) { AutoRegisterTemplate = true, IndexDecider = (e, o) => loggerSource.SearchIndex, })) .CreateLogger(); var mockSeriLogConfig = new Mock <ISeriLogConfig>(); mockSeriLogConfig.SetupGet(o => o.Logger).Returns(logger); var executionID = Guid.NewGuid(); using (var loggerConnection = loggerSource.NewConnection(mockSeriLogConfig.Object)) { var loggerPublisher = loggerConnection.NewPublisher(); var mockDataObject = SetupDataObjectWithAssignedInputs(executionID); var auditLog = new Audit(mockDataObject.Object, "LogAdditionalDetail", "Test", null, null); var logEntryCommand = new AuditCommand { Audit = auditLog, Type = "LogEntry" }; //-------------------------Act---------------------------------- loggerPublisher.Info(GlobalConstants.WarewolfLogsTemplate, logEntryCommand); } Task.Delay(500).Wait(); //-------------------------Assert------------------------------------ var dataFromDb = new TestElasticsearchDatabase(); var dataList = dataFromDb.GetPublishedData(loggerSource, executionID.ToString()).ToList(); Assert.AreEqual(1, dataList.Count); foreach (Dictionary <string, object> fields in dataList) { var level = fields.Where(pair => pair.Key.Contains("level")).Select(pair => pair.Value).FirstOrDefault(); Assert.AreEqual("Information", level.ToString()); var messageTemplate = fields.Where(pair => pair.Key.Contains("messageTemplate")).Select(pair => pair.Value).FirstOrDefault(); Assert.AreEqual("{@Data}", messageTemplate.ToString()); var message = fields.Where(pair => pair.Key.Contains("message")); Assert.IsNotNull(message); } }
private void LoadLogsintoElastic(Guid executionId, Guid resourceId, string auditType, string detail, LogLevel eventLevel) { var dependency = new Depends(Depends.ContainerType.AnonymousElasticsearch); var hostName = "http://" + dependency.Container.IP; var port = dependency.Container.Port; var loggerSource = new SerilogElasticsearchSource { Port = port, HostName = hostName, SearchIndex = "warewolftestlogs" }; var uri = new Uri(hostName + ":" + port); var logger = new LoggerConfiguration() .MinimumLevel.Verbose() .WriteTo.Sink(new ElasticsearchSink(new ElasticsearchSinkOptions(uri) { AutoRegisterTemplate = true, IndexDecider = (e, o) => loggerSource.SearchIndex, })) .CreateLogger(); var mockSeriLogConfig = new Mock <ISeriLogConfig>(); mockSeriLogConfig.SetupGet(o => o.Logger).Returns(logger); var mockDataObject = new Mock <IDSFDataObject>(); using (var loggerConnection = loggerSource.NewConnection(mockSeriLogConfig.Object)) { var loggerPublisher = loggerConnection.NewPublisher(); if (eventLevel == LogLevel.Error) { mockDataObject = SetupDataObjectWithAssignedInputsAndError(executionId, resourceId); } else { mockDataObject = SetupDataObjectWithAssignedInputs(executionId, resourceId); } var auditLog = new Audit(mockDataObject.Object, auditType, detail, null, null); //-------------------------Act---------------------------------- switch (eventLevel) { case LogLevel.Debug: loggerPublisher.Debug(GlobalConstants.WarewolfLogsTemplate, auditLog); break; case LogLevel.Warn: loggerPublisher.Warn(GlobalConstants.WarewolfLogsTemplate, auditLog); break; case LogLevel.Fatal: loggerPublisher.Fatal(GlobalConstants.WarewolfLogsTemplate, auditLog); break; case LogLevel.Error: loggerPublisher.Error(GlobalConstants.WarewolfLogsTemplate, auditLog); break; default: loggerPublisher.Info(GlobalConstants.WarewolfLogsTemplate, auditLog); break; } } Task.Delay(225).Wait(); }