Beispiel #1
0
        public void parse_json_string_as_object2(bool flatten)
        {
            ElasticAppenderFilters oldFilters = null;

            QueryConfiguration(appender =>
            {
                oldFilters = appender.ElasticFilters;
                appender.ElasticFilters = new ElasticAppenderFilters();
                appender.ElasticFilters.AddFilter(new JsonFilter()
                {
                    FlattenJson = flatten
                });
                appender.ActivateOptions();
            });
            string json =
                "{\"InnerMessage\":\"Starting.\", \"Data\":{\"Type\":\"Url\", \"Host\":\"localhost\", \"Array\":[\"One\", \"Two\"]}}";

            log4net.LogicalThreadContext.Properties["JsonRaw"] = json;
            _log.Info("Info");

            Client.Refresh(TestIndex);
            var res = Client.Search <JObject>(s => s.AllIndices().Type("LogEvent").Take(1));
            var doc = res.Documents.First();

            QueryConfiguration(appender =>
            {
                appender.ElasticFilters = oldFilters;
                appender.ActivateOptions();
            });

            JToken actualObj;
            string innerMessage;
            string dataType;
            string dataHost;
            string dataArrayFirst;

            if (flatten)
            {
                actualObj      = doc;
                innerMessage   = actualObj["InnerMessage"].ToString();
                dataType       = actualObj["Data.Type"].ToString();
                dataHost       = actualObj["Data.Host"].ToString();
                dataArrayFirst = actualObj["Data.Array.0"].ToString();
            }
            else
            {
                actualObj      = doc["JsonRaw"];
                innerMessage   = actualObj["InnerMessage"].ToString();
                dataType       = actualObj["Data"]["Type"].ToString();
                dataHost       = actualObj["Data"]["Host"].ToString();
                dataArrayFirst = actualObj["Data"]["Array"][0].ToString();
            }
            Assert.IsNotNull(actualObj);
            Assert.AreEqual("Starting.", innerMessage);
            Assert.AreEqual("Url", dataType);
            Assert.AreEqual("localhost", dataHost);
            Assert.AreEqual("One", dataArrayFirst);
        }
        public void Can_read_KvFilter_properties(string[] fieldSplit, string[] valueSplit, string trim,
                                                 bool expectAnotherToBeNull)
        {
            ElasticAppenderFilters oldFilters = null;

            QueryConfiguration(appender =>
            {
                oldFilters = appender.ElasticFilters;
                appender.ElasticFilters = new ElasticAppenderFilters();
                appender.ElasticFilters.AddFilter(new KvFilter()
                {
                    FieldSplit = string.Join("", fieldSplit),
                    ValueSplit = string.Join("", valueSplit),
                    TrimKey    = trim,
                    TrimValue  = trim
                });
                appender.ActivateOptions();
            });

            _log.InfoFormat(
                "this is message{1}key{0}value{1}another {0} 'another'{1}object{0}[this is object :)]",
                valueSplit[0].TrimStart('\\'), fieldSplit[0].TrimStart('\\'));

            Client.Refresh(TestIndex);
            var searchResults = Client.Search <dynamic>(s => s.AllIndices().Type("LogEvent").Take(1));

            var entry = searchResults.Documents.First();

            QueryConfiguration(appender =>
            {
                appender.ElasticFilters = oldFilters;
                appender.ActivateOptions();
            });

            Assert.IsNotNull(entry.key);
            Assert.AreEqual("value", entry.key.ToString());

            Assert.IsNotNull(entry["object"]);
            Assert.AreEqual("this is object :)", entry["object"].ToString());

            if (entry.another == null)
            {
                Assert.IsTrue(expectAnotherToBeNull, "only on the spaces issues test this 'another' should be null");
            }
            else
            {
                Assert.AreEqual("another", entry.another.ToString());
            }
        }
Beispiel #3
0
 public void Setup()
 {
     _elasticClientFactory = Substitute.For <IElasticClientFactory>();
     _elasticClient        = Substitute.For <IElasticsearchClient>();
     _timer = Substitute.For <IIndexingTimer>();
     _tolerateCallsFactory = Substitute.For <ITolerateCallsFactory>();
     _bulk = Substitute.For <ILogBulkSet>();
     _logEventConverterFactory = Substitute.For <ILogEventConverterFactory>();
     _logEventConverter        = Substitute.For <ILogEventConverter>();
     _elasticFilters           = new ElasticAppenderFilters();
     _fileAccessor             = Substitute.For <IFileAccessor>();
     _eventWriter = Substitute.For <IExternalEventWriter>();
     _elasticClientFactory.CreateClient(null, 0, false, false, null).ReturnsForAnyArgs(_elasticClient);
     _logEventConverterFactory.Create(FixFlags.All, false).ReturnsForAnyArgs(_logEventConverter);
 }
Beispiel #4
0
        public void test_ttl(string ttlValue, int expectation)
        {
            const string ttlTemplateName = "ttltemplate";
            const int    toWaitMillisec  = 3000;

            Client.PutIndexTemplate(ttlTemplateName,
                                    descriptor =>
                                    descriptor.Template("*")
                                    .Settings(settings => settings.Setting("indices.ttl.interval", "1s").Setting("index.ttl.interval", "1s"))
                                    .Mappings(mapping => mapping.Map("_default_", desc => desc.TtlField(ttlField => ttlField.Enable().Default("1d")))));

            ElasticAppenderFilters oldFilters = null;

            QueryConfiguration(
                appender =>
            {
                oldFilters = appender.ElasticFilters;
                appender.ElasticFilters = new ElasticAppenderFilters();
                appender.ElasticFilters.AddFilter(new AddValueFilter()
                {
                    Key = "_ttl", Value = ttlValue
                });
            });

            _log.Info("test");
            Client.Refresh(TestIndex);
            var res = Client.Search <dynamic>(s => s.AllIndices().Type("LogEvent"));

            Assert.AreEqual(1, res.Total);

            // "Magic". The time of deletion isn't consistent :/
            int numOfTries = 20;

            while (--numOfTries > 0)
            {
                Client.Refresh(TestIndex);
                Client.Optimize(TestIndex);
                res        = Client.Search <dynamic>(s => s.AllTypes().AllIndices());
                numOfTries = res.Total == expectation ? 0 : numOfTries;
                Thread.Sleep(toWaitMillisec);
            }

            res = Client.Search <dynamic>(s => s.AllIndices().Type("LogEvent"));
            Client.DeleteIndexTemplate(ttlTemplateName);
            QueryConfiguration(appender => appender.ElasticFilters = oldFilters);

            Assert.AreEqual(expectation, res.Total);
        }
        public ElasticSearchAppender()
        {
            FixedFields = FixFlags.Partial;

            BulkSize = 2000;
            BulkIdleTimeout = 5000;
            TimeoutToWaitForTimer = 5000;

            Server = "localhost";
            Port = 9200;
            IndexName = "LogEvent-%{+yyyy.MM.dd}";
            IndexType = "LogEvent";
            IndexAsync = true;
            MaxAsyncConnections = 10;
            Template = null;

            _timer = new Timer(TimerElapsed, null, Timeout.Infinite, Timeout.Infinite);
            ElasticFilters = new ElasticAppenderFilters();
        }
        public static void Performance()
        {
            ElasticAppenderFilters oldFilters = null;

            QueryConfiguration(appender =>
            {
                appender.BulkSize        = 4000;
                appender.BulkIdleTimeout = -1;
                oldFilters = appender.ElasticFilters;
                //appender.ElasticFilters = new ElasticAppenderFilters();
                appender.ElasticFilters.AddFilter(new GrokFilter()
                {
                    Pattern = "testNum: {INT:testNum}, name is {WORD:name} and guid {UUID:guid}"
                });
            });

            PerformanceTests.Test(1, 32000);

            QueryConfiguration(appender => appender.ElasticFilters = oldFilters);
        }
        public void can_parse_log4net_context_stacks()
        {
            const string sourceKey = "UserName";

            ElasticAppenderFilters oldFilters = null;

            QueryConfiguration(appender =>
            {
                oldFilters = appender.ElasticFilters;
                appender.ElasticFilters = new ElasticAppenderFilters();
                var convert             = new ConvertFilter();
                convert.AddToString(sourceKey);

                var toArray = new ConvertToArrayFilter {
                    SourceKey = sourceKey
                };
                convert.AddToArray(toArray);

                appender.ElasticFilters.AddConvert(convert);
            });

            LogicalThreadContext.Stacks[sourceKey].Push("name1");
            LogicalThreadContext.Stacks[sourceKey].Push("name2");
            _log.Info("hi");

            Client.Refresh(TestIndex);

            var res     = Client.Search <JObject>(s => s.AllIndices().Type("LogEvent").Take(1));
            var doc     = res.Documents.First();
            var usrName = doc[sourceKey];

            Assert.NotNull(usrName);
            Assert.AreEqual("name1", usrName[0].Value <string>());
            Assert.AreEqual("name2", usrName[1].Value <string>());

            QueryConfiguration(appender =>
            {
                appender.ElasticFilters = oldFilters;
            });
        }
Beispiel #8
0
        public void parse_json_string_as_object()
        {
            const string           sourceKey  = "jsonObject";
            ElasticAppenderFilters oldFilters = null;

            QueryConfiguration(appender =>
            {
                oldFilters = appender.ElasticFilters;
                appender.ElasticFilters = new ElasticAppenderFilters();
                appender.ElasticFilters.AddFilter(new JsonFilter()
                {
                    SourceKey = sourceKey
                });
            });

            var jObject = new JObject {
                { "key", "value\r\nnewline" }, { "arr", new JArray(Enumerable.Range(0, 5)) }
            };

            LogicalThreadContext.Properties[sourceKey] = jObject.ToString();
            _log.Info("logging jsonObject");

            Client.Refresh(TestIndex);

            var res = Client.Search <JObject>(s => s.AllIndices().Type("LogEvent").Take(1));
            var doc = res.Documents.First();

            var jsonObject = doc[sourceKey];

            QueryConfiguration(appender => appender.ElasticFilters = oldFilters);

            Assert.NotNull(jsonObject);
            Assert.AreEqual(jsonObject["key"].Value <string>(), "value\r\nnewline");
            var arr = jsonObject["arr"].ToArray();

            foreach (var i in Enumerable.Range(0, 5))
            {
                Assert.AreEqual(arr[i].Value <int>(), i);
            }
        }
        public void parse_xml_string_as_object(bool flatten)
        {
            const string           separator  = "_";
            const string           sourceKey  = "xmlObject";
            ElasticAppenderFilters oldFilters = null;

            QueryConfiguration(appender =>
            {
                oldFilters = appender.ElasticFilters;
                appender.ElasticFilters = new ElasticAppenderFilters();
                appender.ElasticFilters.AddFilter(new XmlFilter {
                    SourceKey = sourceKey, FlattenXml = flatten, Separator = separator
                });
            });

            var xmlDoc          = new XmlDocument();
            var parentNode      = xmlDoc.CreateElement("Parent");
            var parentAttribute = xmlDoc.CreateAttribute("key");

            parentAttribute.Value = "value\r\nnewline";
            parentNode.Attributes.Append(parentAttribute);
            xmlDoc.AppendChild(parentNode);
            foreach (var i in Enumerable.Range(0, 5))
            {
                var childNode      = xmlDoc.CreateElement("Child");
                var childAttribute = xmlDoc.CreateAttribute("id");
                childAttribute.Value = i.ToString();
                childNode.Attributes.Append(childAttribute);
                parentNode.AppendChild(childNode);
            }

            var xmlString = ConvertXmlToString(xmlDoc);

            LogicalThreadContext.Properties[sourceKey] = xmlString;
            _log.Info("logging xmlObject");

            Client.Refresh(TestIndex);

            var res = Client.Search <JObject>(s => s.AllIndices().Type("LogEvent").Take(1));
            var doc = res.Documents.First();

            QueryConfiguration(appender =>
            {
                appender.ElasticFilters = oldFilters;
            });

            if (flatten)
            {
                Assert.NotNull(doc);
                Assert.AreEqual(doc["Parent" + separator + "@key"].ToString(), "value\r\nnewline");
                Assert.AreEqual(doc["Parent" + separator + "Child" + separator + "0" + separator + "@id"].ToString(), "0");
                Assert.AreEqual(doc["Parent" + separator + "Child" + separator + "1" + separator + "@id"].ToString(), "1");
            }
            else
            {
                var jsonObject = doc[sourceKey];
                Assert.NotNull(jsonObject);
                Assert.AreEqual(jsonObject["Parent"]["@key"].Value <string>(), "value\r\nnewline");
                var arr = jsonObject["Parent"]["Child"].ToArray();
                foreach (var i in Enumerable.Range(0, 5))
                {
                    Assert.AreEqual(arr[i]["@id"].Value <int>(), i);
                }
            }
        }
        public void parse_json_string_as_object(bool flatten, string separator = "_")
        {
            const string           sourceKey  = "jsonObject";
            ElasticAppenderFilters oldFilters = null;

            QueryConfiguration(appender =>
            {
                oldFilters = appender.ElasticFilters;
                appender.ElasticFilters = new ElasticAppenderFilters();
                appender.ElasticFilters.AddFilter(new JsonFilter()
                {
                    FlattenJson = flatten, Separator = separator, SourceKey = sourceKey
                });
            });
            var jObject = new JObject
            {
                { "key", "value\r\nnewline" },
                { "Data", new JObject {
                      { "Type", "Url" }, { "Host", "localhost" }, { "Array", new JArray(Enumerable.Range(0, 5)) }
                  } }
            };

            log4net.LogicalThreadContext.Properties[sourceKey] = jObject.ToString();
            _log.Info("logging jsonObject");

            Client.Refresh(TestIndex);
            var res = Client.Search <JObject>(s => s.AllIndices().Type("LogEvent").Take(1));
            var doc = res.Documents.First();

            QueryConfiguration(appender =>
            {
                appender.ElasticFilters = oldFilters;
            });

            JToken actualObj;
            string key;
            string dataType;
            string dataHost;
            string dataArrayFirst;
            string dataArrayLast;

            if (flatten)
            {
                actualObj      = doc;
                key            = actualObj["key"].ToString();
                dataType       = actualObj["Data" + separator + "Type"].ToString();
                dataHost       = actualObj["Data" + separator + "Host"].ToString();
                dataArrayFirst = actualObj["Data" + separator + "Array" + separator + "0"].ToString();
                dataArrayLast  = actualObj["Data" + separator + "Array" + separator + "4"].ToString();
            }
            else
            {
                actualObj      = doc[sourceKey];
                key            = actualObj["key"].ToString();
                dataType       = actualObj["Data"]["Type"].ToString();
                dataHost       = actualObj["Data"]["Host"].ToString();
                dataArrayFirst = actualObj["Data"]["Array"][0].ToString();
                dataArrayLast  = actualObj["Data"]["Array"][4].ToString();
            }
            Assert.IsNotNull(actualObj);
            Assert.AreEqual("value\r\nnewline", key);
            Assert.AreEqual("Url", dataType);
            Assert.AreEqual("localhost", dataHost);
            Assert.AreEqual("0", dataArrayFirst);
            Assert.AreEqual("4", dataArrayLast);
        }