Ravi Nori has uploaded a new change for review. Change subject: engine, webadmin: Webadmin read reports.xml from remote reports app ......................................................................
engine, webadmin: Webadmin read reports.xml from remote reports app in 3.5 report can be installed in separate server. Webadmin needs to be able to read reports.xml from that location via http. Change-Id: I76db7ab889f21de083bb3c8276e8abb77b68fdb3 Bug-Url: https://bugzilla.redhat.com/1116851 Signed-off-by: Ravi Nori <rn...@redhat.com> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java D backend/manager/modules/services/src/main/java/org/ovirt/engine/core/services/ReportsRedirectServlet.java M backend/manager/modules/services/src/main/webapp/WEB-INF/web.xml M backend/manager/modules/utils/exclude-filters.xml M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/RedirectServlet.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ReportInit.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ListWithDetailsAndReportsModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SearchableListWithReportsModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/reports/ReportModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/reports/ReportsListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/VmBaseListModel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabReportsPresenter.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabClusterView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDataCenterView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabStorageView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/form/PostableFrame.java M packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql M packaging/services/ovirt-engine/ovirt-engine.conf.in 28 files changed, 369 insertions(+), 189 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/36/32336/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java index 1fdd8b8..30e50fe 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java @@ -46,7 +46,6 @@ VcpuConsumptionPercentage(ConfigAuthType.User), SearchResultsLimit(ConfigAuthType.User), MaxBlockDiskSize(ConfigAuthType.User), - RedirectServletReportsPage(ConfigAuthType.User), EnableSpiceRootCertificateValidation(ConfigAuthType.User), VMMinMemorySizeInMB(ConfigAuthType.User), VM32BitMaxMemorySizeInMB(ConfigAuthType.User), diff --git a/backend/manager/modules/services/src/main/java/org/ovirt/engine/core/services/ReportsRedirectServlet.java b/backend/manager/modules/services/src/main/java/org/ovirt/engine/core/services/ReportsRedirectServlet.java deleted file mode 100644 index 2a37b71..0000000 --- a/backend/manager/modules/services/src/main/java/org/ovirt/engine/core/services/ReportsRedirectServlet.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.ovirt.engine.core.services; - -import java.io.IOException; -import java.io.PrintWriter; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang.StringUtils; -import org.ovirt.engine.core.common.config.Config; -import org.ovirt.engine.core.common.config.ConfigValues; - -/** - * The purpose of this servlet is to redirect requests to the home page of the - * reports application if it is installed or to show an error message to the - * user if it isn't. The location of the reports application is taken from the - * configuration option <code>RedirectServletPageReports</code>, if it is empty - * the servlet assumes that the reports application isn't installed. - */ -@SuppressWarnings("serial") -public class ReportsRedirectServlet extends HttpServlet { - - private void addAlert(PrintWriter out, String message) { - out.print("<html><body><script>alert(\"" + message + "\");window.history.back()</script></body></html>"); - } - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - String reportsUrl = Config.<String> getValue(ConfigValues.RedirectServletReportsPage); - if (StringUtils.isEmpty(reportsUrl)) { - addAlert(out, "The reports application isn't installed."); - } - else { - response.sendRedirect(reportsUrl); - } - } - -} diff --git a/backend/manager/modules/services/src/main/webapp/WEB-INF/web.xml b/backend/manager/modules/services/src/main/webapp/WEB-INF/web.xml index 8e3308b..7aad30f 100644 --- a/backend/manager/modules/services/src/main/webapp/WEB-INF/web.xml +++ b/backend/manager/modules/services/src/main/webapp/WEB-INF/web.xml @@ -56,33 +56,53 @@ </servlet-mapping> <servlet> - <servlet-name>reports-redirect</servlet-name> - <servlet-class>org.ovirt.engine.core.services.ReportsRedirectServlet</servlet-class> + <servlet-name>reports-redirect</servlet-name> + <servlet-class>org.ovirt.engine.core.utils.servlet.RedirectServlet</servlet-class> + <init-param> + <param-name>url</param-name> + <param-value>%{ENGINE_REPORTS_DASHBOARD_URL}</param-value> + </init-param> </servlet> <servlet-mapping> - <servlet-name>reports-redirect</servlet-name> - <url-pattern>/reports-redirect</url-pattern> + <servlet-name>reports-redirect</servlet-name> + <url-pattern>/reports-redirect</url-pattern> </servlet-mapping> <servlet> - <servlet-name>reports-ui</servlet-name> - <servlet-class>org.ovirt.engine.core.utils.servlet.FileServlet</servlet-class> + <servlet-name>reports-interface-proxy</servlet-name> + <servlet-class>org.ovirt.engine.core.services.ProxyServlet</servlet-class> <init-param> - <param-name>file</param-name> - <param-value>%{ENGINE_REPORTS_UI}</param-value> + <param-name>url</param-name> + <param-value>%{ENGINE_REPORTS_PROXY_URL}</param-value> </init-param> <init-param> - <param-name>required</param-name> - <param-value>false</param-value> + <param-name>trustStoreType</param-name> + <param-value>%{ENGINE_PKI_TRUST_STORE_TYPE}</param-value> </init-param> <init-param> - <param-name>cache</param-name> - <param-value>false</param-value> + <param-name>trustStore</param-name> + <param-value>%{ENGINE_PKI_TRUST_STORE}</param-value> + </init-param> + <init-param> + <param-name>trustStorePassword</param-name> + <param-value>%{ENGINE_PKI_TRUST_STORE_PASSWORD}</param-value> + </init-param> + <init-param> + <param-name>verifyHost</param-name> + <param-value>%{ENGINE_REPORTS_VERIFY_HOST}</param-value> + </init-param> + <init-param> + <param-name>verifyChain</param-name> + <param-value>%{ENGINE_REPORTS_VERIFY_CHAIN}</param-value> + </init-param> + <init-param> + <param-name>readTimeout</param-name> + <param-value>%{ENGINE_REPORTS_READ_TIMEOUT}</param-value> </init-param> </servlet> <servlet-mapping> - <servlet-name>reports-ui</servlet-name> - <url-pattern>/reports-ui</url-pattern> + <servlet-name>reports-interface-proxy</servlet-name> + <url-pattern>/reports-interface-proxy</url-pattern> </servlet-mapping> <servlet> diff --git a/backend/manager/modules/utils/exclude-filters.xml b/backend/manager/modules/utils/exclude-filters.xml index 6d35899..d33b698 100644 --- a/backend/manager/modules/utils/exclude-filters.xml +++ b/backend/manager/modules/utils/exclude-filters.xml @@ -24,4 +24,18 @@ <Class name="org.ovirt.engine.core.utils.log.Log" /> <Bug code="Nm"/> </Match> + + <!-- + findbugs complains that HTTP parameter is directly written to + HTTP header output. This servlet is used from frontend and url + is already encode, so the warning is not relevant. + + findbugs reason: + HRS: HTTP parameter directly written to HTTP header output (HRS_REQUEST_PARAMETER_TO_HTTP_HEADER) + --> + <Match> + <Class name="org.ovirt.engine.core.utils.servlet.RedirectServlet" /> + <Bug code="HRS"/> + </Match> + </FindBugsFilter> diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/RedirectServlet.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/RedirectServlet.java index 4806bb0..51285b1 100644 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/RedirectServlet.java +++ b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/RedirectServlet.java @@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.utils.EngineLocalConfig; /** @@ -39,6 +40,16 @@ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - response.sendRedirect(url); + String redirectUrl = url; + String queryString = request.getQueryString(); + if (StringUtils.isNotEmpty(queryString)) { + if (redirectUrl.indexOf("?") == -1) { + redirectUrl += "?"; + } else { + redirectUrl += "&"; + } + redirectUrl += queryString; + } + response.sendRedirect(redirectUrl); } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java index bb10642..43948e0 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java @@ -7,6 +7,7 @@ import org.ovirt.engine.ui.common.auth.SSOTokenData; import org.ovirt.engine.ui.common.uicommon.FrontendEventsHandlerImpl; import org.ovirt.engine.ui.common.uicommon.FrontendFailureEventListener; +import org.ovirt.engine.ui.common.uicommon.model.CommonModelManager; import org.ovirt.engine.ui.frontend.AsyncQuery; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.frontend.INewAsyncCallback; @@ -143,6 +144,12 @@ loginModel.getPassword().setEntity(null); } + protected void updateReportsAvailability() { + if (CommonModelManager.instance() != null) { + CommonModelManager.instance().updateReportsAvailability(); + } + } + /** * <p> * Invoked right after the user has logged in successfully on backend, before proceeding with UI login sequence. diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ReportInit.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ReportInit.java index 5872ce6..2aedd56 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ReportInit.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ReportInit.java @@ -3,12 +3,10 @@ import java.util.HashMap; import java.util.Map; -import org.ovirt.engine.ui.frontend.AsyncQuery; -import org.ovirt.engine.ui.frontend.INewAsyncCallback; +import com.google.gwt.core.client.Scheduler; import org.ovirt.engine.ui.frontend.communication.SSOTokenChangeEvent; import org.ovirt.engine.ui.frontend.communication.SSOTokenChangeEvent.SSOTokenChangeHandler; import org.ovirt.engine.ui.frontend.utils.BaseContextPathData; -import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.ReportParser; import org.ovirt.engine.ui.uicompat.ReportParser.Dashboard; @@ -26,9 +24,17 @@ public class ReportInit { private static final ReportInit INSTANCE = new ReportInit(); + private static final int MAX_RETRY_COUNTS = 20; + private static final int RETRY_INTERVAL = 30000; + public static final String REDIRECT_SERVICE = "services/reports-redirect"; //$NON-NLS-1$ + public static final String STATUS_SERVICE = "services/reports-interface-proxy?command=status"; //$NON-NLS-1$ + public static final String XML_SERVICE = "services/reports-interface-proxy?command=webadmin-ui-xml"; //$NON-NLS-1$ + private int retryCount; + private boolean reportsWebappDeployed; + private boolean scheduledStatusCheckInProgress; private boolean reportsEnabled; private boolean xmlInitialized; - private boolean urlInitialized; + private boolean initEventRaised; private Event reportsInitEvent; private String reportBaseUrl; private String ssoToken; @@ -52,26 +58,22 @@ // As this class has it's state, it needs to be inited again initState(); - AsyncDataProvider.getRedirectServletReportsPage(new AsyncQuery(this, - new INewAsyncCallback() { - @Override - public void onSuccess(Object target, Object returnValue) { - setReportBaseUrl((String) returnValue); - } - })); - + setReportBaseUrl(buildUrl(REDIRECT_SERVICE)); parseReportsXML(); } private void initState() { reportsEnabled = false; xmlInitialized = false; - urlInitialized = false; + reportsWebappDeployed = false; + scheduledStatusCheckInProgress = false; + initEventRaised = false; reportBaseUrl = ""; //$NON-NLS-1$ isCommunityEdition = false; resourceMap = new HashMap<String, Resource>(); dashboardMap = new HashMap<String, Dashboard>(); reportsInitEvent = new Event("ReportsInitialize", ReportInit.class); //$NON-NLS-1$ + retryCount = 0; } private ReportInit() { @@ -89,34 +91,84 @@ return dashboardMap.get(type); } - private void parseReportsXML() { + public static RequestBuilder constructServiceRequestBuilder(String service) { + return new RequestBuilder(RequestBuilder.GET, buildUrl(service)); + } - RequestBuilder requestBuilder = - new RequestBuilder(RequestBuilder.GET, - "/" //$NON-NLS-1$ - + BaseContextPathData.getInstance().getRelativePath() - + "services/reports-ui"); //$NON-NLS-1$ + private static String buildUrl(String service) { + return "/" //$NON-NLS-1$ + + BaseContextPathData.getInstance().getRelativePath() + + service; + } + + private void scheduleCheckStatus() { + if (scheduledStatusCheckInProgress || retryCount > MAX_RETRY_COUNTS || reportsWebappDeployed) { + return; + } + scheduledStatusCheckInProgress = true; + Scheduler.get().scheduleFixedDelay( + new Scheduler.RepeatingCommand() { + @Override + public boolean execute() { + if (retryCount > MAX_RETRY_COUNTS || reportsWebappDeployed) { + scheduledStatusCheckInProgress = false; + return false; + } + retryCount++; + checkReportsWebAppStatus(); + return true; + } + }, + RETRY_INTERVAL); + } + + private void checkReportsWebAppStatus() { try { - requestBuilder.sendRequest(null, new RequestCallback() { + constructServiceRequestBuilder(STATUS_SERVICE).sendRequest(null, new RequestCallback() { @Override public void onError(Request request, Throwable exception) { + // ignore error + } + + @Override + public void onResponseReceived(Request request, Response response) { + if (response.getStatusCode() == Response.SC_OK) { + reportsWebappDeployed = true; + parseReportsXML(); + } + } + }); + } catch (RequestException e) { + // ignore error + } + } + + private void parseReportsXML() { + try { + constructServiceRequestBuilder(XML_SERVICE).sendRequest(null, new RequestCallback() { + @Override + public void onError(Request request, Throwable exception) { + scheduleCheckStatus(); setXmlInitialized(); } @Override public void onResponseReceived(Request request, Response response) { - try { - if (response.getStatusCode() == Response.SC_OK - && ReportParser.getInstance().parseReport(response.getText())) { - resourceMap = ReportParser.getInstance().getResourceMap(); - dashboardMap = ReportParser.getInstance().getDashboardMap(); - isCommunityEdition = ReportParser.getInstance().isCommunityEdition(); + if (response.getStatusCode() == Response.SC_OK) { + try { + if (ReportParser.getInstance().parseReport(response.getText())) { + resourceMap = ReportParser.getInstance().getResourceMap(); + dashboardMap = ReportParser.getInstance().getDashboardMap(); + isCommunityEdition = ReportParser.getInstance().isCommunityEdition(); + } + } catch (DOMParseException e) { + } finally { + setXmlInitialized(); } - } catch (DOMParseException e) { - } finally { + } else { + scheduleCheckStatus(); setXmlInitialized(); } - } }); } catch (RequestException e) { @@ -133,8 +185,9 @@ } public void setReportBaseUrl(String reportBaseUrl) { - this.reportBaseUrl = reportBaseUrl; - this.urlInitialized = true; + if (reportBaseUrl != null) { + this.reportBaseUrl = reportBaseUrl; + } checkIfInitFinished(); } @@ -157,7 +210,7 @@ } private void checkIfInitFinished() { - if (xmlInitialized && urlInitialized && ssoToken != null) { + if (xmlInitialized && ssoToken != null) { // Check if the reports should be enabled in this system if (!"".equals(reportBaseUrl) && !resourceMap.isEmpty() && !"".equals(ssoToken)) { //$NON-NLS-1$ $NON-NLS-2$ @@ -166,8 +219,10 @@ setReportsEnabled(false); } - // The initialization process blocks on this event after the login - reportsInitEvent.raise(this, null); + if (isReportsEnabled() && !initEventRaised) { + reportsInitEvent.raise(this, null); + initEventRaised = true; + } } } @@ -177,18 +232,18 @@ } // Register to listen for session id acquired events. ssoTokenHandlerRegistration = eventBus.addHandler(SSOTokenChangeEvent.getType(), - new SSOTokenChangeHandler() { + new SSOTokenChangeHandler() { - @Override - public void onSSOTokenChange(SSOTokenChangeEvent event) { - ReportInit.this.ssoToken = event.getToken(); - if (ReportInit.this.ssoToken == null) { //This should not happen - //This will make the login continue, just the reports will be broken. - ReportInit.this.ssoToken = ""; + @Override + public void onSSOTokenChange(SSOTokenChangeEvent event) { + ReportInit.this.ssoToken = event.getToken(); + if (ReportInit.this.ssoToken == null) { //This should not happen + //This will make the login continue, just the reports will be broken. + ReportInit.this.ssoToken = ""; + } + checkIfInitFinished(); } - checkIfInitFinished(); } - } ); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java index d4366fc..044e180 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java @@ -2506,20 +2506,6 @@ Frontend.getInstance().runQuery(VdcQueryType.GetConnectionsByDataCenterAndStorageType, params, aQuery); } - public static void getRedirectServletReportsPage(AsyncQuery aQuery) { - aQuery.converterCallback = new IAsyncConverter() { - @Override - public Object Convert(Object source, AsyncQuery _asyncQuery) - { - return source != null ? (String) source : ""; //$NON-NLS-1$ - } - }; - getConfigFromCache( - new GetConfigurationValueParameters(ConfigurationValues.RedirectServletReportsPage, - getDefaultConfigurationVersion()), - aQuery); - } - private static HashMap<VdcActionType, CommandVersionsInfo> cachedCommandsCompatibilityVersions; public static void isCommandCompatible(AsyncQuery aQuery, final VdcActionType vdcActionType, diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java index 6f3e13c..a58d0dd 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java @@ -84,11 +84,11 @@ private InstanceTypeListModel instanceTypeListModel; // NOTE: when adding a new ListModel here, be sure to add it to the list in initItems() - private SearchableListModel dataCenterList; + private ListWithDetailsAndReportsModel dataCenterList; private ClusterListModel clusterList; - private SearchableListModel hostList; + private ListWithDetailsAndReportsModel hostList; private StorageListModel storageList; - private SearchableListModel vmList; + private ListWithDetailsAndReportsModel vmList; private SearchableListModel poolList; private SearchableListModel templateList; private SearchableListModel userList; @@ -349,6 +349,22 @@ } } + public void updateReportsAvailability() { + updateReportsAvailability(getSystemTree().getSelectedItem() == null ? + SystemTreeItemType.System : + getSystemTree().getSelectedItem().getType()); + dataCenterList.updateReportsAvailability(); + clusterList.updateReportsAvailability(); + hostList.updateReportsAvailability(); + storageList.updateReportsAvailability(); + vmList.updateReportsAvailability(); + } + + private void updateReportsAvailability(SystemTreeItemType type) { + reportsList.setIsAvailable(ReportInit.getInstance().isReportsEnabled() + && ReportInit.getInstance().getDashboard(type.toString()) != null); + } + private void updateAvailability(SystemTreeItemType type, Object entity) { // Update items availability depending on system tree selection @@ -432,8 +448,7 @@ || type == SystemTreeItemType.Storage || type == SystemTreeItemType.System || type == SystemTreeItemType.Volume); - reportsList.setIsAvailable(ReportInit.getInstance().isReportsEnabled() - && ReportInit.getInstance().getDashboard(type.toString()) != null); + updateReportsAvailability(type); networkList.setIsAvailable(type == SystemTreeItemType.Network || type == SystemTreeItemType.Networks diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ListWithDetailsAndReportsModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ListWithDetailsAndReportsModel.java new file mode 100644 index 0000000..0483ae1 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ListWithDetailsAndReportsModel.java @@ -0,0 +1,18 @@ +package org.ovirt.engine.ui.uicommonweb.models; + +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.EventDefinition; + +public abstract class ListWithDetailsAndReportsModel extends ListWithDetailsModel { + private final Event reportsAvailabilityEvent = new Event(new EventDefinition("ReportsAvailabilityEvent", //$NON-NLS-1$ + ListWithDetailsAndReportsModel.class)); + + public Event getReportsAvailabilityEvent() { + return reportsAvailabilityEvent; + } + + public void updateReportsAvailability() { + reportsAvailabilityEvent.raise(this, EventArgs.EMPTY); + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SearchableListWithReportsModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SearchableListWithReportsModel.java new file mode 100644 index 0000000..cf6b188 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SearchableListWithReportsModel.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.ui.uicommonweb.models; + +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.EventDefinition; + +public abstract class SearchableListWithReportsModel<T> extends SearchableListModel<T> { + + private final Event reportsAvailabilityEvent = new Event(new EventDefinition("ReportsAvailabilityEvent", //$NON-NLS-1$ + SearchableListWithReportsModel.class)); + + public Event getReportsAvailabilityEvent() { + return reportsAvailabilityEvent; + } + + public void updateReportsAvailability() { + reportsAvailabilityEvent.raise(this, EventArgs.EMPTY); + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java index 62d1c9d..896d92e6 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java @@ -39,7 +39,7 @@ import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ISupportSystemTreeContext; -import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel; +import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsAndReportsModel; import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel; import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemType; import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel; @@ -59,7 +59,7 @@ import org.ovirt.engine.ui.uicompat.UIConstants; @SuppressWarnings("unused") -public class ClusterListModel extends ListWithDetailsModel implements ISupportSystemTreeContext +public class ClusterListModel extends ListWithDetailsAndReportsModel implements ISupportSystemTreeContext { private UICommand privateNewCommand; diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java index 0927c53..6095333 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java @@ -44,7 +44,7 @@ import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ISupportSystemTreeContext; -import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel; +import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsAndReportsModel; import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel; import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemType; import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel; @@ -61,7 +61,7 @@ import org.ovirt.engine.ui.uicompat.UIConstants; @SuppressWarnings("unused") -public class DataCenterListModel extends ListWithDetailsModel implements ISupportSystemTreeContext +public class DataCenterListModel extends ListWithDetailsAndReportsModel implements ISupportSystemTreeContext { private UICommand privateNewCommand; diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java index 9d6fc79..79862b8 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java @@ -69,7 +69,7 @@ import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ISupportSystemTreeContext; import org.ovirt.engine.ui.uicommonweb.models.ListModel; -import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel; +import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsAndReportsModel; import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel; import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemType; import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel; @@ -94,7 +94,7 @@ import org.ovirt.engine.ui.uicompat.UIMessages; @SuppressWarnings("unused") -public class HostListModel extends ListWithDetailsModel implements ISupportSystemTreeContext +public class HostListModel extends ListWithDetailsAndReportsModel implements ISupportSystemTreeContext { private HostGeneralModel generalModel; diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/reports/ReportModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/reports/ReportModel.java index 4364397..422140c 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/reports/ReportModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/reports/ReportModel.java @@ -16,7 +16,7 @@ public ReportModel(String baseUrl, String ssoToken) { - reportUrl = baseUrl + "/flow.html" + "?viewAsDashboardFrame=false"; //$NON-NLS-1$ //$NON-NLS-2$ + reportUrl = baseUrl; paramsMap.setParameter("sessionID", ssoToken); //$NON-NLS-1$ paramsMap.setParameter("_flowId", "viewReportFlow"); //$NON-NLS-1$ //$NON-NLS-2$ paramsMap.setParameter("active_hosts_select", //$NON-NLS-1$ diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/reports/ReportsListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/reports/ReportsListModel.java index 0111196..d6bbb7d 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/reports/ReportsListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/reports/ReportsListModel.java @@ -13,30 +13,22 @@ import org.ovirt.engine.ui.uicommonweb.HtmlParameters; import org.ovirt.engine.ui.uicommonweb.ReportInit; import org.ovirt.engine.ui.uicommonweb.models.CommonModel; -import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; +import org.ovirt.engine.ui.uicommonweb.models.SearchableListWithReportsModel; import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel; -import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; -import org.ovirt.engine.ui.uicompat.EventDefinition; import org.ovirt.engine.ui.uicompat.ReportParser.Dashboard; import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.LocaleInfo; -public class ReportsListModel extends SearchableListModel { +public class ReportsListModel extends SearchableListWithReportsModel { HtmlParameters htmlParams = new HtmlParameters(); private String lastResourceId = ""; //$NON-NLS-1$ private final String reportUrl; - private final Event reportModelRefreshEvent = new Event(new EventDefinition("ReportModelRefreshed", //$NON-NLS-1$ - ReportsListModel.class)); - - public Event getReportModelRefreshEvent() { - return reportModelRefreshEvent; - } public ReportsListModel(String baseUrl, String ssoToken) { - reportUrl = baseUrl + "/flow.html" + "?viewAsDashboardFrame=true"; //$NON-NLS-1$ //$NON-NLS-2$ + reportUrl = baseUrl; htmlParams.setParameter("sessionID", ssoToken); //$NON-NLS-1$ setFlowId(); @@ -189,7 +181,7 @@ } GWT.log("Tree Item changed: " + title); //$NON-NLS-1$ - reportModelRefreshEvent.raise(this, EventArgs.EMPTY); + getReportsAvailabilityEvent().raise(this, EventArgs.EMPTY); } @Override diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java index 01a5aa2..b33bb63 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java @@ -45,7 +45,7 @@ import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ISupportSystemTreeContext; import org.ovirt.engine.ui.uicommonweb.models.ListModel; -import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel; +import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsAndReportsModel; import org.ovirt.engine.ui.uicommonweb.models.Model; import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel; import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemType; @@ -72,7 +72,7 @@ import org.ovirt.engine.ui.uicompat.UIConstants; @SuppressWarnings("unused") -public class StorageListModel extends ListWithDetailsModel implements ITaskTarget, ISupportSystemTreeContext +public class StorageListModel extends ListWithDetailsAndReportsModel implements ITaskTarget, ISupportSystemTreeContext { private UICommand privateNewDomainCommand; diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/VmBaseListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/VmBaseListModel.java index 0f9dbdb..cc5a352 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/VmBaseListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/VmBaseListModel.java @@ -18,12 +18,12 @@ import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; -import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel; +import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsAndReportsModel; import org.ovirt.engine.ui.uicommonweb.models.vms.ExportVmModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.external.StringUtils; -public abstract class VmBaseListModel<T> extends ListWithDetailsModel { +public abstract class VmBaseListModel<T> extends ListWithDetailsAndReportsModel { protected void export(String title) { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabReportsPresenter.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabReportsPresenter.java index 882ffc6..e1add28 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabReportsPresenter.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabReportsPresenter.java @@ -14,6 +14,7 @@ import org.ovirt.engine.ui.common.widget.tab.ModelBoundTabData; import org.ovirt.engine.ui.common.widget.table.ActionTable; import org.ovirt.engine.ui.uicommonweb.ErrorPopupManager; +import org.ovirt.engine.ui.uicommonweb.ReportInit; import org.ovirt.engine.ui.uicommonweb.models.reports.ReportsListModel; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; @@ -36,7 +37,6 @@ public class MainTabReportsPresenter extends AbstractMainTabPresenter<Void, ReportsListModel, MainTabReportsPresenter.ViewDef, MainTabReportsPresenter.ProxyDef> { - private static final String REPORTS_WEBAPP_DEPLOYED_MSG = "Reports Webapp Deployed"; //$NON-NLS-1$ private static boolean reportsWebappDeployed = false; private final ErrorPopupManager errorPopupManager; private final ApplicationConstants applicationConstants; @@ -65,13 +65,12 @@ super(eventBus, view, proxy, placeManager, modelProvider); this.errorPopupManager = errorPopupManager; this.applicationConstants = applicationConstants; - getModel().getReportModelRefreshEvent().addListener(new ReportsModelRefreshEvent()); + getModel().getReportsAvailabilityEvent().addListener(new ReportsModelRefreshEvent()); } private void checkUpdateReportsPanel(final String url, final Map<String, List<String>> params) { - RequestBuilder requestBuilder = - new RequestBuilder(RequestBuilder.GET, buildStatusUrl(url)); //$NON-NLS-1$ + RequestBuilder requestBuilder = ReportInit.constructServiceRequestBuilder(ReportInit.STATUS_SERVICE); try { requestBuilder.setTimeoutMillis(1000); requestBuilder.sendRequest(null, new RequestCallback() { @@ -82,8 +81,7 @@ @Override public void onResponseReceived(Request request, Response response) { - if (response.getStatusCode() == Response.SC_OK - && response.getText().trim().equals(REPORTS_WEBAPP_DEPLOYED_MSG)) { + if (response.getStatusCode() == Response.SC_OK) { reportsWebappDeployed = true; getView().updateReportsPanel(url, params); } else { @@ -96,11 +94,6 @@ } } - private String buildStatusUrl(String url) { - int index = url.lastIndexOf("/"); //$NON-NLS-1$ - return url.substring(0, index+1) + "Status"; //$NON-NLS-1$ - } - @Override protected ActionTable<?> getTable() { // Reports main tab view has no table widget associated @@ -108,18 +101,24 @@ } @Override + protected void onReveal() { + super.onReveal(); + getModel().updateReportsAvailability(); + } + + @Override protected void onReset() { super.onReset(); if (!hasReportsModelRefreshEvent()) { reportsWebappDeployed = false; - getModel().getReportModelRefreshEvent().addListener(new ReportsModelRefreshEvent()); + getModel().getReportsAvailabilityEvent().addListener(new ReportsModelRefreshEvent()); } setSubTabPanelVisible(false); getModel().refreshReportModel(); } private boolean hasReportsModelRefreshEvent() { - for (IEventListener listnr : getModel().getReportModelRefreshEvent().getListeners()) { + for (IEventListener listnr : (List<IEventListener>) getModel().getReportsAvailabilityEvent().getListeners()) { if (listnr instanceof ReportsModelRefreshEvent) { return true; } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabClusterView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabClusterView.java index 1d3677f..7590c89 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabClusterView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabClusterView.java @@ -13,6 +13,9 @@ import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.ApplicationModeHelper; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabClusterPresenter; @@ -42,7 +45,7 @@ initWidget(getTable()); } - void initTable(ApplicationResources resources, ApplicationConstants constants) { + void initTable(final ApplicationResources resources, final ApplicationConstants constants) { getTable().enableColumnResizing(); TextColumnWithTooltip<VDSGroup> nameColumn = new TextColumnWithTooltip<VDSGroup>() { @@ -138,12 +141,14 @@ }); if (ReportInit.getInstance().isReportsEnabled()) { - List<ActionButtonDefinition<VDSGroup>> resourceSubActions = - ReportActionsHelper.getInstance().getResourceSubActions("Cluster", getModelProvider()); //$NON-NLS-1$ - if (resourceSubActions != null && resourceSubActions.size() > 0) { - getTable().addActionButton(new WebAdminMenuBarButtonDefinition<VDSGroup>(constants.showReportCluster(), - resourceSubActions)); - } + updateReportsAvailability(constants); + } else { + getMainModel().getReportsAvailabilityEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + updateReportsAvailability(constants); + } + }); } getTable().addActionButton(new WebAdminImageButtonDefinition<VDSGroup>(constants.guideMeCluster(), @@ -154,4 +159,17 @@ } }); } + + public void updateReportsAvailability(ApplicationConstants constants) { + + if (ReportInit.getInstance().isReportsEnabled()) { + List<ActionButtonDefinition<VDSGroup>> resourceSubActions = + ReportActionsHelper.getInstance().getResourceSubActions("Cluster", getModelProvider()); //$NON-NLS-1$ + if (resourceSubActions != null && resourceSubActions.size() > 0) { + getTable().addActionButton(new WebAdminMenuBarButtonDefinition<VDSGroup>(constants.showReportCluster(), + resourceSubActions)); + } + } + + } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDataCenterView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDataCenterView.java index 90ed852..cd9eef0 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDataCenterView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDataCenterView.java @@ -15,6 +15,9 @@ import org.ovirt.engine.ui.uicommonweb.ReportInit; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.datacenters.DataCenterListModel; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabDataCenterPresenter; @@ -44,7 +47,7 @@ initWidget(getTable()); } - void initTable(ApplicationResources resources, ApplicationConstants constants) { + void initTable(final ApplicationResources resources, final ApplicationConstants constants) { getTable().enableColumnResizing(); getTable().addColumn(new DcStatusColumn(), constants.empty(), "30px"); //$NON-NLS-1$ @@ -125,12 +128,14 @@ }); if (ReportInit.getInstance().isReportsEnabled()) { - List<ActionButtonDefinition<StoragePool>> resourceSubActions = - ReportActionsHelper.getInstance().getResourceSubActions("DataCenter", getModelProvider()); //$NON-NLS-1$ - if (resourceSubActions != null && resourceSubActions.size() > 0) { - getTable().addActionButton(new WebAdminMenuBarButtonDefinition<StoragePool>(constants.showReportDC(), - resourceSubActions)); - } + updateReportsAvailability(constants); + } else { + getMainModel().getReportsAvailabilityEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + updateReportsAvailability(constants); + } + }); } getTable().addActionButton(new WebAdminImageButtonDefinition<StoragePool>(constants.guideMeDc(), @@ -148,4 +153,15 @@ } }); } + + private void updateReportsAvailability(ApplicationConstants constants) { + if (ReportInit.getInstance().isReportsEnabled()) { + List<ActionButtonDefinition<StoragePool>> resourceSubActions = + ReportActionsHelper.getInstance().getResourceSubActions("DataCenter", getModelProvider()); //$NON-NLS-1$ + if (resourceSubActions != null && resourceSubActions.size() > 0) { + getTable().addActionButton(new WebAdminMenuBarButtonDefinition<StoragePool>(constants.showReportDC(), + resourceSubActions)); + } + } + } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java index 1c0e4c1..cebae83 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java @@ -22,6 +22,9 @@ import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.ApplicationModeHelper; import org.ovirt.engine.ui.uicommonweb.models.hosts.HostListModel; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabHostPresenter; import org.ovirt.engine.ui.webadmin.section.main.view.AbstractMainTabWithDetailsTableView; @@ -313,11 +316,14 @@ }); if (ReportInit.getInstance().isReportsEnabled()) { - List<ActionButtonDefinition<VDS>> resourceSubActions = - ReportActionsHelper.getInstance().getResourceSubActions("Host", getModelProvider()); //$NON-NLS-1$ - if (resourceSubActions != null && resourceSubActions.size() > 0) { - getTable().addActionButton(new WebAdminMenuBarButtonDefinition<VDS>(constants.showReportHost(), resourceSubActions)); - } + updateReportsAvailability(); + } else { + getMainModel().getReportsAvailabilityEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + updateReportsAvailability(); + } + }); } getTable().addActionButton(new WebAdminButtonDefinition<VDS>(constants.refreshHostCapabilities()) { @@ -328,6 +334,16 @@ }); } + private void updateReportsAvailability() { + if (ReportInit.getInstance().isReportsEnabled()) { + List<ActionButtonDefinition<VDS>> resourceSubActions = + ReportActionsHelper.getInstance().getResourceSubActions("Host", getModelProvider()); //$NON-NLS-1$ + if (resourceSubActions != null && resourceSubActions.size() > 0) { + getTable().addActionButton(new WebAdminMenuBarButtonDefinition<VDS>(constants.showReportHost(), resourceSubActions)); + } + } + } + @Override public SimpleActionTable<VDS> getTable() { return super.getTable(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabStorageView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabStorageView.java index 8e65f7a..8b8fde4 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabStorageView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabStorageView.java @@ -18,6 +18,9 @@ import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageListModel; import org.ovirt.engine.ui.uicompat.EnumTranslator; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabStoragePresenter; import org.ovirt.engine.ui.webadmin.section.main.view.AbstractMainTabWithDetailsTableView; @@ -45,7 +48,7 @@ initWidget(getTable()); } - void initTable(ApplicationConstants constants) { + void initTable(final ApplicationConstants constants) { getTable().enableColumnResizing(); getTable().addColumn(new StorageDomainSharedStatusColumn(), constants.empty(), "30px"); //$NON-NLS-1$ @@ -161,6 +164,19 @@ } }); if (ReportInit.getInstance().isReportsEnabled()) { + updateReportsAvailability(constants); + } else { + getMainModel().getReportsAvailabilityEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + updateReportsAvailability(constants); + } + }); + } + } + + private void updateReportsAvailability(ApplicationConstants constants) { + if (ReportInit.getInstance().isReportsEnabled()) { List<ActionButtonDefinition<StorageDomain>> resourceSubActions = ReportActionsHelper.getInstance().getResourceSubActions("Storage", getModelProvider()); //$NON-NLS-1$ if (resourceSubActions != null && resourceSubActions.size() > 0) { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java index 925fd6e..43d0c42 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java @@ -22,6 +22,9 @@ import org.ovirt.engine.ui.uicommonweb.ReportInit; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.vms.VmListModel; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabVirtualMachinePresenter; @@ -63,7 +66,7 @@ initWidget(getTable()); } - void initTable(ApplicationResources resources, ApplicationConstants constants) { + void initTable(final ApplicationResources resources, final ApplicationConstants constants) { getTable().enableColumnResizing(); VmStatusColumn<VM> vmStatusColumn = new VmStatusColumn<VM>(); @@ -371,12 +374,14 @@ }); if (ReportInit.getInstance().isReportsEnabled()) { - List<ActionButtonDefinition<VM>> resourceSubActions = - ReportActionsHelper.getInstance().getResourceSubActions("VM", getModelProvider()); //$NON-NLS-1$ - if (resourceSubActions != null && resourceSubActions.size() > 0) { - getTable().addActionButton(new WebAdminMenuBarButtonDefinition<VM>(constants.showReportVm(), - resourceSubActions)); - } + updateReportsAvailability(constants); + } else { + getMainModel().getReportsAvailabilityEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + updateReportsAvailability(constants); + } + }); } getTable().addActionButton(new WebAdminImageButtonDefinition<VM>(constants.guideMeVm(), @@ -388,4 +393,15 @@ }); } + private void updateReportsAvailability(ApplicationConstants constants) { + if (ReportInit.getInstance().isReportsEnabled()) { + List<ActionButtonDefinition<VM>> resourceSubActions = + ReportActionsHelper.getInstance().getResourceSubActions("VM", getModelProvider()); //$NON-NLS-1$ + if (resourceSubActions != null && resourceSubActions.size() > 0) { + getTable().addActionButton(new WebAdminMenuBarButtonDefinition<VM>(constants.showReportVm(), + resourceSubActions)); + } + } + } + } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java index 7e5df3b..4ae3d9d 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java @@ -96,13 +96,15 @@ // Initialize reports ReportInit.getInstance().init(); - // Perform login only after reports have been initialized + // Update Reports availability after reports xml has been retrieved ReportInit.getInstance().getReportsInitEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { - performLogin(loginModel); + updateReportsAvailability(); } }); + + performLogin(loginModel); } @Override diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/form/PostableFrame.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/form/PostableFrame.java index ca35095..74219dd 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/form/PostableFrame.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/form/PostableFrame.java @@ -29,7 +29,7 @@ public PostableFrame(String frameName) { // Form form = new FormPanel(frameName); - form.setMethod(FormPanel.METHOD_POST); + form.setMethod(FormPanel.METHOD_GET); form.setSize("0", "0"); //$NON-NLS-1$ //$NON-NLS-2$ // Frame diff --git a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql index 18ebca8..cc31fd2 100644 --- a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql +++ b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql @@ -556,7 +556,6 @@ select fn_db_add_config_value('QuotaThresholdStorage','80','general'); select fn_db_add_config_value('QuotaThresholdVdsGroup','80','general'); --Handling Connect to RDP console with Fully Qualified User-Name (user@domain) -select fn_db_add_config_value('RedirectServletReportsPage','','general'); select fn_db_add_config_value('RhevhLocalFSPath','/data/images/','general'); select fn_db_add_config_value('SANWipeAfterDelete','false','general'); --Handling SASL QOP diff --git a/packaging/services/ovirt-engine/ovirt-engine.conf.in b/packaging/services/ovirt-engine/ovirt-engine.conf.in index ac58fe9..794deb1 100644 --- a/packaging/services/ovirt-engine/ovirt-engine.conf.in +++ b/packaging/services/ovirt-engine/ovirt-engine.conf.in @@ -212,7 +212,12 @@ # Reports # by default serv 404. # -ENGINE_REPORTS_UI=${ENGINE_VAR}/reports.xml +ENGINE_REPORTS_BASE_URL= +ENGINE_REPORTS_DASHBOARD_URL=${ENGINE_REPORTS_BASE_URL}/flow.html?viewAsDashboardFrame=true +ENGINE_REPORTS_PROXY_URL=${ENGINE_REPORTS_BASE_URL}/ovirt/reports-interface +ENGINE_REPORTS_VERIFY_HOST=true +ENGINE_REPORTS_VERIFY_CHAIN=true +ENGINE_REPORTS_READ_TIMEOUT= ENGINE_EXTENSION_PATH="${ENGINE_USR}/extensions.d:${ENGINE_ETC}/extensions.d" -- To view, visit http://gerrit.ovirt.org/32336 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I76db7ab889f21de083bb3c8276e8abb77b68fdb3 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Ravi Nori <rn...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches