Пример #1
0
        public static List <Telemetry> GetTelemetryData(TelemetryInputs inputs)
        {
            string uri = @"https://management.core.windows.net/{subscriptionId}/services/ServiceBus/namespaces/{namespaceName}/NotificationHubs/{hubName}/metrics/{metricName}/rollups/{metricRollup}/Values?$filter={filterExpression}";

            uri = uri.Replace("{subscriptionId}", inputs.SubscriptionId);
            uri = uri.Replace("{namespaceName}", inputs.NamespaceName);
            uri = uri.Replace("{hubName}", inputs.NotificationHubName);
            uri = uri.Replace("{metricName}", inputs.MetricName);
            uri = uri.Replace("{metricRollup}", inputs.Rollup.ToString());

            string strFromDate = String.Format("{0:s}", inputs.FromDate);
            string strToDate   = String.Format("{0:s}", inputs.ToDate);

            // See - http://msdn.microsoft.com/library/azure/dn163590.aspx for details
            string filterExpression = String.Format
                                          ("Timestamp%20gt%20datetime'{0}Z'%20and%20Timestamp%20lt%20datetime'{1}Z'",
                                          strFromDate, strToDate);

            uri = uri.Replace("{filterExpression}", filterExpression);

            X509Certificate2 certificate = new X509Certificate2(inputs.PathToCert, inputs.CertPassword);

            HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(uri);

            sendNotificationRequest.Method      = "GET";
            sendNotificationRequest.ContentType = "application/xml";
            sendNotificationRequest.Headers.Add("x-ms-version", "2011-02-25");
            sendNotificationRequest.ClientCertificates.Add(certificate);

            List <Telemetry> data = new List <Telemetry>();

            try
            {
                HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse();

                using (XmlReader reader = XmlReader.Create(response.GetResponseStream(),
                                                           new XmlReaderSettings {
                    CloseInput = true
                }))
                {
                    SyndicationFeed feed = SyndicationFeed.Load <SyndicationFeed>(reader);

                    foreach (SyndicationItem item in feed.Items)
                    {
                        XmlSyndicationContent syndicationContent = item.Content as XmlSyndicationContent;
                        MetricValue           value = syndicationContent.ReadContent <MetricValue>();
                        data.Add(new Telemetry(value.Timestamp, value.Total));
                        Console.WriteLine("Timestamp: {0} -> Total: {1}", value.Timestamp, value.Total);
                    }
                }
            }
            catch (WebException exception)
            {
                string error = new StreamReader(exception.Response.GetResponseStream()).ReadToEnd();
                Console.WriteLine(error);
            }
            return(data);
        }
        public static List<Telemetry> GetTelemetryData(TelemetryInputs inputs)
        {
            string uri = @"https://management.core.windows.net/{subscriptionId}/services/ServiceBus/namespaces/{namespaceName}/NotificationHubs/{hubName}/metrics/{metricName}/rollups/{metricRollup}/Values?$filter={filterExpression}";

            uri = uri.Replace("{subscriptionId}", inputs.SubscriptionId);
            uri = uri.Replace("{namespaceName}", inputs.NamespaceName);
            uri = uri.Replace("{hubName}", inputs.NotificationHubName);
            uri = uri.Replace("{metricName}", inputs.MetricName);
            uri = uri.Replace("{metricRollup}", inputs.Rollup.ToString());

            string strFromDate = String.Format("{0:s}", inputs.FromDate);
            string strToDate = String.Format("{0:s}", inputs.ToDate);

            // See - http://msdn.microsoft.com/library/azure/dn163590.aspx for details
            string filterExpression = String.Format
                ("Timestamp%20gt%20datetime'{0}Z'%20and%20Timestamp%20lt%20datetime'{1}Z'", 
                    strFromDate, strToDate);
            uri = uri.Replace("{filterExpression}", filterExpression);

            X509Certificate2 certificate = new X509Certificate2(inputs.PathToCert, inputs.CertPassword);

            HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(uri);
            sendNotificationRequest.Method = "GET";
            sendNotificationRequest.ContentType = "application/xml";
            sendNotificationRequest.Headers.Add("x-ms-version", "2011-02-25");
            sendNotificationRequest.ClientCertificates.Add(certificate);

            List<Telemetry> data = new List<Telemetry>(); 
            try
            {
                HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse();

                using (XmlReader reader = XmlReader.Create(response.GetResponseStream(),
                    new XmlReaderSettings { CloseInput = true }))
                {
                    SyndicationFeed feed = SyndicationFeed.Load<SyndicationFeed>(reader);
                    
                    foreach (SyndicationItem item in feed.Items)
                    {
                        XmlSyndicationContent syndicationContent = item.Content as XmlSyndicationContent;
                        MetricValue value = syndicationContent.ReadContent<MetricValue>();
                        data.Add(new Telemetry(value.Timestamp, value.Total));
                        Console.WriteLine("Timestamp: {0} -> Total: {1}", value.Timestamp, value.Total);
                    }
                }
            }
            catch (WebException exception)
            {
                string error = new StreamReader(exception.Response.GetResponseStream()).ReadToEnd();
                Console.WriteLine(error);
            }
            return data;
        }
Пример #3
0
        private Dictionary <DateTime, long> PopulateValues(TelemetryInputs inputs)
        {
            Dictionary <DateTime, long> values = new Dictionary <DateTime, long>();
            DateTime currentDT = inputs.FromDate;

            while (currentDT <= inputs.ToDate)
            {
                values.Add(currentDT, 0);
                currentDT = UpdateIteratingDateTime(currentDT, inputs);
            }
            return(values);
        }
 private TelemetryInputs GetMetadataInputs(string metricName)
 {
     TelemetryInputs inputs = new TelemetryInputs();
     inputs.PathToCert = txtCertPath.Text.Trim();
     inputs.CertPassword = txtCertPassword.Text.Trim();
     inputs.SubscriptionId = txtSubscriptionID.Text.Trim(); 
     inputs.NamespaceName = txtNamespace.Text.Trim();
     inputs.NotificationHubName = txtNotificationHub.Text.Trim();
     inputs.MetricName = metricName;
     inputs.FromDate = datePickerFromDate.Value.Date;
     inputs.ToDate = datePickerToDate.Value.Date;
     inputs.Rollup = ParseMetricRollup();
     return inputs;
 }
Пример #5
0
        private TelemetryInputs GetMetadataInputs(string metricName)
        {
            TelemetryInputs inputs = new TelemetryInputs();

            inputs.PathToCert          = txtCertPath.Text.Trim();
            inputs.CertPassword        = txtCertPassword.Text.Trim();
            inputs.SubscriptionId      = txtSubscriptionID.Text.Trim();
            inputs.NamespaceName       = txtNamespace.Text.Trim();
            inputs.NotificationHubName = txtNotificationHub.Text.Trim();
            inputs.MetricName          = metricName;
            inputs.FromDate            = datePickerFromDate.Value.Date;
            inputs.ToDate = datePickerToDate.Value.Date;
            inputs.Rollup = ParseMetricRollup();
            return(inputs);
        }
Пример #6
0
        private void btnFetchMetrics_Click(object sender, EventArgs e)
        {
            int metricSelection = 1;

            UpdateSpreadsheetHeaders();
            foreach (string selectedItem in lstMetricName.CheckedItems)
            {
                TelemetryInputs             inputs               = GetMetadataInputs(ParseMetricName(selectedItem));
                Dictionary <DateTime, long> allTelemetryData     = PopulateValues(inputs);
                List <Telemetry>            fetchedTelemetryData = NHTelemetry.GetTelemetryData(inputs);
                WriteToSpreadsheet(allTelemetryData, fetchedTelemetryData, inputs, metricSelection);
                metricSelection++;
            }
            CreateChart();
        }
Пример #7
0
        private DateTime UpdateIteratingDateTime(DateTime currentDT, TelemetryInputs inputs)
        {
            DateTime updatedDT = currentDT;

            switch (inputs.Rollup)
            {
            case TelemetryRollups.P1D:
                updatedDT = currentDT.AddDays(1);
                break;

            case TelemetryRollups.PT1H:
                updatedDT = currentDT.AddHours(1);
                break;

            case TelemetryRollups.PT5M:
                updatedDT = currentDT.AddMinutes(5);
                break;
            }
            return(updatedDT);
        }
Пример #8
0
        private void WriteToSpreadsheet(Dictionary <DateTime, long> allTelemetryData,
                                        List <Telemetry> fetchedTelemetryData, TelemetryInputs inputs, int selectionNumber)
        {
            int columnNumber = selectionNumber + 1;

            foreach (Telemetry item in fetchedTelemetryData)
            {
                allTelemetryData[item.TimeStamp] = item.Value;
            }

            DateTime currentDT = inputs.FromDate;
            int      rowCount  = 2;

            while (currentDT <= inputs.ToDate)
            {
                UpdateInSpreadsheet(currentDT, allTelemetryData[currentDT].ToString(), rowCount, columnNumber);
                rowCount++;
                currentDT = UpdateIteratingDateTime(currentDT, inputs);
            }
        }
 private DateTime UpdateIteratingDateTime(DateTime currentDT, TelemetryInputs inputs)
 {
     DateTime updatedDT = currentDT;
     switch (inputs.Rollup)
     {
         case TelemetryRollups.P1D: 
             updatedDT = currentDT.AddDays(1);
             break;
         case TelemetryRollups.PT1H:
             updatedDT = currentDT.AddHours(1);
             break;
         case TelemetryRollups.PT5M:
             updatedDT = currentDT.AddMinutes(5);
             break;
     }
     return updatedDT;
 }
 private void WriteToSpreadsheet(Dictionary<DateTime, long> allTelemetryData,
     List<Telemetry> fetchedTelemetryData, TelemetryInputs inputs, int selectionNumber)
 {
     int columnNumber = selectionNumber + 1;
     foreach (Telemetry item in fetchedTelemetryData)
     {
         allTelemetryData[item.TimeStamp] = item.Value;
     }
     
     DateTime currentDT = inputs.FromDate;
     int rowCount = 2;
     while (currentDT <= inputs.ToDate)
     {
         UpdateInSpreadsheet(currentDT, allTelemetryData[currentDT].ToString(), rowCount, columnNumber);
         rowCount++;
         currentDT = UpdateIteratingDateTime(currentDT, inputs);
     }
 }
 private Dictionary<DateTime, long> PopulateValues(TelemetryInputs inputs)
 {
     Dictionary<DateTime, long> values = new Dictionary<DateTime, long>(); 
     DateTime currentDT = inputs.FromDate;
     while (currentDT <= inputs.ToDate)
     {
         values.Add(currentDT, 0);
         currentDT = UpdateIteratingDateTime(currentDT, inputs);
     }
     return values;
 }