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>
|
||||
</action>
|
||||
|
||||
<action name="systemStatus" class="systemStatus">
|
||||
<result name="success">/WEB-INF/jsp/admin/systemStatus.jsp</result>
|
||||
</action>
|
||||
|
||||
<!-- .\ LEGACY SUPPORT \.__________________________________________ -->
|
||||
|
||||
<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 class="none">
|
||||
<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>
|
||||
<%-- TODO: future options here.
|
||||
* Repository Syncing Connectors. (rsync, ftp, scp, etc...)
|
||||
|
|
Loading…
Reference in New Issue