13
13
// ----------------------------------------------------------------------------------
14
14
15
15
using Microsoft . Azure . Commands . RemoteApp ;
16
- using Microsoft . Azure . Management . RemoteApp ;
17
16
using Microsoft . Azure . Management . RemoteApp . Models ;
17
+ using Microsoft . PowerShell . Commands ;
18
18
using System ;
19
- using System . Collections . Generic ;
20
- using System . IO ;
21
- using System . Linq ;
19
+ using System . Collections . ObjectModel ;
22
20
using System . Management . Automation ;
23
- using System . Net ;
24
21
25
22
namespace Microsoft . Azure . Management . RemoteApp . Cmdlets
26
23
{
@@ -33,6 +30,7 @@ public class GetAzureRemoteAppCollectionUsageDetails : RdsCmdlet
33
30
Mandatory = true ,
34
31
ValueFromPipelineByPropertyName = true ,
35
32
HelpMessage = "RemoteApp collection name" ) ]
33
+ [ ValidatePattern ( NameValidatorString ) ]
36
34
public string CollectionName { get ; set ; }
37
35
38
36
[ Parameter ( Mandatory = false ,
@@ -47,33 +45,19 @@ public class GetAzureRemoteAppCollectionUsageDetails : RdsCmdlet
47
45
[ ValidatePattern ( FullYearPattern ) ]
48
46
public string UsageYear { get ; set ; }
49
47
50
- public override void ExecuteCmdlet ( )
48
+ [ Parameter ( Mandatory = false ,
49
+ HelpMessage = "Allows to run the cmdlet in the background as a PS job." ) ]
50
+ public SwitchParameter AsJob { get ; set ; }
51
+
52
+ private LongRunningTask < GetAzureRemoteAppCollectionUsageDetails > task = null ;
53
+
54
+ private void GetPublishedUsageDetails ( CollectionUsageDetailsResult detailsUsage )
51
55
{
52
- DateTime today = DateTime . Now ;
53
- CollectionUsageDetailsResult detailsUsage = null ;
54
- string locale = String . Empty ;
55
56
RemoteAppOperationStatusResult operationResult = null ;
56
57
int maxRetryCount = 60 ;
57
-
58
- if ( String . IsNullOrWhiteSpace ( UsageMonth ) )
59
- {
60
- UsageMonth = today . Month . ToString ( ) ;
61
- }
62
-
63
- if ( String . IsNullOrWhiteSpace ( UsageYear ) )
64
- {
65
- UsageYear = today . Year . ToString ( ) ;
66
- }
67
-
68
- locale = System . Globalization . CultureInfo . CurrentCulture . ToString ( ) ;
69
-
70
- detailsUsage = CallClient ( ( ) => Client . Collections . GetUsageDetails ( CollectionName , UsageYear , UsageMonth , locale ) , Client . Collections ) ;
71
-
72
- if ( detailsUsage == null )
73
- {
74
- return ;
75
- }
76
-
58
+ Collection < WebResponseObject > htmlWebResponse = null ;
59
+ string scriptBlock = "Invoke-WebRequest -Uri " + "\" " + detailsUsage . UsageDetails . SasUri + "\" " ;
60
+
77
61
// The request is async and we have to wait for the usage details to be produced here
78
62
do
79
63
{
@@ -82,13 +66,15 @@ public override void ExecuteCmdlet()
82
66
83
67
operationResult = CallClient ( ( ) => Client . OperationResults . Get ( detailsUsage . UsageDetails . OperationTrackingId ) , Client . OperationResults ) ;
84
68
}
85
- while ( operationResult . RemoteAppOperationResult . Status != RemoteAppOperationStatus . Success &&
69
+ while ( operationResult . RemoteAppOperationResult . Status != RemoteAppOperationStatus . Success &&
86
70
operationResult . RemoteAppOperationResult . Status != RemoteAppOperationStatus . Failed &&
87
71
-- maxRetryCount > 0 ) ;
88
72
89
73
if ( operationResult . RemoteAppOperationResult . Status == RemoteAppOperationStatus . Success )
90
74
{
91
- WriteUsageDetails ( detailsUsage ) ;
75
+ htmlWebResponse = CallPowershellWithReturnType < WebResponseObject > ( scriptBlock ) ;
76
+ string usage = new string ( System . Text . Encoding . UTF8 . GetChars ( htmlWebResponse [ 0 ] . Content ) ) ;
77
+ WriteObject ( usage ) ;
92
78
}
93
79
else
94
80
{
@@ -105,7 +91,7 @@ public override void ExecuteCmdlet()
105
91
else if ( maxRetryCount <= 0 )
106
92
{
107
93
ErrorRecord error = RemoteAppCollectionErrorState . CreateErrorRecordFromString (
108
- String . Format ( System . Globalization . CultureInfo . InvariantCulture ,
94
+ String . Format ( System . Globalization . CultureInfo . InvariantCulture ,
109
95
Commands_RemoteApp . RequestTimedOutFormat ,
110
96
detailsUsage . UsageDetails . OperationTrackingId ) ,
111
97
String . Empty ,
@@ -117,32 +103,48 @@ public override void ExecuteCmdlet()
117
103
}
118
104
}
119
105
120
- private void WriteUsageDetails ( CollectionUsageDetailsResult detailsUsage )
106
+ public override void ExecuteCmdlet ( )
121
107
{
122
- //
123
- // Display the content pointed to by the returned URI
124
- //
125
- WebResponse response = null ;
108
+ DateTime today = DateTime . Now ;
109
+ CollectionUsageDetailsResult detailsUsage = null ;
110
+ string locale = String . Empty ;
126
111
127
- WebRequest request = WebRequest . Create ( detailsUsage . UsageDetails . SasUri ) ;
112
+ if ( String . IsNullOrWhiteSpace ( UsageMonth ) )
113
+ {
114
+ UsageMonth = today . Month . ToString ( ) ;
115
+ }
128
116
129
- try
117
+ if ( String . IsNullOrWhiteSpace ( UsageYear ) )
130
118
{
131
- response = ( HttpWebResponse ) request . GetResponse ( ) ;
119
+ UsageYear = today . Year . ToString ( ) ;
132
120
}
133
- catch ( Exception e )
121
+
122
+ locale = System . Globalization . CultureInfo . CurrentCulture . ToString ( ) ;
123
+
124
+ detailsUsage = CallClient ( ( ) => Client . Collections . GetUsageDetails ( CollectionName , UsageYear , UsageMonth , locale ) , Client . Collections ) ;
125
+
126
+ if ( detailsUsage == null )
134
127
{
135
- ErrorRecord error = RemoteAppCollectionErrorState . CreateErrorRecordFromException ( e , String . Empty , Client . Collections , ErrorCategory . InvalidResult ) ;
136
- WriteError ( error ) ;
128
+ return ;
137
129
}
138
130
139
- using ( Stream dataStream = response . GetResponseStream ( ) )
131
+ if ( AsJob . IsPresent )
140
132
{
141
- using ( StreamReader reader = new StreamReader ( dataStream ) )
133
+ task = new LongRunningTask < GetAzureRemoteAppCollectionUsageDetails > ( this , "RemoteAppBackgroundTask" , Commands_RemoteApp . UsageDetails ) ;
134
+
135
+ task . ProcessJob ( ( ) =>
142
136
{
143
- String csvContent = reader . ReadToEnd ( ) ;
144
- WriteObject ( csvContent ) ;
145
- }
137
+ task . SetStatus ( Commands_RemoteApp . DownloadingUsageDetails ) ;
138
+ GetPublishedUsageDetails ( detailsUsage ) ;
139
+ task . SetStatus ( Commands_RemoteApp . JobComplete ) ;
140
+ } ) ;
141
+
142
+ WriteObject ( task ) ;
143
+
144
+ }
145
+ else
146
+ {
147
+ GetPublishedUsageDetails ( detailsUsage ) ;
146
148
}
147
149
}
148
150
}
0 commit comments