public void CanGetCollectionUsageDetails() { using (var undoContext = UndoContext.Current) { undoContext.Start(); var client = GetRemoteAppManagementClient(); CollectionUsageDetailsResult usageDetails = client.Collections.GetUsageDetails("simple", "2015", "2", "en-us"); Assert.NotNull(usageDetails); Assert.Equal(HttpStatusCode.OK, usageDetails.StatusCode); Assert.NotNull(usageDetails.UsageDetails.OperationTrackingId); Assert.NotNull(usageDetails.UsageDetails.SasUri); // ensure that the tracking id is valid one and can get the operation status AssertLongrunningOperation(client, RemoteAppOperationStatus.Success, usageDetails.UsageDetails.OperationTrackingId); HttpRecorderMode mode = HttpMockServer.GetCurrentMode(); if (mode == HttpRecorderMode.Record) { // these tests only can be executed during the record mode as the URI is not valid without the proper creds WebClient webClient = new WebClient(); byte[] detailUsage = webClient.DownloadData(new Uri(usageDetails.UsageDetails.SasUri)); Assert.NotNull(detailUsage); Assert.NotEmpty(detailUsage); } } }
private void GetUsageDetails(CollectionUsageDetailsResult detailsUsage) { RemoteAppOperationStatusResult operationResult = null; // The request is async and we have to wait for the usage details to be produced here do { System.Threading.Thread.Sleep(5000); operationResult = CallClient(() => Client.OperationResults.Get(detailsUsage.UsageDetails.OperationTrackingId), Client.OperationResults); }while (operationResult.RemoteAppOperationResult.Status != RemoteAppOperationStatus.Success && operationResult.RemoteAppOperationResult.Status != RemoteAppOperationStatus.Failed); if (operationResult.RemoteAppOperationResult.Status == RemoteAppOperationStatus.Success) { WriteUsageDetails(detailsUsage); } else { ErrorRecord error = RemoteAppCollectionErrorState.CreateErrorRecordFromString( Commands_RemoteApp.DetailedUsageFailureMessage, String.Empty, Client.Collections, ErrorCategory.ResourceUnavailable); WriteError(error); } }
private void WriteUsageDetails(CollectionUsageDetailsResult detailsUsage) { // // Display the content pointed to by the returned URI // WebResponse response = null; WebRequest request = WebRequest.Create(detailsUsage.UsageDetails.SasUri); try { response = (HttpWebResponse)request.GetResponse(); } catch (Exception e) { ErrorRecord error = RemoteAppCollectionErrorState.CreateErrorRecordFromException(e, String.Empty, Client.Collections, ErrorCategory.InvalidResult); WriteError(error); } using (Stream dataStream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(dataStream)) { String csvContent = reader.ReadToEnd(); WriteObject(csvContent); } } }
public override void ExecuteCmdlet() { DateTime today = DateTime.Now; CollectionUsageDetailsResult detailsUsage = null; string locale = String.Empty; if (String.IsNullOrWhiteSpace(UsageMonth)) { UsageMonth = today.Month.ToString(); } if (String.IsNullOrWhiteSpace(UsageYear)) { UsageYear = today.Year.ToString(); } locale = System.Globalization.CultureInfo.CurrentCulture.ToString(); detailsUsage = CallClient(() => Client.Collections.GetUsageDetails(CollectionName, UsageYear, UsageMonth, locale), Client.Collections); if (detailsUsage == null) { return; } if (AsJob.IsPresent) { task = new LongRunningTask <GetAzureRemoteAppCollectionUsageDetails>(this, "RemoteAppBackgroundTask", Commands_RemoteApp.UsageDetails); task.ProcessJob(() => { task.SetStatus(Commands_RemoteApp.DownloadingUsageDetails); GetUsageDetails(detailsUsage); task.SetStatus(Commands_RemoteApp.JobComplete); }); WriteObject(task); } else { GetUsageDetails(detailsUsage); } }
public override void ExecuteCmdlet() { DateTime today = DateTime.Now; CollectionUsageDetailsResult detailsUsage = null; string locale = String.Empty; RemoteAppOperationStatusResult operationResult = null; int maxRetryCount = 60; if (String.IsNullOrWhiteSpace(UsageMonth)) { UsageMonth = today.Month.ToString(); } if (String.IsNullOrWhiteSpace(UsageYear)) { UsageYear = today.Year.ToString(); } locale = System.Globalization.CultureInfo.CurrentCulture.ToString(); detailsUsage = CallClient(() => Client.Collections.GetUsageDetails(CollectionName, UsageYear, UsageMonth, locale), Client.Collections); if (detailsUsage == null) { return; } // The request is async and we have to wait for the usage details to be produced here do { System.Threading.Thread.Sleep(5000); operationResult = CallClient(() => Client.OperationResults.Get(detailsUsage.UsageDetails.OperationTrackingId), Client.OperationResults); }while(operationResult.RemoteAppOperationResult.Status != RemoteAppOperationStatus.Success && operationResult.RemoteAppOperationResult.Status != RemoteAppOperationStatus.Failed && --maxRetryCount > 0); if (operationResult.RemoteAppOperationResult.Status == RemoteAppOperationStatus.Success) { WriteUsageDetails(detailsUsage); } else { if (operationResult.RemoteAppOperationResult.Status == RemoteAppOperationStatus.Failed) { ErrorRecord error = RemoteAppCollectionErrorState.CreateErrorRecordFromString( Commands_RemoteApp.DetailedUsageFailureMessage, String.Empty, Client.Collections, ErrorCategory.ResourceUnavailable); WriteError(error); } else if (maxRetryCount <= 0) { ErrorRecord error = RemoteAppCollectionErrorState.CreateErrorRecordFromString( String.Format(System.Globalization.CultureInfo.InvariantCulture, Commands_RemoteApp.RequestTimedOutFormat, detailsUsage.UsageDetails.OperationTrackingId), String.Empty, Client.Collections, ErrorCategory.OperationTimeout); WriteError(error); } } }