Exemplo n.º 1
0
        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);
                }
            }
        }