Example #1
0
        private static void brrbrrrr()
        {
            ISerializeData sd = new SerializeDataInMemory();

            var data = new DBTableData <int, SqlConnection>(sd)
            {
                ConnectionString = @"Server=(local)\SQL2016;Database=DatePtAndrei;Trusted_Connection=True;",
                FieldNameToMark  = "id",
                TableName        = "active_slowquery_test"
            };
            IReceive r = new ReceiverTableSQLServerInt(data);

            ISend esExport = new SenderToElasticSearch(@"http://localhost:9200", "ix004", "type007", "id");

            ISimpleJob job = new SimpleJob();

            job.Receivers.Add(0, r);
            job.Senders.Add(0, esExport);

            job.Execute().Wait();
        }
Example #2
0
        public async Task TestSimpleJobReceiverDBExecuteStoredProcedureToSenderElasticSearch()
        {
            string connectionString = GetSqlServerConnectionString();
            string commandText      = "dbo.TestReiceverDBExecuteStoredProcedure2";
            string url       = "http://localhost:9200";
            string indexName = "ixtestsenderelasticsearch2";
            string typeName  = "Person";
            string id        = "PersonID";
            string fileNameSerilizeLastRow = "TestExecStoredProcedure2.txt";

            #region arange
            //Arange receiver
            using (var conn = new SqlConnection(connectionString))
            {
                await conn.OpenAsync();

                using (var cmd = conn.CreateCommand())
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "IF OBJECT_ID('dbo.TestReiceverDBExecuteStoredProcedure2') IS NOT NULL DROP PROCEDURE dbo.TestReiceverDBExecuteStoredProcedure2;";
                    await cmd.ExecuteNonQueryAsync();

                    cmd.CommandText = "CREATE PROCEDURE dbo.TestReiceverDBExecuteStoredProcedure2 AS SELECT 1 AS PersonID, 'John' AS FirstName , 'Doe' AS LastName UNION ALL SELECT 11, 'Joanna', 'Doe' ORDER BY PersonID";
                    await cmd.ExecuteNonQueryAsync();
                }
            }

            ReceiverStmtSqlServer rcvr = new ReceiverStmtSqlServer(connectionString, commandType, commandText, fileNameSerilizeLastRow);

            //Arange sender
            var settings = new ConnectionSettings(new Uri(url));
            var client   = new ElasticClient(settings);

            if (client.IndexExists(indexName).Exists)
            {
                client.DeleteIndex(indexName);
            }

            //Arange simple job
            ISend snd = new SenderToElasticSearch(url, indexName, typeName, id);

            ISimpleJob job = new SimpleJob();
            job.Receivers.Add(0, rcvr);
            job.Senders.Add(0, snd);
            #endregion

            #region act
            job.Execute().Wait(-1);
            await Task.Delay(5000); //Missing of await keyword is intentional (Thread.Sleep(5000)). 5s shoudl be more than enough to insert 2 documents.

            #endregion

            #region assert
            //Same count ?
            var responseAll = client.Search <Dictionary <string, string> >(s => s.Size(10).Index(indexName).Type(typeName));
            int countAll    = responseAll.Documents.Count;
            Assert.AreEqual(countAll, 2, $"Inserted documents: 2, Read documents {countAll}");

            //Same values ? (assuption: [1] both count are equals,  [2] rows is already sorted by id)
            Dictionary <string, object>[] valuesReadFromESOrdered = (new List <Dictionary <string, string> >(responseAll.Documents)).OrderBy(ord => ord[id]).ToList <Dictionary <string, string> >().ToDictionaryStringObject().ToArray();
            Assert.IsTrue(Utils.CompareDictionary(rcvr.valuesRead[0].Values, valuesReadFromESOrdered[0]));
            Assert.IsTrue(Utils.CompareDictionary(rcvr.valuesRead[1].Values, valuesReadFromESOrdered[1]));
            #endregion
        }
        public async Task TestSendElasticSearchData()
        {
            const string url       = "http://localhost:9200";
            const string indexName = "ixtestsenderelasticsearch";
            const string typeName  = "Person";
            const string id        = "PersonID";

            #region arange
            //Clean ES test index
            var settings = new ConnectionSettings(new Uri(url));
            var client   = new ElasticClient(settings);

            if (client.IndexExists(indexName).Exists)
            {
                client.DeleteIndex(indexName);
            }

            //Prepare source data: 4 rows {ID, FirstName, LastName} + 5th row {ID, FirstName}
            var m      = new Mock <IRow>();
            var rows   = new List <IRow>();
            int nrRows = 4;

            for (int i = 0; i < nrRows; i++)
            {
                var row = new Mock <IRow>();
                row.SetupProperty
                (
                    obj => obj.Values,
                    new Dictionary <string, object>()
                {
                    ["PersonID"]  = i,
                    ["FirstName"] = "John " + i,
                    ["LastName"]  = "Doe " + i
                }
                );

                rows.Add(row.Object);
            }
            //5th row (no LastName)
            {
                int i   = 4;
                var row = new Mock <IRow>();
                row.SetupProperty
                (
                    obj => obj.Values,
                    new Dictionary <string, object>()
                {
                    ["PersonID"]  = i,
                    ["FirstName"] = "John " + i
                }
                );

                rows.Add(row.Object);
            }
            #endregion

            #region act
            ISend esExport = new SenderToElasticSearch(url, indexName, typeName, id);
            esExport.valuesToBeSent = rows.ToArray();
            await esExport.Send();

            await Task.Delay(5000); //Missing of await keyword is indentional (Thread.Sleep(5000)). 5s shoudl be more than enough to insert 5 documents.

            #endregion

            #region assert
            //Same count ?
            var responseAll = client.Search <Dictionary <string, string> >(s => s.Size(10).Index(indexName).Type(typeName));
            int countAll    = responseAll.Documents.Count;
            Assert.AreEqual(countAll, 5, $"Inserted documents: 5, Read documents {countAll}");

            //Same values ? (assuption: [1] both count are equals,  [2] rows is already sorted by id)
            var itemsReadFromESOrdered = (new List <Dictionary <string, string> >(responseAll.Documents)).OrderBy(ord => ord[id]).ToList <Dictionary <string, string> >();
            for (int i = 0; i < countAll; i++)
            {
                var r1 = rows[i].Values;
                var r2 = itemsReadFromESOrdered[i].ToDictionary(k => k.Key, v => (object)v.Value);
                Assert.IsTrue(Utils.CompareDictionary(r1, r2));
            }
            #endregion
        }