예제 #1
0
        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());
        }
예제 #2
0
        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);
        }