/// <summary> /// Constructor. /// </summary> /// <param name="log">The logger to use for this metadata source.</param> public BColumnsMetadataSource(ILogger log, BProperties properties) { LogUtilities.LogFunctionEntrance(log, log); Log = log; m_Properties = properties; //InitializeData(); //List<ColumnInfo> column_infos = new List<ColumnInfo>(); //column_infos.AddRange(m_Columns); //m_Columns.Clear(); try { //get the client connection using (var client = ExternalServiceClient.GetClient(m_Properties.Server)) { //get the columns ColumnMetadataResult[] columns = client.GetMetadataColumns(); //copy results columns.ToList().Where(c => c.Visible).ToList().ForEach(c => { //if(c.Table == "Mentions" && // ( // c.Column == "Id" || // c.Column == "Name" || // c.Column == "Description" || // c.Column == "Type" || // c.Column == "Sentiment" || // c.Column == "Influence" || // c.Column == "IsDisabled" || // c.Column == "OccurredOn" || // c.Column == "CreatedOn" || // c.Column == "UpdatedOn" || // c.Column == "Guid" || // c.Column == "Author" || // c.Column == "Followers" || // c.Column == "Klout" || // c.Column == "Comments" // )) { m_Columns.Add( GetColumnInfo( c.Catalog, c.Table, c.Column, c.DataType, c.ColumnLength, c.Nullable, c.OrdinalPosition, c.ColumnPrecision)); } }); } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.ToString()); } }
/// <summary> /// Constructor. /// </summary> /// <param name="log">The logger to use for this metadata source.</param> public BCatalogOnlyMetadataSource(ILogger log, BProperties properties) { LogUtilities.LogFunctionEntrance(log, log); Log = log; m_Properties = properties; try { //get the client connection using (var client = ExternalServiceClient.GetClient(m_Properties.Server)) { //get the catalogs string[] catalogs = client.GetMetadataCatalogs(); //copy results m_Catalogs.AddRange(catalogs); } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.ToString()); } //m_Catalogs.Add(Driver.B_CATALOG); }
private void MakeClientAndGetData() { try { using (var client = ExternalServiceClient.GetClient(Endpoint)) { GetData(client); } } catch (Exception ex) { textBox2.Invoke(new Action(() => textBox2.Text = ex.ToString())); } }
private void GetStatus() { PrepareForQuery(); try { var client = ExternalServiceClient.GetClient(Endpoint); client.Open(); var result = client.Ping("status"); client.Close(); textBox4.Invoke(new Action(() => textBox4.Text = result)); } catch (Exception ex) { textBox4.Invoke(new Action(() => textBox4.Text = ex.ToString())); } }
/// <summary> /// refresh the list of catalogs /// </summary> private void RefreshCatalogList() { if (string.IsNullOrWhiteSpace(m_CatalogServer) || m_CatalogServer.ToLower() != textBoxServer.Text.ToLower()) { try { this.Cursor = Cursors.WaitCursor; comboBoxCatalog.Items.Clear(); using (var client = ExternalServiceClient.GetClient(textBoxServer.Text)) { //get the catalogs string[] catalogs = client.GetMetadataCatalogs(); //copy results foreach (var catalog in catalogs) { comboBoxCatalog.Items.Add(catalog); } if (m_ConnectionSettings.ContainsKey(Driver.B_CATALOG_KEY)) { object cat = m_ConnectionSettings[Driver.B_CATALOG_KEY]; if (cat != null) { comboBoxCatalog.SelectedItem = cat.ToString(); } } } } catch (Exception) { comboBoxCatalog.Items.Clear(); comboBoxCatalog.Items.Add(m_ServerConnectionError); comboBoxCatalog.SelectedItem = m_ServerConnectionError; } finally { this.Cursor = Cursors.Default; } m_CatalogServer = textBoxServer.Text; } }
/// <summary> /// Constructor. /// </summary> /// <param name="log">The logger to use for logging.</param> public BFakeResultTable(ILogger log, string sql, BProperties properties) : base(log, sql, properties) { //set parameters LogUtilities.LogFunctionEntrance(Log, log); m_Properties = properties; Sql = sql; //init the columns try { using (var client = ExternalServiceClient.GetClient(m_Properties.Server)) { m_TableColumns = client.GetMetadataColumns(); } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.ToString()); } //make the fake data InitializeFakeData(Sql); }
/// <summary> /// execute the proper fetch /// </summary> /// <param name="page"></param> /// <returns></returns> public bool ExecuteFetch(long page) { bool ret = false; try { //open the client connection using (var client = ExternalServiceClient.GetClient(m_Properties.Server)) { //temp parameters until we get SQL TO BQL //var mapreduce = "SELECT Count() GROUP BY Date INTERVAL Day"; var mapreduce = Sql; //var mapreduce = "Get Mentions"; var minDate = DateTime.UtcNow.AddDays(-100); var maxDate = DateTime.UtcNow; string query = ""; //string command = "-nocount"; string command = ""; //create the paging string //??how do I specify the page?? string paging = "";// string.Format("__paging__ORDERED BY Date LIMIT {0}", m_Properties.RowsToFetch); //init the data m_Data.Clear(); //make the query //var cursor = client.GetCursor(m_Properties.Catalog, "__ql__" + query, "__ql__" + mapreduce, "__default__", null, command); var datapoints = client.GetData(m_Properties.Catalog, "__ql__" + query, "__ql__" + mapreduce, "__default__", null, command); //var datapoints = client.GetData(m_Properties.Catalog, "__ql__" + query, null, null, paging, minDate, maxDate, command); //this is the call to pass the sql through to bermuda //var datapoints = client.GetData(Sql); //check results if (datapoints != null && !string.IsNullOrWhiteSpace(datapoints.Data) && !string.IsNullOrWhiteSpace(datapoints.DataType)) { //build the returned data object obj = LinqRuntimeTypeBuilder.DeserializeJson(datapoints.Data, datapoints.DataType, true); Type type = obj.GetType(); Array array = obj as Array; //check for results returned if (array.Length > 0) { //parse the results foreach (var item in array) { //check if we need to init the columns if (m_Columns.Count == 0) { //init the columns InitializeColumns(item); } //add this row AddRow(item); } } //set the actual row size //RowCount = TotalItemsToFetch; } } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.ToString()); } return(ret); }
// Main execution logic. private static void Map() { // set actual timestamp var mapperActivated = DateTime.Now.Ticks; // try to open connection to external service using (var serviceClient = new ExternalServiceClient("ExternalService", ServiceUri)) { serviceClient.Open(); // try to open connection to service broker sample db using (var connection = new SqlConnection(ConnectionString)) { connection.Open(); //set actual timestamp var mapperConnected = DateTime.Now.Ticks; // prepare call of sp to dequeue message to outgoing message queue var dequeueCommand = new SqlCommand("DequeueIn", connection) { CommandType = CommandType.StoredProcedure }; dequeueCommand.Parameters.AddWithValue("@batchSize", args.BatchSize); var dequeueCommandBatchId = new SqlParameter("@batchId", SqlDbType.UniqueIdentifier) { Direction = ParameterDirection.Output }; dequeueCommand.Parameters.Add(dequeueCommandBatchId); // prepare call of tvl to get messages from incoming message table var getCommand = new SqlCommand("SELECT * FROM GetIn(@batchId)", connection); var getCommandBatchId = new SqlParameter("@batchId", SqlDbType.UniqueIdentifier); getCommand.Parameters.Add(getCommandBatchId); // prepare call of sp to enqueue message from incoming message queue var enqueueCommand = new SqlCommand("EnqueueOut", connection) { CommandType = CommandType.StoredProcedure }; var enqueueCommandMessageBody = new SqlParameter("@messageBody", SqlDbType.Xml); enqueueCommand.Parameters.Add(enqueueCommandMessageBody); // prepare call of so to delete message from incoming message table var truncateCommand = new SqlCommand("TruncateIn", connection) { CommandType = CommandType.StoredProcedure }; var truncateCommandBatchId = new SqlParameter("@batchId", SqlDbType.UniqueIdentifier); truncateCommand.Parameters.Add(truncateCommandBatchId); // main messages handling loop while (true) { //set actual timestamp var mapperPreDequeued = DateTime.Now.Ticks; // no messages if ((int)dequeueCommand.ExecuteScalar() == 0) { break; } // get batch id as output parameter var batchId = (Guid)dequeueCommandBatchId.Value; getCommandBatchId.Value = batchId; truncateCommandBatchId.Value = batchId; // get messages from incoming table using (var inTable = new DataTable()) { using (var adapter = new SqlDataAdapter(getCommand)) { adapter.Fill(inTable); } //set actual timestamp var mapperPostDequeued = DateTime.Now.Ticks; // handle incoming messages batch foreach (DataRow row in inTable.Rows) { // get incoming message body var mapperInMessageBody = (string)row["MessageBody"]; // set actual timestamp var mapperReceived = DateTime.Now.Ticks; // deserialize incoming message var inMessage = MapperInMessage.FromString(mapperInMessageBody, m => { m.MapperActivated = mapperActivated; m.MapperConnected = mapperConnected; m.MapperPreDequeued = mapperPreDequeued; m.MapperPostDequeued = mapperPostDequeued; m.MapperReceived = mapperReceived; }); if (args.Verbose) { Console.WriteLine("Dequeued message: {0}", inMessage.Id); } // simulate map execution var externalServiceRequest = InnerMapIn(inMessage); // invoke external request if (args.Verbose) { Console.WriteLine("Sent message: {0}", externalServiceRequest.Id); } var externalServiceResponse = serviceClient.Process(externalServiceRequest); if (args.Verbose) { Console.WriteLine("Received message: {0}", externalServiceResponse.Id); } // convert external service response to outgoing message var outMessage = InnerMapOut(externalServiceResponse); // serialzie outgoing message var mapperOutMessageBody = outMessage.ToString(); // enqueue message to outgoing message queue enqueueCommandMessageBody.Value = mapperOutMessageBody; enqueueCommand.ExecuteNonQuery(); if (args.Verbose) { Console.WriteLine("Enqueued message: {0}", outMessage.Id); } } } // delete messages from incoming message table truncateCommand.ExecuteNonQuery(); } connection.Close(); } serviceClient.Close(); } }
public MyService(ExternalServiceClient serviceClient) { externalServiceClient = serviceclient; }
private void GetData(ExternalServiceClient client) { InvokeOnFormThread(() => { this.chart2.Series.Clear(); var timeseries = this.chart2.Series.Add("timeseries"); timeseries.XValueType = ChartValueType.Date; textBox2.Text = "Working..."; label4.Text = "Working..."; }); string query = textBox1.Text; //object[] parameters = new object[] { textBox1.Text }; //Expression<Func<Mention, object[], bool>> query = (x,p) => true; //if (!string.IsNullOrWhiteSpace(textBox1.Text)) //{ // query = (x, p) => x.Name.Contains((string)p[0]) || x.Description.Contains((string)p[0]); //} //var query2 = EvoQLBuilder.GetLambda(textBox1.Text); //Expression<Func<IEnumerable<ThriftMention>, IEnumerable<ThriftDatapoint>>> mapreduce = mentions => // from mention in mentions // from tag in mention.Tags // group mention by new { mention.OccurredOn.Year, mention.OccurredOn.Month, mention.OccurredOn.Day, TagId = tag } into g // select new ThriftDatapoint { Count = g.Count(), EntityId = g.Key.TagId, Value = g.Average(x => x.Sentiment), Timestamp = new DateTime(g.Key.Year, g.Key.Month, g.Key.Day).Ticks }; //Expression<Func<IEnumerable<Mention>, IEnumerable<Datapoint>>> mapreduce1 = collection => // from mention in collection // from tag in mention.Tags // from datasource in mention.Datasources // group mention by new MentionGroup{ Timestamp = mention.OccurredOnTicks, Id = tag, Id2 = datasource } into g // select new Datapoint { EntityId = g.Key.Id, EntityId2 = g.Key.Id2, Timestamp = g.Key.Timestamp }; //Expression<Func<IEnumerable<Mention>, IEnumerable<Datapoint>>> mapreduce = collection => // collection.SelectMany(m => m.Tags, (m, t) => new MentionMetadata { Mention = m, Id = t }).SelectMany(x => x.Mention.Datasources, (md, ds) => new MentionMetadata2 { Child = md, Id = ds }).GroupBy(md => new MentionGroup { Timestamp = md.Child.Mention.OccurredOnTicks, Id = md.Child.Id, Id2 = md.Id }).Select(x => new Datapoint { Timestamp = x.Key.Timestamp, EntityId = x.Key.Id, EntityId2 = x.Key.Id2 }); //Expression<Func<IEnumerable<Mention>, IEnumerable<Datapoint>>> mapreduce = x => x.GroupBy(y => y.OccurredOnDayTicks).Select(g => new Datapoint { Count = g.Count(), Timestamp = g.Key }); //Expression<Func<IEnumerable<Mention>, IEnumerable<Datapoint>>> mapreduce = x => x.GroupBy(y => new MentionGroup{ Timestamp = y.OccurredOnTicks - (y.OccurredOnTicks % 864000000000) }).Select(g => new Datapoint { Count = g.Count(), Value = g.Average(y => y.Sentiment), Timestamp = g.Key.Timestamp }); //Expression<Func<IEnumerable<Mention>, IEnumerable<Datapoint>>> mapreduce = null; // ReduceExpressionGeneration.MakeExpression(null, SelectedSelect, SelectedGroupBy, SelectedGroupBy2); //Expression<Func<IEnumerable<Datapoint>, double>> merge = x => x.Sum(y => y.Value); //if (SelectedSelect == SelectTypes.Count) merge = x => x.Sum(y => (double)y.Count); var mapreduce = textBox9.Text; //Expression<Func<IEnumerable<Mention>, IEnumerable<Mention>>> paging = c => c.OrderByDescending(x => x.OccurredOnTicks).Take(25); ExpressionSerializer serializer = new ExpressionSerializer(); //InvokeOnFormThread(() => //{ // //ExpressionSerializer serializer = new ExpressionSerializer(); // //textBox6.Text = serializer.Serialize(mapreduce).ToString(); //}); var domain = textBox3.Text; //var minDate = dateTimePicker1.Value; //var maxDate = dateTimePicker2.Value; string command = textBox7.Text; Stopwatch sw = new Stopwatch(); sw.Start(); var result = client.GetData(domain, "__ql__" + query, "__ql__" + mapreduce, "__default__", null, command); sw.Stop(); result.Metadata.OperationTime = sw.Elapsed; InvokeOnFormThread(() => { var area = chart2.ChartAreas.First(); var oldseries = chart2.Series.ToArray(); string separator = "\r\n################################################################################################################################\r\n"; HardcodedBermudaDatapoint[] datapoints = new HardcodedBermudaDatapoint[0]; string jsonError = null; if (result.Data != null) { try { datapoints = new JavaScriptSerializer().Deserialize<HardcodedBermudaDatapoint[]>(result.Data); label4.Text = "Retrieved " + datapoints.Count() + "\r\nin " + sw.Elapsed; } catch (Exception ex) { jsonError = ex.ToString() + separator; } } else { datapoints = new HardcodedBermudaDatapoint[0]; } StringBuilder sb = new StringBuilder(); if (result.Metadata != null) ConvertStatsToString(sb, result.Metadata); textBox2.Text = result.CacheKey + separator + jsonError + result.Error + separator + sb.ToString() + separator + result.Data; var groups = datapoints.GroupBy(x => new { x.Id, x.Text } ); chart2.SuspendLayout(); foreach (var s in chart2.Series.Skip(1).ToArray()) { chart2.Series.Remove(s); } int i = 0; foreach (var g in groups) { string name = g.Key.Text ?? g.Key.Id.ToString(); var timeseries = i == 0 ? chart2.Series.FirstOrDefault() : chart2.Series.Add(name); timeseries.Points.Clear(); timeseries.Name = name; timeseries.XValueType = g.Any(p => new DateTime(p.Id2).Year > 2000) ? ChartValueType.Date : ChartValueType.Int64; foreach (var d in g) { timeseries.Points.Add(timeseries.XValueType == ChartValueType.Date ? new DataPoint(new DateTime(d.Id2).ToOADate(), d.Value) : new DataPoint(d.Id2, d.Value)); } i++; } chart2.ResumeLayout(true); //textBox2.Text = sb.ToString().Trim() + separator + string.Join("\r\n", datapoints.Datapoints.Select(x => x.Id.ToString().PadLeft(32) + x.Id2.ToString().PadLeft(32) + ((int)x.Value).ToString().PadLeft(16) + x.Count.ToString().PadLeft(16) )); //var sb2 = new StringBuilder(); //ConvertStatsToString(sb2, mentions.Metadata); //textBox5.Text = sb2.ToString().Trim() + separator + string.Join(separator, mentions.Mentions.Select(x => DateTime.FromBinary( x.OccurredOnTicks ) + " :: " + x.Name + "\r\n" + x.Description)); //label4.Text = "Received " + (datapoints.Datapoints.Count()) + " datapoints\r\nin " + sw.Elapsed; }); //return datapoints.Datapoints; }
private void GetData(ExternalServiceClient client) { InvokeOnFormThread(() => { this.chart2.Series.Clear(); var timeseries = this.chart2.Series.Add("timeseries"); timeseries.XValueType = ChartValueType.Date; textBox2.Text = "Working..."; label4.Text = "Working..."; }); string query = textBox1.Text; //object[] parameters = new object[] { textBox1.Text }; //Expression<Func<Mention, object[], bool>> query = (x,p) => true; //if (!string.IsNullOrWhiteSpace(textBox1.Text)) //{ // query = (x, p) => x.Name.Contains((string)p[0]) || x.Description.Contains((string)p[0]); //} //var query2 = EvoQLBuilder.GetLambda(textBox1.Text); //Expression<Func<IEnumerable<ThriftMention>, IEnumerable<ThriftDatapoint>>> mapreduce = mentions => // from mention in mentions // from tag in mention.Tags // group mention by new { mention.OccurredOn.Year, mention.OccurredOn.Month, mention.OccurredOn.Day, TagId = tag } into g // select new ThriftDatapoint { Count = g.Count(), EntityId = g.Key.TagId, Value = g.Average(x => x.Sentiment), Timestamp = new DateTime(g.Key.Year, g.Key.Month, g.Key.Day).Ticks }; //Expression<Func<IEnumerable<Mention>, IEnumerable<Datapoint>>> mapreduce1 = collection => // from mention in collection // from tag in mention.Tags // from datasource in mention.Datasources // group mention by new MentionGroup{ Timestamp = mention.OccurredOnTicks, Id = tag, Id2 = datasource } into g // select new Datapoint { EntityId = g.Key.Id, EntityId2 = g.Key.Id2, Timestamp = g.Key.Timestamp }; //Expression<Func<IEnumerable<Mention>, IEnumerable<Datapoint>>> mapreduce = collection => // collection.SelectMany(m => m.Tags, (m, t) => new MentionMetadata { Mention = m, Id = t }).SelectMany(x => x.Mention.Datasources, (md, ds) => new MentionMetadata2 { Child = md, Id = ds }).GroupBy(md => new MentionGroup { Timestamp = md.Child.Mention.OccurredOnTicks, Id = md.Child.Id, Id2 = md.Id }).Select(x => new Datapoint { Timestamp = x.Key.Timestamp, EntityId = x.Key.Id, EntityId2 = x.Key.Id2 }); //Expression<Func<IEnumerable<Mention>, IEnumerable<Datapoint>>> mapreduce = x => x.GroupBy(y => y.OccurredOnDayTicks).Select(g => new Datapoint { Count = g.Count(), Timestamp = g.Key }); //Expression<Func<IEnumerable<Mention>, IEnumerable<Datapoint>>> mapreduce = x => x.GroupBy(y => new MentionGroup{ Timestamp = y.OccurredOnTicks - (y.OccurredOnTicks % 864000000000) }).Select(g => new Datapoint { Count = g.Count(), Value = g.Average(y => y.Sentiment), Timestamp = g.Key.Timestamp }); //Expression<Func<IEnumerable<Mention>, IEnumerable<Datapoint>>> mapreduce = null; // ReduceExpressionGeneration.MakeExpression(null, SelectedSelect, SelectedGroupBy, SelectedGroupBy2); //Expression<Func<IEnumerable<Datapoint>, double>> merge = x => x.Sum(y => y.Value); //if (SelectedSelect == SelectTypes.Count) merge = x => x.Sum(y => (double)y.Count); var mapreduce = textBox9.Text; //Expression<Func<IEnumerable<Mention>, IEnumerable<Mention>>> paging = c => c.OrderByDescending(x => x.OccurredOnTicks).Take(25); ExpressionSerializer serializer = new ExpressionSerializer(); //InvokeOnFormThread(() => //{ // //ExpressionSerializer serializer = new ExpressionSerializer(); // //textBox6.Text = serializer.Serialize(mapreduce).ToString(); //}); var domain = textBox3.Text; //var minDate = dateTimePicker1.Value; //var maxDate = dateTimePicker2.Value; string command = textBox7.Text; Stopwatch sw = new Stopwatch(); sw.Start(); var result = client.GetData(domain, "__ql__" + query, "__ql__" + mapreduce, "__default__", null, command); sw.Stop(); result.Metadata.OperationTime = sw.Elapsed; InvokeOnFormThread(() => { var area = chart2.ChartAreas.First(); var oldseries = chart2.Series.ToArray(); string separator = "\r\n################################################################################################################################\r\n"; HardcodedBermudaDatapoint[] datapoints = new HardcodedBermudaDatapoint[0]; string jsonError = null; if (result.Data != null) { try { datapoints = new JavaScriptSerializer().Deserialize <HardcodedBermudaDatapoint[]>(result.Data); label4.Text = "Retrieved " + datapoints.Count() + "\r\nin " + sw.Elapsed; } catch (Exception ex) { jsonError = ex.ToString() + separator; } } else { datapoints = new HardcodedBermudaDatapoint[0]; } StringBuilder sb = new StringBuilder(); if (result.Metadata != null) { ConvertStatsToString(sb, result.Metadata); } textBox2.Text = result.CacheKey + separator + jsonError + result.Error + separator + sb.ToString() + separator + result.Data; var groups = datapoints.GroupBy(x => new { x.Id, x.Text }); chart2.SuspendLayout(); foreach (var s in chart2.Series.Skip(1).ToArray()) { chart2.Series.Remove(s); } int i = 0; foreach (var g in groups) { string name = g.Key.Text ?? g.Key.Id.ToString(); var timeseries = i == 0 ? chart2.Series.FirstOrDefault() : chart2.Series.Add(name); timeseries.Points.Clear(); timeseries.Name = name; timeseries.XValueType = g.Any(p => new DateTime(p.Id2).Year > 2000) ? ChartValueType.Date : ChartValueType.Int64; foreach (var d in g) { timeseries.Points.Add(timeseries.XValueType == ChartValueType.Date ? new DataPoint(new DateTime(d.Id2).ToOADate(), d.Value) : new DataPoint(d.Id2, d.Value)); } i++; } chart2.ResumeLayout(true); //textBox2.Text = sb.ToString().Trim() + separator + string.Join("\r\n", datapoints.Datapoints.Select(x => x.Id.ToString().PadLeft(32) + x.Id2.ToString().PadLeft(32) + ((int)x.Value).ToString().PadLeft(16) + x.Count.ToString().PadLeft(16) )); //var sb2 = new StringBuilder(); //ConvertStatsToString(sb2, mentions.Metadata); //textBox5.Text = sb2.ToString().Trim() + separator + string.Join(separator, mentions.Mentions.Select(x => DateTime.FromBinary( x.OccurredOnTicks ) + " :: " + x.Name + "\r\n" + x.Description)); //label4.Text = "Received " + (datapoints.Datapoints.Count()) + " datapoints\r\nin " + sw.Elapsed; }); //return datapoints.Datapoints; }
// Main execution logic. private static void Map() { // set actual timestamp var mapperActivated = DateTime.Now.Ticks; // try to open connection to external service using (var serviceClient = new ExternalServiceClient("ExternalService", ServiceUri)) { serviceClient.Open(); // try to open connection to service broker sample db using (var connection = new SqlConnection(ConnectionString)) { connection.Open(); //set actual timestamp var mapperConnected = DateTime.Now.Ticks; // prepare call of sp to dequeue message to outgoing message queue var dequeueCommand = new SqlCommand("DequeueIn", connection) { CommandType = CommandType.StoredProcedure }; dequeueCommand.Parameters.AddWithValue("@batchSize", args.BatchSize); var dequeueCommandBatchId = new SqlParameter("@batchId", SqlDbType.UniqueIdentifier) { Direction = ParameterDirection.Output }; dequeueCommand.Parameters.Add(dequeueCommandBatchId); // prepare call of tvl to get messages from incoming message table var getCommand = new SqlCommand("SELECT * FROM GetIn(@batchId)", connection); var getCommandBatchId = new SqlParameter("@batchId", SqlDbType.UniqueIdentifier); getCommand.Parameters.Add(getCommandBatchId); // prepare call of sp to enqueue message from incoming message queue var enqueueCommand = new SqlCommand("EnqueueOut", connection) { CommandType = CommandType.StoredProcedure }; var enqueueCommandMessageBody = new SqlParameter("@messageBody", SqlDbType.Xml); enqueueCommand.Parameters.Add(enqueueCommandMessageBody); // prepare call of so to delete message from incoming message table var truncateCommand = new SqlCommand("TruncateIn", connection) { CommandType = CommandType.StoredProcedure }; var truncateCommandBatchId = new SqlParameter("@batchId", SqlDbType.UniqueIdentifier); truncateCommand.Parameters.Add(truncateCommandBatchId); // main messages handling loop while (true) { //set actual timestamp var mapperPreDequeued = DateTime.Now.Ticks; // no messages if ((int)dequeueCommand.ExecuteScalar() == 0) break; // get batch id as output parameter var batchId = (Guid)dequeueCommandBatchId.Value; getCommandBatchId.Value = batchId; truncateCommandBatchId.Value = batchId; // get messages from incoming table using (var inTable = new DataTable()) { using (var adapter = new SqlDataAdapter(getCommand)) { adapter.Fill(inTable); } //set actual timestamp var mapperPostDequeued = DateTime.Now.Ticks; // handle incoming messages batch foreach (DataRow row in inTable.Rows) { // get incoming message body var mapperInMessageBody = (string)row["MessageBody"]; // set actual timestamp var mapperReceived = DateTime.Now.Ticks; // deserialize incoming message var inMessage = MapperInMessage.FromString(mapperInMessageBody, m => { m.MapperActivated = mapperActivated; m.MapperConnected = mapperConnected; m.MapperPreDequeued = mapperPreDequeued; m.MapperPostDequeued = mapperPostDequeued; m.MapperReceived = mapperReceived; }); if (args.Verbose) Console.WriteLine("Dequeued message: {0}", inMessage.Id); // simulate map execution var externalServiceRequest = InnerMapIn(inMessage); // invoke external request if (args.Verbose) Console.WriteLine("Sent message: {0}", externalServiceRequest.Id); var externalServiceResponse = serviceClient.Process(externalServiceRequest); if (args.Verbose) Console.WriteLine("Received message: {0}", externalServiceResponse.Id); // convert external service response to outgoing message var outMessage = InnerMapOut(externalServiceResponse); // serialzie outgoing message var mapperOutMessageBody = outMessage.ToString(); // enqueue message to outgoing message queue enqueueCommandMessageBody.Value = mapperOutMessageBody; enqueueCommand.ExecuteNonQuery(); if (args.Verbose) Console.WriteLine("Enqueued message: {0}", outMessage.Id); } } // delete messages from incoming message table truncateCommand.ExecuteNonQuery(); } connection.Close(); } serviceClient.Close(); } }
/// <summary> /// Constructor. /// </summary> /// <param name="log">The logger to use for this metadata source.</param> public BTablesMetadataSource(ILogger log, BProperties properties) { LogUtilities.LogFunctionEntrance(log, log); Log = log; m_Properties = properties; try { //get the client connection using (var client = ExternalServiceClient.GetClient(m_Properties.Server)) { //get the tables TableMetadataResult[] tables = client.GetMetadataTables(); //copy results tables.ToList().ForEach(t => { m_Tables.Add(new TableMetadata() { Catalog = t.Catalog, Table = t.Table, Remarks = t.Table }); }); } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.ToString()); } ////Mentions //m_Tables.Add(new TableMetadata() //{ // Catalog = Driver.B_CATALOG, // Table = "Mentions", // Remarks = "Mentions" //}); ////Tags //m_Tables.Add(new TableMetadata() //{ // Catalog = Driver.B_CATALOG, // Table = "Tags", // Remarks = "Tags" //}); ////Datasources //m_Tables.Add(new TableMetadata() //{ // Catalog = Driver.B_CATALOG, // Table = "Datasources", // Remarks = "Datasources" //}); ////Themes //m_Tables.Add(new TableMetadata() //{ // Catalog = Driver.B_CATALOG, // Table = "Themes", // Remarks = "Themes" //}); ////TagMentions //m_Tables.Add(new TableMetadata() //{ // Catalog = Driver.B_CATALOG, // Table = "TagMentions", // Remarks = "TagMentions" //}); ////DatasourceMentions //m_Tables.Add(new TableMetadata() //{ // Catalog = Driver.B_CATALOG, // Table = "DatasourceMentions", // Remarks = "DatasourceMentions" //}); ////ThemeMentions //m_Tables.Add(new TableMetadata() //{ // Catalog = Driver.B_CATALOG, // Table = "ThemeMentions", // Remarks = "ThemeMentions" //}); }