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; }
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; }
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); }
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(); }
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 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; }