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