aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIdan Amit <ia096e@intl.att.com>2018-10-09 18:45:52 +0300
committerMichael Lando <michael.lando@intl.att.com>2018-10-10 14:16:02 +0000
commit3504f84909d1ee1963931e63bed694a533a84cd3 (patch)
tree76c0d4a298aac90efee26a8a9b4a96137aec187f
parent1eda33de6c88b9c1d6259e74b50c55ab1bb9357a (diff)
Plugin load by the UI
Changed the original plugin API to only return the plugins list Changed the plugin Iframe to check if the plugin is online on every init Change-Id: I7916668de17c49a2639047ef243939889a933067 Issue-ID: SDC-1400 Signed-off-by: Idan Amit <ia096e@intl.att.com>
-rw-r--r--catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java33
-rw-r--r--catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/ConfigServlet.java77
-rw-r--r--catalog-fe/src/test/java/org/openecomp/sdc/fe/servlets/PluginStatusBLTest.java40
-rw-r--r--catalog-ui/configurations/dev.js1
-rw-r--r--catalog-ui/configurations/prod.js1
-rw-r--r--catalog-ui/src/app/models/app-config.ts1
-rw-r--r--catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.html4
-rw-r--r--catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts16
-rw-r--r--catalog-ui/src/app/ng2/services/plugins.service.ts23
-rw-r--r--common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java8
10 files changed, 140 insertions, 64 deletions
diff --git a/catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java b/catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java
index f4cbe9a70b..460d6deeee 100644
--- a/catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java
+++ b/catalog-fe/src/main/java/org/openecomp/sdc/fe/impl/PluginStatusBL.java
@@ -24,7 +24,6 @@ public class PluginStatusBL {
private final Gson gson;
private final CloseableHttpClient client;
private final PluginsConfiguration pluginsConfiguration;
- private Integer connectionTimeout;
private RequestConfig requestConfig;
public PluginStatusBL() {
@@ -41,7 +40,7 @@ public class PluginStatusBL {
}
- public String checkPluginsListAvailability() {
+ public String getPluginsList() {
String result = null;
if (pluginsConfiguration == null || pluginsConfiguration.getPluginsList() == null) {
@@ -50,20 +49,36 @@ public class PluginStatusBL {
} else {
log.debug("The value returned from getConfig is {}", pluginsConfiguration);
- connectionTimeout = pluginsConfiguration.getConnectionTimeout();
+
+ result = gson.toJson(pluginsConfiguration.getPluginsList());
+ }
+ return result;
+ }
+
+ public String getPluginAvailability(String pluginId) {
+ String result = null;
+
+ if (pluginsConfiguration == null || pluginsConfiguration.getPluginsList() == null) {
+ log.warn("Configuration of type {} was not found", PluginsConfiguration.class);
+ throw new InvalidArgumentException("the plugin configuration was not read successfully.");
+
+ } else {
+ log.debug("The value returned from getConfig is {}", pluginsConfiguration);
+ Integer connectionTimeout = pluginsConfiguration.getConnectionTimeout();
this.requestConfig = RequestConfig.custom()
.setSocketTimeout(connectionTimeout)
.setConnectTimeout(connectionTimeout)
.setConnectionRequestTimeout(connectionTimeout).build();
- List<Plugin> availablePluginsList = new ArrayList<>();
- pluginsConfiguration.getPluginsList().forEach(plugin -> {
- plugin.setOnline(checkPluginAvailability(plugin));
+ Plugin wantedPlugin = pluginsConfiguration.getPluginsList().stream()
+ .filter(plugin -> plugin.getPluginId().equals(pluginId))
+ .findAny()
+ .orElse(null);
- availablePluginsList.add(plugin);
- });
- result = gson.toJson(availablePluginsList);
+ if (wantedPlugin != null) {
+ result = gson.toJson(checkPluginAvailability(wantedPlugin));
+ }
}
return result;
}
diff --git a/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/ConfigServlet.java b/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/ConfigServlet.java
index 271a3b2d22..073c79e683 100644
--- a/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/ConfigServlet.java
+++ b/catalog-fe/src/main/java/org/openecomp/sdc/fe/servlets/ConfigServlet.java
@@ -7,9 +7,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -30,6 +30,7 @@ import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
@@ -42,42 +43,74 @@ import javax.ws.rs.core.Response.Status;
@Path("/config")
public class ConfigServlet extends LoggingServlet {
- private static final Logger log = LoggerFactory.getLogger(ConfigServlet.class.getName());
+ private static final Logger log = LoggerFactory.getLogger(ConfigServlet.class.getName());
- @GET
- @Path("/ui/plugins")
- @Produces(MediaType.APPLICATION_JSON)
- public Response getPluginsConfiguration(@Context final HttpServletRequest request) {
+ @GET
+ @Path("/ui/plugins")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getPluginsConfiguration(@Context final HttpServletRequest request) {
- try {
- logFeRequest(request);
+ try {
+ logFeRequest(request);
- ServletContext context = request.getSession().getServletContext();
+ ServletContext context = request.getSession().getServletContext();
- PluginStatusBL pluginStatusBL = (PluginStatusBL) context.getAttribute(Constants.PLUGIN_BL_COMPONENT);
+ PluginStatusBL pluginStatusBL = (PluginStatusBL) context.getAttribute(Constants.PLUGIN_BL_COMPONENT);
- String result = pluginStatusBL.checkPluginsListAvailability();
+ String result = pluginStatusBL.getPluginsList();
- Response response = Response.status(Status.OK).entity(result).build();
+ Response response = Response.status(Status.OK).entity(result).build();
- logFeResponse(request, response);
+ logFeResponse(request, response);
- return response;
- } catch (Exception e) {
- FeEcompErrorManager.getInstance().logFeHttpLoggingError("FE Response");
- log.error("Unexpected FE response logging error :", e);
- return Response.status(Status.INTERNAL_SERVER_ERROR).entity("{}").build();
- }
+ return response;
+ } catch (Exception e) {
+ FeEcompErrorManager.getInstance().logFeHttpLoggingError("FE Response");
+ log.error("Unexpected FE response logging error :", e);
+ return Response.status(Status.INTERNAL_SERVER_ERROR).entity("{}").build();
+ }
- }
+ }
+
+ @GET
+ @Path("/ui/plugins/{pluginId}/online")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getPluginOnlineState(@PathParam("pluginId") final String pluginId, @Context final HttpServletRequest request) {
+
+ try {
+ logFeRequest(request);
+
+ ServletContext context = request.getSession().getServletContext();
+
+ PluginStatusBL pluginStatusBL = (PluginStatusBL) context.getAttribute(Constants.PLUGIN_BL_COMPONENT);
+
+ String result = pluginStatusBL.getPluginAvailability(pluginId);
+
+ if (result == null) {
+ log.debug("Plugin with pluginId: {} was not found in the configuration", pluginId);
+ return Response.status(Status.NOT_FOUND).entity("Plugin with pluginId:\"" + pluginId + "\" was not found in the configuration").build();
+ }
+
+ Response response = Response.status(Status.OK).entity(result).build();
+
+ logFeResponse(request, response);
+
+ return response;
+ } catch (Exception e) {
+ FeEcompErrorManager.getInstance().logFeHttpLoggingError("FE Response");
+ log.error("Unexpected FE response logging error :", e);
+ return Response.status(Status.INTERNAL_SERVER_ERROR).entity("{}").build();
+ }
+ }
- protected void inHttpRequest(HttpServletRequest httpRequest) {
+ protected void inHttpRequest(HttpServletRequest httpRequest) {
log.info("{} {} {}", httpRequest.getMethod(), httpRequest.getRequestURI(), httpRequest.getProtocol());
}
/**
* Extracted for purpose of clear method name, for logback %M parameter
+ *
* @param response http response
*/
protected void outHttpResponse(Response response) {
diff --git a/catalog-fe/src/test/java/org/openecomp/sdc/fe/servlets/PluginStatusBLTest.java b/catalog-fe/src/test/java/org/openecomp/sdc/fe/servlets/PluginStatusBLTest.java
index e1d93b702d..731516e65b 100644
--- a/catalog-fe/src/test/java/org/openecomp/sdc/fe/servlets/PluginStatusBLTest.java
+++ b/catalog-fe/src/test/java/org/openecomp/sdc/fe/servlets/PluginStatusBLTest.java
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
@@ -63,24 +64,33 @@ public class PluginStatusBLTest {
}
@Test
- public void TestOfflinePluginBeingReturnedWithIsOnlineValueFalse() throws ClientProtocolException, IOException {
+ public void TestPluginsConfigurationListReturnsWithWantedPlugins() {
testPluginsList.add(offlinePlugin);
+ testPluginsList.add(onlinePlugin);
when(pluginsConfiguration.getPluginsList()).thenReturn(testPluginsList);
-
- when(statusLine.getStatusCode()).thenReturn(404);
- when(httpResponse.getStatusLine()).thenReturn(statusLine);
- when(httpClient.execute(Mockito.any(HttpHead.class))).thenReturn(httpResponse);
- offlinePlugin.setOnline(false);
assertPluginList.add(offlinePlugin);
+ assertPluginList.add(onlinePlugin);
String result = gson.toJson(assertPluginList);
- String actualResult = pluginStatusBL.checkPluginsListAvailability();
+ String actualResult = pluginStatusBL.getPluginsList();
- System.out.println(result);
- System.out.println(actualResult);
+ assertEquals(actualResult, result);
+ }
+
+ @Test
+ public void TestGetPluginAvailabilityShouldReturnFalseWhenPluginIsOffline() throws ClientProtocolException, IOException {
+ testPluginsList.add(offlinePlugin);
+ when(pluginsConfiguration.getPluginsList()).thenReturn(testPluginsList);
- assertTrue(pluginStatusBL.checkPluginsListAvailability().equals(result));
+ when(statusLine.getStatusCode()).thenReturn(404);
+ when(httpResponse.getStatusLine()).thenReturn(statusLine);
+ when(httpClient.execute(Mockito.any(HttpHead.class))).thenReturn(httpResponse);
+
+ String result = gson.toJson(false);
+ String actualResult = pluginStatusBL.getPluginAvailability(offlinePlugin.getPluginId());
+
+ assertEquals(actualResult, result);
}
@Test
@@ -92,13 +102,9 @@ public class PluginStatusBLTest {
when(httpResponse.getStatusLine()).thenReturn(statusLine);
when(httpClient.execute(Mockito.any())).thenReturn(httpResponse);
- onlinePlugin.setOnline(true);
- assertPluginList.add(onlinePlugin);
+ String result = gson.toJson(true);
+ String actualResult = pluginStatusBL.getPluginAvailability(onlinePlugin.getPluginId());
- String result = gson.toJson(assertPluginList);
-
- assertTrue(pluginStatusBL.checkPluginsListAvailability().equals(result));
-
+ assertEquals(actualResult, result);
}
-
}
diff --git a/catalog-ui/configurations/dev.js b/catalog-ui/configurations/dev.js
index 6ca5445ba4..d1c9fe7c69 100644
--- a/catalog-ui/configurations/dev.js
+++ b/catalog-ui/configurations/dev.js
@@ -27,6 +27,7 @@ const SDC_CONFIG = {
"GET_resource_api_artifact": "/v1/catalog/:type/:entityId/artifacts/api/:id",
"GET_configuration_ui": "/v1/configuration/ui",
"GET_plugins_configuration": "/config/ui/plugins",
+ "GET_plugin_online_state": "/config/ui/plugins/:pluginId/online",
"GET_resource_validate_name": "/v1/catalog/resources/validate-name/:name",
"GET_activity_log": "/v1/catalog/audit-records/:type/:id",
"GET_service": "/v1/catalog/services/:id",
diff --git a/catalog-ui/configurations/prod.js b/catalog-ui/configurations/prod.js
index 08fd20f8e5..2cd6860595 100644
--- a/catalog-ui/configurations/prod.js
+++ b/catalog-ui/configurations/prod.js
@@ -27,6 +27,7 @@ const SDC_CONFIG = {
"GET_resource_api_artifact": "/v1/catalog/:type/:entityId/artifacts/api/:id",
"GET_configuration_ui": "/v1/configuration/ui",
"GET_plugins_configuration": "/config/ui/plugins",
+ "GET_plugin_online_state": "/config/ui/plugins/:pluginId/online",
"GET_resource_validate_name": "/v1/catalog/resources/validate-name/:name",
"GET_activity_log": "/v1/catalog/audit-records/:type/:id",
"GET_service": "/v1/catalog/services/:id",
diff --git a/catalog-ui/src/app/models/app-config.ts b/catalog-ui/src/app/models/app-config.ts
index a0ebb54638..0e6284c669 100644
--- a/catalog-ui/src/app/models/app-config.ts
+++ b/catalog-ui/src/app/models/app-config.ts
@@ -54,6 +54,7 @@ export interface IApi {
GET_activity_log:string;
GET_configuration_ui:string;
GET_plugins_configuration:string;
+ GET_plugin_online_state:string;
GET_service:string;
GET_ecomp_menu_items:string;
GET_service_validate_name:string;
diff --git a/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.html b/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.html
index 54a5c2648c..cce1c40765 100644
--- a/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.html
+++ b/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.html
@@ -13,10 +13,10 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
-
+
<div class="plugin-frame">
<div class="w-sdc-main-container">
<iframe *ngIf="plugin.isOnline" class="plugin-iframe" [src]="pluginUrl | safeUrlSanitizer"></iframe>
- <plugin-not-connected [pluginName]="plugin.pluginId" *ngIf="!plugin.isOnline"></plugin-not-connected>
+ <plugin-not-connected [pluginName]="plugin.pluginId" *ngIf="!plugin.isOnline && isPluginCheckDone"></plugin-not-connected>
</div>
</div>
diff --git a/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts b/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts
index cd92cca2f7..067bb96d8e 100644
--- a/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts
+++ b/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts
@@ -2,6 +2,7 @@ import {Component, Inject, Input, Output, OnInit, EventEmitter} from "@angular/c
import {URLSearchParams} from '@angular/http';
import {Plugin} from "app/models";
import {EventBusService} from "../../../services/event-bus.service";
+import {PluginsService} from "../../../services/plugins.service";
@Component({
selector: 'plugin-frame',
@@ -17,17 +18,26 @@ export class PluginFrameComponent implements OnInit {
pluginUrl: string;
private urlSearchParams: URLSearchParams;
private isClosed: boolean;
+ private isPluginCheckDone: boolean;
constructor(private eventBusService: EventBusService,
+ private pluginsService: PluginsService,
@Inject('$scope') private $scope: ng.IScope,
@Inject('$state') private $state: ng.ui.IStateService) {
this.urlSearchParams = new URLSearchParams();
+ this.isPluginCheckDone = false;
}
ngOnInit(): void {
- if (this.plugin.isOnline) {
- this.initPlugin();
- }
+ this.pluginsService.isPluginOnline(this.plugin.pluginId).subscribe(isPluginOnline => {
+ this.plugin.isOnline = isPluginOnline;
+ this.isPluginCheckDone = true;
+
+ if (this.plugin.isOnline) {
+ this.initPlugin();
+ }
+ })
+
}
private initPlugin() {
diff --git a/catalog-ui/src/app/ng2/services/plugins.service.ts b/catalog-ui/src/app/ng2/services/plugins.service.ts
index 7a85b6e1b6..2a3b68fe25 100644
--- a/catalog-ui/src/app/ng2/services/plugins.service.ts
+++ b/catalog-ui/src/app/ng2/services/plugins.service.ts
@@ -1,10 +1,19 @@
-import { Injectable } from '@angular/core';
-import {Plugin, PluginsConfiguration} from "app/models";
+import { Injectable, Inject } from '@angular/core';
+import {Observable} from 'rxjs/Observable';
+import {Http, Response} from '@angular/http';
+import {IApi, IAppConfigurtaion, Plugin, Plugins, PluginsConfiguration} from "app/models";
+import {ISdcConfig, SdcConfigToken} from "../config/sdc-config.config";
@Injectable()
export class PluginsService {
- constructor() {
+ private baseUrl;
+ public configuration: IAppConfigurtaion;
+ public api: IApi;
+
+ constructor(private http: Http, @Inject(SdcConfigToken) private sdcConfig:ISdcConfig) {
+ this.api = this.sdcConfig.api;
+ this.baseUrl = this.api.root + this.sdcConfig.api.component_api_root;
}
public getPluginByStateUrl = (stateUrl: string) => {
@@ -20,4 +29,12 @@ export class PluginsService {
plugin.pluginDisplayOptions["context"].displayRoles.includes(userRole) &&
plugin.pluginDisplayOptions["context"].displayContext.indexOf(contextType) !== -1
};
+
+ public isPluginOnline = (pluginId: string): Observable<boolean> => {
+ let url:string = this.api.no_proxy_root + this.api.GET_plugin_online_state.replace(':pluginId', pluginId);
+ return this.http.get(url).map((res: Response) => {
+ return res.json()
+ })
+ .catch(error => Observable.of(false));
+ }
}
diff --git a/common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java b/common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java
index 55c7a11cf4..b3b57e3182 100644
--- a/common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java
+++ b/common-app-api/src/main/java/org/openecomp/sdc/fe/config/PluginsConfiguration.java
@@ -80,14 +80,6 @@ public class PluginsConfiguration extends BasicConfiguration {
this.pluginDisplayOptions = pluginDisplayOptions;
}
- public boolean isOnline() {
- return isOnline;
- }
-
- public void setOnline(boolean online) {
- isOnline = online;
- }
-
}
public static class PluginDisplayOptions {