mirror of https://github.com/apache/archiva.git
[MRM-1440] add a system status page
Merged from: r1042625:1042631 git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1042646 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
23ebf87131
commit
c795a64c84
|
@ -0,0 +1,114 @@
|
||||||
|
package org.apache.maven.archiva.web.action.admin;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.opensymphony.xwork2.Preparable;
|
||||||
|
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||||
|
import org.apache.maven.archiva.configuration.Configuration;
|
||||||
|
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||||
|
import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
|
||||||
|
import org.apache.maven.archiva.configuration.functors.RepositoryConfigurationComparator;
|
||||||
|
import org.apache.maven.archiva.database.ArchivaDAO;
|
||||||
|
import org.apache.maven.archiva.database.constraints.MostRecentRepositoryScanStatistics;
|
||||||
|
import org.apache.maven.archiva.model.RepositoryContentStatistics;
|
||||||
|
import org.apache.maven.archiva.repository.scanner.RepositoryScanner;
|
||||||
|
import org.apache.maven.archiva.security.ArchivaRoleConstants;
|
||||||
|
import org.apache.maven.archiva.web.action.PlexusActionSupport;
|
||||||
|
import org.apache.maven.archiva.web.util.ContextUtils;
|
||||||
|
import org.apache.struts2.interceptor.ServletRequestAware;
|
||||||
|
import org.codehaus.plexus.cache.Cache;
|
||||||
|
import org.codehaus.plexus.redback.rbac.Resource;
|
||||||
|
import org.codehaus.plexus.taskqueue.TaskQueue;
|
||||||
|
import org.codehaus.redback.integration.interceptor.SecureAction;
|
||||||
|
import org.codehaus.redback.integration.interceptor.SecureActionBundle;
|
||||||
|
import org.codehaus.redback.integration.interceptor.SecureActionException;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows system status information for the administrator.
|
||||||
|
*
|
||||||
|
* @version $Id$
|
||||||
|
* @plexus.component role="com.opensymphony.xwork2.Action" role-hint="systemStatus" instantiation-strategy="per-lookup"
|
||||||
|
*/
|
||||||
|
public class SystemStatusAction
|
||||||
|
extends PlexusActionSupport
|
||||||
|
implements SecureAction
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @plexus.requirement role="org.codehaus.plexus.taskqueue.TaskQueue"
|
||||||
|
*/
|
||||||
|
private Map<String,TaskQueue> queues;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement role="org.codehaus.plexus.cache.Cache"
|
||||||
|
*/
|
||||||
|
private Map<String,Cache> caches;
|
||||||
|
|
||||||
|
private String memoryStatus;
|
||||||
|
|
||||||
|
public SecureActionBundle getSecureActionBundle()
|
||||||
|
throws SecureActionException
|
||||||
|
{
|
||||||
|
SecureActionBundle bundle = new SecureActionBundle();
|
||||||
|
|
||||||
|
bundle.setRequiresAuthentication( true );
|
||||||
|
bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
|
||||||
|
|
||||||
|
return bundle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String execute()
|
||||||
|
{
|
||||||
|
Runtime runtime = Runtime.getRuntime();
|
||||||
|
runtime.gc();
|
||||||
|
long total = runtime.totalMemory();
|
||||||
|
long used = total - runtime.freeMemory();
|
||||||
|
long max = runtime.maxMemory();
|
||||||
|
memoryStatus = formatMemory(used) + "/" + formatMemory(total) + " (Max: " + formatMemory(max) + ")";
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String formatMemory( long l )
|
||||||
|
{
|
||||||
|
return l / ( 1024 * 1024 ) + "M";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMemoryStatus()
|
||||||
|
{
|
||||||
|
return memoryStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Cache> getCaches()
|
||||||
|
{
|
||||||
|
return caches;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, TaskQueue> getQueues()
|
||||||
|
{
|
||||||
|
return queues;
|
||||||
|
}
|
||||||
|
}
|
|
@ -479,6 +479,10 @@
|
||||||
</result>
|
</result>
|
||||||
</action>
|
</action>
|
||||||
|
|
||||||
|
<action name="systemStatus" class="systemStatus">
|
||||||
|
<result name="success">/WEB-INF/jsp/admin/systemStatus.jsp</result>
|
||||||
|
</action>
|
||||||
|
|
||||||
<!-- .\ LEGACY SUPPORT \.__________________________________________ -->
|
<!-- .\ LEGACY SUPPORT \.__________________________________________ -->
|
||||||
|
|
||||||
<action name="legacyArtifactPath" class="legacyArtifactPathAction" method="input">
|
<action name="legacyArtifactPath" class="legacyArtifactPathAction" method="input">
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
<%--
|
||||||
|
~ Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
~ or more contributor license agreements. See the NOTICE file
|
||||||
|
~ distributed with this work for additional information
|
||||||
|
~ regarding copyright ownership. The ASF licenses this file
|
||||||
|
~ to you under the Apache License, Version 2.0 (the
|
||||||
|
~ "License"); you may not use this file except in compliance
|
||||||
|
~ with the License. You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.
|
||||||
|
--%>
|
||||||
|
|
||||||
|
<%@ page contentType="text/html; charset=UTF-8" %>
|
||||||
|
<%@ taglib prefix="s" uri="/struts-tags" %>
|
||||||
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||||
|
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Administration - System Status</title>
|
||||||
|
<s:head/>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1>Administration - System Status</h1>
|
||||||
|
|
||||||
|
<div id="contentArea">
|
||||||
|
|
||||||
|
<s:actionerror/>
|
||||||
|
<s:actionmessage/>
|
||||||
|
|
||||||
|
<h2>Queues</h2>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Queue</th>
|
||||||
|
<th>Size</th>
|
||||||
|
</tr>
|
||||||
|
<c:forEach var="queueEntry" items="${queues}">
|
||||||
|
<c:set var="queue" value="${queueEntry.value.queueSnapshot}"/>
|
||||||
|
<tr>
|
||||||
|
<td>${queueEntry.key}</td>
|
||||||
|
<td>${fn:length(queue)}</td>
|
||||||
|
</tr>
|
||||||
|
</c:forEach>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2>Caches</h2>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Cache</th>
|
||||||
|
<th>Size</th>
|
||||||
|
<th>Hits</th>
|
||||||
|
<th>Misses</th>
|
||||||
|
<th>Hit Ratio</th>
|
||||||
|
<th> </th>
|
||||||
|
</tr>
|
||||||
|
<c:forEach var="cacheEntry" items="${caches}">
|
||||||
|
<tr>
|
||||||
|
<td>${cacheEntry.key}</td>
|
||||||
|
<td>${cacheEntry.value.statistics.size}</td>
|
||||||
|
<td>${cacheEntry.value.statistics.cacheHits}</td>
|
||||||
|
<td>${cacheEntry.value.statistics.cacheMiss}</td>
|
||||||
|
<td><fmt:formatNumber value="${cacheEntry.value.statistics.cacheHitRate}" pattern="#%"/></td>
|
||||||
|
<td><a href="javascript:alert('Not yet implemented')">Flush</a></td>
|
||||||
|
</tr>
|
||||||
|
</c:forEach>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2>Memory</h2>
|
||||||
|
|
||||||
|
<p>${memoryStatus}</p>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -146,6 +146,9 @@
|
||||||
</li>
|
</li>
|
||||||
<li class="none">
|
<li class="none">
|
||||||
<my:currentWWUrl action="repositoryScanning" namespace="/admin">Repository Scanning</my:currentWWUrl>
|
<my:currentWWUrl action="repositoryScanning" namespace="/admin">Repository Scanning</my:currentWWUrl>
|
||||||
|
</li>
|
||||||
|
<li class="none">
|
||||||
|
<my:currentWWUrl action="systemStatus" namespace="/admin">System Status</my:currentWWUrl>
|
||||||
</li>
|
</li>
|
||||||
<%-- TODO: future options here.
|
<%-- TODO: future options here.
|
||||||
* Repository Syncing Connectors. (rsync, ftp, scp, etc...)
|
* Repository Syncing Connectors. (rsync, ftp, scp, etc...)
|
||||||
|
|
Loading…
Reference in New Issue