Пример #1
0
        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());
        }
Пример #2
0
        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);
        }
Пример #3
0
            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);
                }
            }
Пример #4
0
        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();
        }
Пример #5
0
        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);
            }
        }
Пример #6
0
        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();
        }