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

Reply via email to