for dev builds only, when you do a dbsetup, we'll now add two new users (password same as username):
anon (with absolutely no permissions) and dev (with only "inventory manager" global permission).
only execute one query for unacknowledged alerts

StorageNodeManagerBean.getStorageNodeComposites() previously made separate
query for for unacked alerts for each storage node. I have added a new method
to fetch the unacked alerts in a single query. There was also a subtle bug in
the method findResourcesWithAlertsToStorageNodeMap. It is supposed to return a
map of ids of all storage node resources (or descendants) that have alert defs.
The map however included the resource ids of the entire storage node resource
hierarchy. The problem was with this code,

if (resource.getAlertDefinitions() != null) {
    resourceIdsToStorageNodeMap.put(resource.getId(), initialStorageNode.getId());
}

getAlertDefinitions() is always non-null. I have changed that check to be a call
to isEmpty().
getStorageNodeComposites() requires MANAGE_SETTINGS permission

Adding the required permission also allows for a significant performance gain.
Prior to this commit, MeasurementDataManagerBean.getMeasurementAggregate was
invoked to fetch the load metrics. Each call incurred the additional overhead
of two queries - one to load the schedule and the other to ensure the subject
has access to view the schedule's data.

Because we now require MANAGE_SETTINGS permission, we do not need to check each
schedule. This allows us to fetch the data directly from MetricsServer and
provides a considerable speed up.
fetch storage node load metric data asynchronously

Fetching the metric data asynchronously improves overall throughput for loading
metric data. The improvent gets larger as the number of nodes increases and/or
as the load on the system increases.
Commenting out the unused metrics in the getLoadAsync because this method should fetch the data as fast as possible; fixing one edge case, when no schedules were found on the associated resource
clean up some exception handling and add logging

There is no need to catch NoHostAvaiableException in getLoadAsync(). Only async
queries are used, and any exceptions are propagated through the
ResultSetFuture.setException method.

I have also wrapped each of the function futures with a FutureFallback.
getLoadAsync() has a return type of
ListenableFuture<List<StorageNodeLoadComposite>>. It calls
Futures.successfulAsList() to createi a ListenableFuture that is a combination of
a list of ListenableFutures. Listeners of the combined future get called when all
of the futures in the list complete. This an extremely powerful method, but it
does not provide a hook for listeners to receive notifications when one of the
futures fails. I wrapped each future in a FutureCallback so that we can log any
error that occur when querying for data. This also ensures that the elements of
the List<StorageNodeLoadComposite> returned by the future are all non-null.
[BZ 1014582] Uncaught exception when drag selecting time range on graph image.
The auto-refreshes from the date range configuration saves were causing the form to null out. Eliminating the autosave in a this particular circumstance and then doing a delayed manual refresh fixed the problem.  Added a dragSelectionRefresh handler to allow more specific handling of drag selection refreshes versus regular refreshes.
Bug 1027691 - Start servers in the group ends with read timed out

Applied the fix for BZ911327 to all server group operations (start/stop/restart)
[BZ 998645] - AS7 EJB invocation stats

Now correctly react on server restart. We need to ignore the values from
the previous collection in case we detect the server restarted, because
after the server restart, the counting starts over from the zero again.
BZ 1029925 - when upgrading an old install that didn't have an agent, we want to install a new agent in the new location
BZ 1020889 - also remove the note from the index.ftl file
Removing unused metric fetches (the table with Storage Nodes that uses the getLoadAsync() needs only Calculated.FreeDiskToDataSizeRatio and Calculated.HeapUsagePercentage metrics for all the rest thre is still a getLoad method.

(cherry picked from commit 1b48a3a4c3a8608c1c4b2b86c036f5f5e7c4cab1)
Adding back the Installation date column removed accidentally by commit 085f93057b1bb93d7eea3c332a34bddba8ad6267.
[BZ 1014582] Uncaught exception when drag selecting time range on graph image.
 Fixed a regression with 'Add To Dashboard' that was broken with the Live Value commit. I didn't think that would have any effect at the time on 'Add to Dashboard'.
Do not wait execution of #GenericErrorUIBean() to print out exception to server log

This is to make sure we always log the exception, even if the error page cannot be displayed.
Bug 1029449 - add createInitialBundleVersionViaContentHandle to BundleManager
[BZ 998645] - Don't spam the agent.log if the AS7 server doesn't support
EJB method stats.
[BZ 1016175] MetricsDAO was still holding references to statements prepared with the old session. Added a call to reinit the prepared statements after the session is replaced by the newer one.
[BZ 1027740] speed up calculation of unacked alerts
[BZ 1019841] take snapshots before node (un)deployments