Skip to content

Commit 32ec1ed

Browse files
support api/settings from Kudu (#1315)
1 parent 59cf7e0 commit 32ec1ed

File tree

3 files changed

+67
-2
lines changed

3 files changed

+67
-2
lines changed

azure-mgmt-appservice/src/main/java/com/microsoft/azure/management/appservice/WebAppBase.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,20 @@ public interface WebAppBase extends
599599
@Beta(SinceVersion.V1_14_0)
600600
Completable zipDeployAsync(InputStream zipFile);
601601

602+
/**
603+
* Gets the App Settings on site from Kudu client. It might lag after App Setting update to the site.
604+
* @return the App Settings on site from Kudu client
605+
*/
606+
@Beta(SinceVersion.V1_37_0)
607+
Map<String, String> getSiteAppSettings();
608+
609+
/**
610+
* Gets the App Settings on site from Kudu client. It might lag after App Setting update to the site.
611+
* @return the App Settings on site from Kudu client
612+
*/
613+
@Beta(SinceVersion.V1_37_0)
614+
Observable<Map<String, String>> getSiteAppSettingsAsync();
615+
602616
/**************************************************************
603617
* Fluent interfaces to provision a Web App or deployment slot.
604618
**************************************************************/

azure-mgmt-appservice/src/main/java/com/microsoft/azure/management/appservice/implementation/KuduClient.java

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,15 @@
88

99
import com.google.common.base.Joiner;
1010
import com.google.common.io.ByteStreams;
11+
import com.google.common.reflect.TypeToken;
12+
import com.microsoft.azure.AzureResponseBuilder;
1113
import com.microsoft.azure.management.appservice.DeployType;
1214
import com.microsoft.azure.management.appservice.WebAppBase;
15+
import com.microsoft.rest.RestClient;
1316
import com.microsoft.rest.RestException;
1417
import com.microsoft.rest.ServiceResponse;
18+
import com.microsoft.rest.ServiceResponseBuilder;
19+
import com.microsoft.rest.protocol.ResponseBuilder;
1520
import okhttp3.MediaType;
1621
import okhttp3.RequestBody;
1722
import okhttp3.ResponseBody;
@@ -35,13 +40,15 @@
3540
import java.io.IOException;
3641
import java.io.InputStream;
3742
import java.net.SocketTimeoutException;
43+
import java.util.Map;
3844
import java.util.Objects;
3945
import java.util.concurrent.TimeUnit;
4046

4147
/**
4248
* A client which interacts with Kudu service.
4349
*/
4450
class KuduClient {
51+
private final RestClient restClient;
4552
private final KuduService service;
4653

4754
KuduClient(WebAppBase webAppBase) {
@@ -53,11 +60,12 @@ class KuduClient {
5360
.replace("https://", "");
5461
String[] parts = host.split("\\.", 2);
5562
host = Joiner.on('.').join(parts[0], "scm", parts[1]);
56-
service = webAppBase.manager().restClient().newBuilder()
63+
restClient = webAppBase.manager().restClient().newBuilder()
5764
.withBaseUrl("https://" + host)
5865
.withConnectionTimeout(3, TimeUnit.MINUTES)
5966
.withReadTimeout(3, TimeUnit.MINUTES)
60-
.build()
67+
.build();
68+
service = restClient
6169
.retrofit().create(KuduService.class);
6270
}
6371

@@ -98,6 +106,10 @@ private interface KuduService {
98106
@Headers({ "Content-Type: application/octet-stream", "x-ms-logging-context: com.microsoft.azure.management.appservice.WebApps publish", "x-ms-body-logging: false" })
99107
@POST("api/publish")
100108
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();
101113
}
102114

103115
Observable<String> streamApplicationLogsAsync() {
@@ -204,6 +216,37 @@ Completable deployAsync(DeployType type, InputStream file, String path, Boolean
204216
}
205217
}
206218

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+
207250
private Observable<ServiceResponse<Void>> handleResponse(Observable<Response<ResponseBody>> observable) {
208251
return observable.flatMap(new Func1<Response<ResponseBody>, Observable<ServiceResponse<Void>>>() {
209252
@Override

azure-mgmt-appservice/src/main/java/com/microsoft/azure/management/appservice/implementation/WebAppBaseImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1785,6 +1785,14 @@ public WebAppDiagnosticLogsImpl<FluentT, FluentImplT> updateDiagnosticLogsConfig
17851785
return defineDiagnosticLogsConfiguration();
17861786
}
17871787

1788+
public Map<String, String> getSiteAppSettings() {
1789+
return getSiteAppSettingsAsync().toBlocking().single();
1790+
}
1791+
1792+
public Observable<Map<String, String>> getSiteAppSettingsAsync() {
1793+
return kuduClient.settings();
1794+
}
1795+
17881796
private static class PipedInputStreamWithCallback extends PipedInputStream {
17891797
private Action0 callback;
17901798

0 commit comments

Comments
 (0)