コード例 #1
0
        public async Task <IActionResult> SubscriptionDimensionUsage(DimensionEventViewModel model, CancellationToken cancellationToken)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var usage = new UsageEvent()
            {
                ResourceId         = model.SubscriptionId,
                PlanId             = model.PlanId,
                Dimension          = model.SelectedDimension,
                Quantity           = model.Quantity,
                EffectiveStartTime = model.EventTime,
            };

            var updateResult = await this.meteringClient.MeteringOperations.PostUsageEventAsync(usage, null, null, cancellationToken).ConfigureAwait(false);

            DimensionUsageRecord dimRecord = new DimensionUsageRecord(usage.ResourceId?.ToString(), DateTime.Now.ToString("o"));

            bool errorMessage = true;

            if (updateResult != null)
            {
                dimRecord.UsageEventId       = updateResult.UsageEventId;
                dimRecord.Status             = updateResult.Status.ToString();
                dimRecord.Quantity           = updateResult.Quantity;
                dimRecord.Dimension          = updateResult.Dimension;
                dimRecord.EffectiveStartTime = updateResult.MessageTime;
                dimRecord.PlanId             = updateResult.PlanId;
                errorMessage = false;
            }
            else
            {
                dimRecord.Status             = UsageEventStatusEnum.InvalidDimensionBadArgument.ToString();
                dimRecord.Quantity           = usage.Quantity;
                dimRecord.Dimension          = usage.Dimension;
                dimRecord.EffectiveStartTime = usage.EffectiveStartTime;
                dimRecord.PlanId             = usage.PlanId;
            }

            await this.dimensionUsageStore.RecordAsync(model.SubscriptionId, dimRecord, cancellationToken).ConfigureAwait(false);

            return(this.RedirectToAction("SubscriptionDimensionUsage", new { model.SubscriptionId, errorMessage }));
        }
コード例 #2
0
        public async Task <IActionResult> SubscriptionDimensionUsage(Guid subscriptionId, bool showErrorMessage, CancellationToken cancellationToken)
        {
            var subscription =
                (await this.marketplaceClient.Fulfillment.GetSubscriptionAsync(subscriptionId, null, null, cancellationToken).ConfigureAwait(false)).Value;

            var dimensionEventViewModel = new DimensionEventViewModel()
            {
                SubscriptionId         = subscriptionId,
                OfferId                = subscription.OfferId,
                PlanId                 = subscription.PlanId,
                EventTime              = DateTime.Now,
                SubscriptionDimensions = this.options.Dimensions
                                         .Where(dim => dim.PlanIds.Contains(subscription.PlanId) && dim.OfferIds.Contains(subscription.OfferId))
                                         .Select(dim => dim.DimensionId).ToList(),
                PastUsageEvents = await this.dimensionUsageStore.GetAllDimensionRecordsAsync(subscriptionId, cancellationToken).ConfigureAwait(false),
            };

            if (showErrorMessage)
            {
                this.ViewBag.UpdateError = "Unable to sent dimension usage, please see logs!";
            }

            return(this.View(dimensionEventViewModel));
        }