Directly invoke SO 86/140386/1 15.0.3
authorFiete Ostkamp <Fiete.Ostkamp@telekom.de>
Thu, 6 Mar 2025 09:58:31 +0000 (10:58 +0100)
committerFiete Ostkamp <Fiete.Ostkamp@telekom.de>
Thu, 6 Mar 2025 09:58:31 +0000 (10:58 +0100)
- adjust SO urls
- adjust SDC and SO clients to correctly work with tracing

Issue-ID: USECASEUI-884
Change-Id: Idf0e0319cba66cd976b16ff16f48a3988dc28d12
Signed-off-by: Fiete Ostkamp <Fiete.Ostkamp@telekom.de>
server/src/main/java/org/onap/usecaseui/server/config/SDCClientConfig.java
server/src/main/java/org/onap/usecaseui/server/config/SOClientConfig.java
server/src/main/java/org/onap/usecaseui/server/service/slicingdomain/so/SOSliceClient.java
server/src/test/java/org/onap/usecaseui/server/service/csmf/impl/SlicingServiceImplIntegrationTest.java
server/src/test/java/org/onap/usecaseui/server/service/nsmf/impl/ResourceMonitorServiceImplIntegrationTest.java

index 4efad68..32ce0fc 100644 (file)
@@ -20,10 +20,13 @@ import java.io.IOException;
 
 import org.onap.usecaseui.server.service.lcm.domain.sdc.SDCCatalogClient;
 import org.onap.usecaseui.server.service.lcm.domain.vfc.VfcClient;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.HttpHeaders;
 
+import io.micrometer.core.instrument.binder.okhttp3.OkHttpObservationInterceptor;
+import io.micrometer.observation.ObservationRegistry;
 import lombok.RequiredArgsConstructor;
 import okhttp3.Credentials;
 import okhttp3.Interceptor;
@@ -38,36 +41,41 @@ public class SDCClientConfig {
 
     private final SDCClientProperties clientProperties;
 
-    OkHttpClient okHttpClient() {
-        return new OkHttpClient().newBuilder().addInterceptor(new Interceptor() {
-            @Override
-            public okhttp3.Response intercept(Chain chain) throws IOException {
-                Request originalRequest = chain.request();
-                Request.Builder builder = originalRequest.newBuilder()
-                    .header("Authorization", Credentials.basic(clientProperties.getUsername(), clientProperties.getPassword()))
-                    .header(HttpHeaders.ACCEPT, "application/json")
-                    .header("X-ECOMP-InstanceID", "777");
-                Request newRequest = builder.build();
-                return chain.proceed(newRequest);
-            }
-        }).build();
+    @Bean("okHttpClientSDC")
+    OkHttpClient okHttpClient(ObservationRegistry observationRegistry) {
+        return new OkHttpClient().newBuilder()
+            .addInterceptor(
+                    OkHttpObservationInterceptor.builder(observationRegistry, "http.client.requests").build())
+            .addInterceptor(new Interceptor() {
+                @Override
+                public okhttp3.Response intercept(Chain chain) throws IOException {
+                    Request originalRequest = chain.request();
+                    Request.Builder builder = originalRequest.newBuilder()
+                        .header("Authorization", Credentials.basic(clientProperties.getUsername(), clientProperties.getPassword()))
+                        .header(HttpHeaders.ACCEPT, "application/json")
+                        .header("X-ECOMP-InstanceID", "777");
+                    Request newRequest = builder.build();
+                    return chain.proceed(newRequest);
+                }
+            }).build();
     }
 
-    Retrofit retrofit() {
+    @Bean("retrofitSDC")
+    Retrofit retrofit(@Qualifier("okHttpClientSDC") OkHttpClient okHttpClient) {
         return new Retrofit.Builder()
             .baseUrl(clientProperties.getBaseUrl())
             .addConverterFactory(JacksonConverterFactory.create())
-            .client(okHttpClient())
+            .client(okHttpClient)
             .build();
     }
 
     @Bean
-    SDCCatalogClient sdcCatalogClient() {
-        return retrofit().create(SDCCatalogClient.class);
+    SDCCatalogClient sdcCatalogClient(@Qualifier("retrofitSDC") Retrofit retrofit) {
+        return retrofit.create(SDCCatalogClient.class);
     }
 
     @Bean
-    VfcClient vfcClient() {
-        return retrofit().create(VfcClient.class);
+    VfcClient vfcClient(@Qualifier("retrofitSDC") Retrofit retrofit) {
+        return retrofit.create(VfcClient.class);
     }
 }
index 9f752b5..f9d3e0e 100644 (file)
@@ -22,11 +22,14 @@ import org.onap.usecaseui.server.service.intent.IntentSoClient;
 import org.onap.usecaseui.server.service.lcm.domain.so.SOClient;
 import org.onap.usecaseui.server.service.slicingdomain.kpi.KpiSliceClient;
 import org.onap.usecaseui.server.service.slicingdomain.so.SOSliceClient;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.HttpHeaders;
 
+import io.micrometer.core.instrument.binder.okhttp3.OkHttpObservationInterceptor;
+import io.micrometer.observation.ObservationRegistry;
 import okhttp3.Credentials;
 import okhttp3.Interceptor;
 import okhttp3.OkHttpClient;
@@ -44,48 +47,53 @@ public class SOClientConfig {
     @Value("${uui-server.client.so.password}")
     String password;
 
-    OkHttpClient okHttpClient() {
-        return new OkHttpClient().newBuilder().addInterceptor(new Interceptor() {
-            @Override
-            public okhttp3.Response intercept(Chain chain) throws IOException {
-                Request originalRequest = chain.request();
-                Request.Builder builder = originalRequest.newBuilder()
-                    .header("Authorization", Credentials.basic(username, password))
-                    .header(HttpHeaders.ACCEPT, "application/json")
-                    .header("X-TransactionId", "9999")
-                    .header("X-FromAppId", "onap-cli");
-                Request newRequest = builder.build();
-                return chain.proceed(newRequest);
-            }
-        }).build();
+    @Bean("okHttpClientSO")
+    OkHttpClient okHttpClient(ObservationRegistry observationRegistry) {
+        return new OkHttpClient().newBuilder()
+            .addInterceptor(
+                    OkHttpObservationInterceptor.builder(observationRegistry, "http.client.requests").build())
+            .addInterceptor(new Interceptor() {
+                @Override
+                public okhttp3.Response intercept(Chain chain) throws IOException {
+                    Request originalRequest = chain.request();
+                    Request.Builder builder = originalRequest.newBuilder()
+                        .header("Authorization", Credentials.basic(username, password))
+                        .header(HttpHeaders.ACCEPT, "application/json")
+                        .header("X-TransactionId", "9999")
+                        .header("X-FromAppId", "onap-cli");
+                    Request newRequest = builder.build();
+                    return chain.proceed(newRequest);
+                }
+            }).build();
     }
 
-    Retrofit retrofit() {
+    @Bean("retrofitSO")
+    Retrofit retrofitSo(@Qualifier("okHttpClientSO") OkHttpClient okHttpClient) {
         return new Retrofit.Builder()
             .baseUrl(baseUrl)
             .addConverterFactory(JacksonConverterFactory.create())
-            .client(okHttpClient())
+            .client(okHttpClient)
             .build();
     }
 
     @Bean
-    SOClient soClient() {
-        return retrofit().create(SOClient.class);
+    SOClient soClient(@Qualifier("retrofitSO") Retrofit retrofit) {
+        return retrofit.create(SOClient.class);
     }
 
     @Bean
-    SOSliceClient soSliceClient() {
-        return retrofit().create(SOSliceClient.class);
+    SOSliceClient soSliceClient(@Qualifier("retrofitSO") Retrofit retrofit) {
+        return retrofit.create(SOSliceClient.class);
     }
 
     @Bean
-    IntentSoClient intentSoClient() {
-        return retrofit().create(IntentSoClient.class);
+    IntentSoClient intentSoClient(@Qualifier("retrofitSO") Retrofit retrofit) {
+        return retrofit.create(IntentSoClient.class);
     }
 
     @Bean
     // not at all clear whether this service should interface with SO
-    KpiSliceClient kpiSliceClient() {
-        return retrofit().create(KpiSliceClient.class);
+    KpiSliceClient kpiSliceClient(@Qualifier("retrofitSO") Retrofit retrofit) {
+        return retrofit.create(KpiSliceClient.class);
     }
 }
index a175d75..de64266 100644 (file)
@@ -35,37 +35,39 @@ import retrofit2.http.Query;
 
 public interface SOSliceClient {
 
-       @GET("/api/so-serviceInstances/v3/{serviceId}/operations/{operationId}")
+       @GET("onap/so/infra/e2eServiceInstances/v3/{serviceId}/operations/{operationId}")
        Call<SOOperation> queryOperationProgress(@Path("serviceId") String serviceId,
                        @Path("operationId") String operationId);
 
-       @POST("/api/so-serviceInstances/v3/{serviceInstanceId}/activate")
+       @POST("onap/so/infra/serviceInstantiation/v3/serviceInstances/{serviceInstanceId}/activate")
        Call<ActivateService> activeService(@Path("serviceInstanceId") String serviceInstanceId, @Body RequestBody body);
 
-       @POST("/api/so-serviceInstances/v3/{serviceInstanceId}/deactivate")
+       @POST("onap/so/infra/serviceInstantiation/v3/serviceInstances/{serviceInstanceId}/deactivate")
        Call<ActivateService> deactiveService(@Path("serviceInstanceId") String serviceInstanceId, @Body RequestBody body);
 
-       @HTTP(method = "DELETE",path = "/api/so-serviceInstances/v3/{serviceInstanceId}",hasBody = true)
+       @HTTP(method = "DELETE",path = "onap/so/infra/serviceInstantiation/v3/serviceInstances/{serviceInstanceId}",hasBody = true)
        Call<ActivateService> terminateService(@Path("serviceInstanceId") String serviceInstanceId, @Body RequestBody body);
 
-       @GET("/api/so-orchestrationTasks/v4")
+       @GET("onap/so/infra/tasks/v4")
        Call<JSONArray> listTask();
 
-       @GET("/api/so-orchestrationTasks/v4")
+       @GET("onap/so/infra/tasks/v4")
        Call<JSONArray> listTaskByStage(@Query("status") String status );
 
-       @GET("/api/so-orchestrationTasks/v4/{taskId}")
+       @GET("onap/so/infra/tasks/v4/{taskId}")
        Call<SOTask> getTaskById(@Path("taskId") String taskId);
 
-       @GET("/api/so-orchestrationTasks/v4/{taskId}")
+       @GET("onap/so/infra/tasks/v4/{taskId}")
        Call<SOTask> getTaskByIdD(@Path("taskId") String taskId);
 
-       @PUT("/api/so-orchestrationTasks/v4/{taskId}")
+       @PUT("onap/so/infra/orchestrationTasks/v4/{taskId}")
        Call<ResponseBody> updateService(@Path("taskId") String taskId, @Body RequestBody body);
 
-       @POST("/api/so-orchestrationTasks/v4/{taskId}/commit")
+       @POST("onap/so/infra/orchestrationTasks/v4/{taskId}/commit")
        Call<ResponseBody> commitTask(@Path("taskId") String taskId);
 
-       @POST("/api/so-serviceInstances/v3")
+       // It's not quite clear if this should be
+       // infra/e2eServiceInstances/{version} or infra/orchestrationTasks/{version}
+       @POST("onap/so/infra/e2eServiceInstances/v3")
        Call<CreateResponse> submitOrders(@Body RequestBody body);
 }
index 4cda6cb..345c7ca 100644 (file)
@@ -121,7 +121,7 @@ public class SlicingServiceImplIntegrationTest {
         byte[] requestBytes = Files.readAllBytes(Paths.get("src/test/resources/__files/requests/submitOrdersRequest.json"));
         String expectedRequestBody = new String(requestBytes, StandardCharsets.UTF_8);
         stubFor(
-          post("/api/so-serviceInstances/v3")
+          post("/onap/so/infra/e2eServiceInstances/v3")
             .withBasicAuth(soUsername, soPassword)
             .withHeader(HttpHeaders.ACCEPT, equalTo("application/json"))
             .withHeader("X-TransactionId", equalTo("9999"))
index 701bc39..107884b 100644 (file)
@@ -19,13 +19,11 @@ package org.onap.usecaseui.server.service.nsmf.impl;
 
 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
 import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
-import static com.github.tomakehurst.wiremock.client.WireMock.get;
 import static com.github.tomakehurst.wiremock.client.WireMock.post;
 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-import java.util.Collections;
 import java.util.List;
 
 import org.junit.jupiter.api.Test;
@@ -34,19 +32,16 @@ import org.onap.usecaseui.server.bean.nsmf.monitor.ServiceInfo;
 import org.onap.usecaseui.server.bean.nsmf.monitor.ServiceList;
 import org.onap.usecaseui.server.bean.nsmf.monitor.ServiceOnlineUserInfo;
 import org.onap.usecaseui.server.bean.nsmf.monitor.ServiceOnlineUserList;
-import org.onap.usecaseui.server.config.AAIClientConfig;
 import org.onap.usecaseui.server.config.SOClientConfig;
-import org.onap.usecaseui.server.controller.lcm.CustomerController;
-import org.onap.usecaseui.server.service.lcm.CustomerService;
-import org.onap.usecaseui.server.service.lcm.domain.aai.bean.AAICustomer;
-import org.onap.usecaseui.server.service.lcm.impl.DefaultCustomerService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
 import org.springframework.http.HttpHeaders;
 import org.wiremock.spring.EnableWireMock;
 
+@EnableAutoConfiguration
 @EnableWireMock
 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = {
     SOClientConfig.class, ResourceMonitorServiceImpl.class, ResourceMonitorServiceConvert.class