private static void GetUsageData(Dictionary <string, MeterData> meterRateDictionary, string subscriptionName, string subscriptionId, string organizationId, string startTime, string endTime, string pullId, string baseUrl) { string requestUrl = String.Format("{0}/ratecard/GetUsageData?subscriptionId={1}&organizationId={2}&startDate={3}&endDate={4}", baseUrl, subscriptionId, organizationId, startTime, endTime); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl); // Read Response HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream receiveStream = response.GetResponseStream(); // read stream as text StreamReader responseStream = new StreamReader(receiveStream); string usageText = responseStream.ReadToEnd(); UsageDetailsTemp usage = JsonConvert.DeserializeObject <UsageDetailsTemp>(usageText); List <AzureUsageDetails> usageDetails = new List <AzureUsageDetails>(); DateTime detailsDateTime = DateTime.Now; if (usage != null && usage.value != null) { foreach (Value val in usage.value) { var instanceId = "None"; if (val.properties.instanceData != null) { var instanceKey = JToken.Parse(val.properties.instanceData); instanceId = (string)instanceKey["Microsoft.Resources"]["resourceUri"]; } var aggregateKey = val.properties.usageStartTime + "_" + val.properties.usageEndTime; var rowKey = GetInstanceBasedRowKey(val.properties.subscriptionId, val.properties.meterId, instanceId, aggregateKey); var partitionKey = GetMonthBasedPartitionKey(Convert.ToDateTime(val.properties.usageEndTime)); AzureUsageDetails newDetail = GetInstanceLevelUsageDetail(detailsDateTime, subscriptionName, pullId, val, instanceId, rowKey, partitionKey); usageDetails.Add(newDetail); } } EntityRepo <AzureUsageDetails> usageEntityRepo = new EntityRepo <AzureUsageDetails>(); usageEntityRepo.Insert(usageDetails); IEnumerable <AzureUsageDetailsDaily> aggregateUsage = AggregateAtDailyUsage(usageDetails, meterRateDictionary); EntityRepo <AzureUsageDetailsDaily> usageEntityRepoAgg = new EntityRepo <AzureUsageDetailsDaily>(); usageEntityRepoAgg.Insert(aggregateUsage.ToList()); IEnumerable <AzureUsageDetailsMeterAggregate> aggregateSubscription = AggregateAtMeterWithExpense(meterRateDictionary, usageDetails); EntityRepo <AzureUsageDetailsMeterAggregate> aggregateSubscriptionRepo = new EntityRepo <AzureUsageDetailsMeterAggregate>(); aggregateSubscriptionRepo.Insert(aggregateSubscription.ToList()); }
private static AzureUsageDetails GetInstanceLevelUsageDetail(DateTime detailsDateTime, string subscriptionName, string pullId, Value val, string instanceId, string rowKey, string partitionKey) { AzureUsageDetails newDetail = new AzureUsageDetails(partitionKey, rowKey); newDetail.InstanceId = instanceId; newDetail.Name = val.name; newDetail.Type = val.type; newDetail.SubscriptionId = val.properties.subscriptionId; newDetail.SubscriptionName = subscriptionName; newDetail.UsageStartTime = Convert.ToDateTime(val.properties.usageStartTime); newDetail.UsageEndTime = Convert.ToDateTime(val.properties.usageEndTime); newDetail.Quantity = val.properties.quantity; newDetail.Unit = val.properties.unit; newDetail.MeterId = val.properties.meterId; newDetail.MeterCategory = val.properties.meterCategory; newDetail.MeterSubCategory = val.properties.meterSubCategory; newDetail.MeterName = val.properties.meterName; newDetail.MeterRegion = val.properties.infoFields.meteredRegion; newDetail.DetailsDateTime = detailsDateTime; newDetail.PullId = pullId; return(newDetail); }