8
8
9
9
import com .google .common .base .Joiner ;
10
10
import com .google .common .io .ByteStreams ;
11
+ import com .google .common .reflect .TypeToken ;
12
+ import com .microsoft .azure .AzureResponseBuilder ;
11
13
import com .microsoft .azure .management .appservice .DeployType ;
12
14
import com .microsoft .azure .management .appservice .WebAppBase ;
15
+ import com .microsoft .rest .RestClient ;
13
16
import com .microsoft .rest .RestException ;
14
17
import com .microsoft .rest .ServiceResponse ;
18
+ import com .microsoft .rest .ServiceResponseBuilder ;
19
+ import com .microsoft .rest .protocol .ResponseBuilder ;
15
20
import okhttp3 .MediaType ;
16
21
import okhttp3 .RequestBody ;
17
22
import okhttp3 .ResponseBody ;
35
40
import java .io .IOException ;
36
41
import java .io .InputStream ;
37
42
import java .net .SocketTimeoutException ;
43
+ import java .util .Map ;
38
44
import java .util .Objects ;
39
45
import java .util .concurrent .TimeUnit ;
40
46
41
47
/**
42
48
* A client which interacts with Kudu service.
43
49
*/
44
50
class KuduClient {
51
+ private final RestClient restClient ;
45
52
private final KuduService service ;
46
53
47
54
KuduClient (WebAppBase webAppBase ) {
@@ -53,11 +60,12 @@ class KuduClient {
53
60
.replace ("https://" , "" );
54
61
String [] parts = host .split ("\\ ." , 2 );
55
62
host = Joiner .on ('.' ).join (parts [0 ], "scm" , parts [1 ]);
56
- service = webAppBase .manager ().restClient ().newBuilder ()
63
+ restClient = webAppBase .manager ().restClient ().newBuilder ()
57
64
.withBaseUrl ("https://" + host )
58
65
.withConnectionTimeout (3 , TimeUnit .MINUTES )
59
66
.withReadTimeout (3 , TimeUnit .MINUTES )
60
- .build ()
67
+ .build ();
68
+ service = restClient
61
69
.retrofit ().create (KuduService .class );
62
70
}
63
71
@@ -98,6 +106,10 @@ private interface KuduService {
98
106
@ Headers ({ "Content-Type: application/octet-stream" , "x-ms-logging-context: com.microsoft.azure.management.appservice.WebApps publish" , "x-ms-body-logging: false" })
99
107
@ POST ("api/publish" )
100
108
Observable <Response <ResponseBody >> deploy (@ Body RequestBody file , @ Query ("type" ) DeployType type , @ Query ("path" ) String path , @ Query ("restart" ) Boolean restart , @ Query ("clean" ) Boolean clean );
109
+
110
+ @ Headers ({ "x-ms-logging-context: com.microsoft.azure.management.appservice.WebApps settings" })
111
+ @ GET ("api/settings" )
112
+ Observable <Response <ResponseBody >> settings ();
101
113
}
102
114
103
115
Observable <String > streamApplicationLogsAsync () {
@@ -204,6 +216,37 @@ Completable deployAsync(DeployType type, InputStream file, String path, Boolean
204
216
}
205
217
}
206
218
219
+ Observable <Map <String , String >> settings () {
220
+ return retryOnError (service .settings ().flatMap (new Func1 <Response <ResponseBody >, Observable <ServiceResponse <Map <String , String >>>>() {
221
+ @ Override
222
+ public Observable <ServiceResponse <Map <String , String >>> call (Response <ResponseBody > response ) {
223
+ try {
224
+ ResponseBuilder <Map <String , String >, RestException > responseBuilder = restClient
225
+ .responseBuilderFactory ().newInstance (restClient .serializerAdapter ());
226
+ // set throwOnGet404 to true
227
+ if (responseBuilder instanceof AzureResponseBuilder ) {
228
+ ((AzureResponseBuilder <Map <String , String >, RestException >) responseBuilder ).withThrowOnGet404 (true );
229
+ } else if (responseBuilder instanceof ServiceResponseBuilder ) {
230
+ ((ServiceResponseBuilder <Map <String , String >, RestException >) responseBuilder ).withThrowOnGet404 (true );
231
+ }
232
+
233
+ ServiceResponse <Map <String , String >> clientResponse = responseBuilder
234
+ .register (200 , new TypeToken <Map <String , String >>() { }.getType ())
235
+ .registerError (RestException .class )
236
+ .build (response );
237
+ return Observable .just (clientResponse );
238
+ } catch (Throwable t ) {
239
+ return Observable .error (t );
240
+ }
241
+ }
242
+ }).map (new Func1 <ServiceResponse <Map <String , String >>, Map <String , String >>() {
243
+ @ Override
244
+ public Map <String , String > call (ServiceResponse <Map <String , String >> response ) {
245
+ return response .body ();
246
+ }
247
+ }));
248
+ }
249
+
207
250
private Observable <ServiceResponse <Void >> handleResponse (Observable <Response <ResponseBody >> observable ) {
208
251
return observable .flatMap (new Func1 <Response <ResponseBody >, Observable <ServiceResponse <Void >>>() {
209
252
@ Override
0 commit comments