Beispiel #1
0
        /// <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);
        }
Beispiel #3
0
 private void MakeClientAndGetData()
 {
     try
     {
         using (var client = ExternalServiceClient.GetClient(Endpoint))
         {
             GetData(client);
         }
     }
     catch (Exception ex)
     {
         textBox2.Invoke(new Action(() => textBox2.Text = ex.ToString()));
     }
 }
Beispiel #4
0
        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()));
            }
        }
Beispiel #5
0
        /// <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;
            }
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        /// <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);
        }
Beispiel #8
0
        // 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;
 }
Beispiel #10
0
        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;
        }
Beispiel #11
0
        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();
            }
        }
Beispiel #13
0
        /// <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"
            //});
        }