private static string GetBlobEndpoint(BlobInfo blobInfo) { return blobInfo.BlobUri.Split(questionMark, StringSplitOptions.RemoveEmptyEntries)[0]; }
private async Task<Dictionary<string, List<MetricValueBlob>>> FetchMetricValuesFromBlob(BlobInfo blobInfo, MetricFilter filter) { if (blobInfo.EndTime < filter.StartTime || blobInfo.StartTime >= filter.EndTime) { return new Dictionary<string, List<MetricValueBlob>>(); } var blob = new CloudBlockBlob(new Uri(blobInfo.BlobUri)); using (var memoryStream = new MemoryStream()) { try { await blob.DownloadToStreamAsync(memoryStream); } catch (StorageException ex) { if (ex.RequestInformation.HttpStatusCode == 404) { return new Dictionary<string, List<MetricValueBlob>>(); } throw; } memoryStream.Seek(0, 0); using (var streamReader = new StreamReader(memoryStream)) { string content = await streamReader.ReadToEndAsync(); var metricBlob = JsonConvert.DeserializeObject<MetricBlob>(content); var metricValues = metricBlob.records; var metricsPerName = new Dictionary<string, List<MetricValueBlob>>(); foreach (var metric in metricValues) { if (metric.time < filter.StartTime || metric.time >= filter.EndTime) { continue; } List<MetricValueBlob> metrics; if (!metricsPerName.TryGetValue(metric.metricName, out metrics)) { metrics = new List<MetricValueBlob>(); metricsPerName.Add(metric.metricName, metrics); } metrics.Add(metric); } return metricsPerName; } } }