Author: oching
Date: Mon Dec 14 02:06:05 2009
New Revision: 890155
URL: http://svn.apache.org/viewvc?rev=890155&view=rev
Log:
[MRM-1296] Audit Log Report
o created data model, dao and query constraint object for audit logs
o save events in database
Added:
archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaAuditLogsDao.java
archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentArchivaAuditLogsConstraint.java
archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaAuditLogsDao.java
Modified:
archiva/branches/MRM-1296/archiva-modules/archiva-base/archiva-model/pom.xml
archiva/branches/MRM-1296/archiva-modules/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/PlexusActionSupport.java
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/ViewAuditLogReportAction.java
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/auditLogReport.jsp
Modified:
archiva/branches/MRM-1296/archiva-modules/archiva-base/archiva-model/pom.xml
URL:
http://svn.apache.org/viewvc/archiva/branches/MRM-1296/archiva-modules/archiva-base/archiva-model/pom.xml?rev=890155&r1=890154&r2=890155&view=diff
==============================================================================
---
archiva/branches/MRM-1296/archiva-modules/archiva-base/archiva-model/pom.xml
(original)
+++
archiva/branches/MRM-1296/archiva-modules/archiva-base/archiva-model/pom.xml
Mon Dec 14 02:06:05 2009
@@ -70,7 +70,7 @@
<groupId>org.codehaus.modello</groupId>
<artifactId>modello-maven-plugin</artifactId>
<configuration>
- <version>1.2.1</version>
+ <version>1.2.3</version>
<packageWithVersion>false</packageWithVersion>
<models>
<model>src/main/mdo/archiva-base.xml</model>
Modified:
archiva/branches/MRM-1296/archiva-modules/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
URL:
http://svn.apache.org/viewvc/archiva/branches/MRM-1296/archiva-modules/archiva-base/archiva-model/src/main/mdo/archiva-base.xml?rev=890155&r1=890154&r2=890155&view=diff
==============================================================================
---
archiva/branches/MRM-1296/archiva-modules/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
(original)
+++
archiva/branches/MRM-1296/archiva-modules/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
Mon Dec 14 02:06:05 2009
@@ -5,7 +5,7 @@
xsd.target-namespace="http://archiva.apache.org/model/1.2.0">
<id>archiva-base-model</id>
<name>ArchivaBaseModel</name>
- <version>1.2.1</version>
+ <version>1.2.3</version>
<description>Archiva Model</description>
<defaults>
<default>
@@ -75,6 +75,14 @@
<multiplicity>*</multiplicity>
</association>
</field>
+ <field>
+ <name>archivaAuditLogs</name>
+ <version>1.3.0+</version>
+ <association>
+ <type>ArchivaAuditLogs</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
</fields>
<codeSegments>
<codeSegment>
@@ -2278,5 +2286,70 @@
</codeSegment>
</codeSegments>
</class>
+ <class stash.storable="true"
+ jpox.table="AUDIT_LOGS">
+ <name>ArchivaAuditLogs</name>
+ <version>1.2.3+</version>
+ <fields>
+ <field stash.maxSize="50">
+ <name>repositoryId</name>
+ <version>1.2.3+</version>
+ <identifier>false</identifier>
+ <required>true</required>
+ <type>String</type>
+ <description>
+ The repository id where the operation was done.
+ </description>
+ </field>
+ <field>
+ <name>eventDate</name>
+ <version>1.2.3+</version>
+ <identifier>false</identifier>
+ <required>true</required>
+ <type>Date</type>
+ <description>
+ The timestamp on when the event happened.
+ </description>
+ </field>
+ <field>
+ <name>artifact</name>
+ <version>1.2.3+</version>
+ <identifier>false</identifier>
+ <required>false</required>
+ <type>String</type>
+ <description>
+ The affected artifact, if there is one.
+ </description>
+ </field>
+ <field>
+ <name>event</name>
+ <version>1.2.3+</version>
+ <identifier>false</identifier>
+ <required>false</required>
+ <type>String</type>
+ <description>
+ The event that happened.
+ </description>
+ </field>
+ <field>
+ <name>username</name>
+ <version>1.2.3+</version>
+ <identifier>false</identifier>
+ <required>true</required>
+ <type>String</type>
+ <description>
+ The user who executed the event.
+ </description>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.2.3+</version>
+ <code><![CDATA[
+ private static final long serialVersionUID = -7113629916828442780L;
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
</classes>
</model>
Added:
archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaAuditLogsDao.java
URL:
http://svn.apache.org/viewvc/archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaAuditLogsDao.java?rev=890155&view=auto
==============================================================================
---
archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaAuditLogsDao.java
(added)
+++
archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaAuditLogsDao.java
Mon Dec 14 02:06:05 2009
@@ -0,0 +1,35 @@
+package org.apache.maven.archiva.database;
+
+/*
+ * 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 java.util.List;
+
+import org.apache.maven.archiva.model.ArchivaAuditLogs;
+
+public interface ArchivaAuditLogsDao
+{
+ public List<ArchivaAuditLogs> queryAuditLogs( Constraint constraint )
+ throws ObjectNotFoundException, ArchivaDatabaseException;
+
+ public ArchivaAuditLogs saveAuditLogs( ArchivaAuditLogs logs );
+
+ public void deleteAuditLogs( ArchivaAuditLogs logs )
+ throws ArchivaDatabaseException;
+}
Added:
archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentArchivaAuditLogsConstraint.java
URL:
http://svn.apache.org/viewvc/archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentArchivaAuditLogsConstraint.java?rev=890155&view=auto
==============================================================================
---
archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentArchivaAuditLogsConstraint.java
(added)
+++
archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/MostRecentArchivaAuditLogsConstraint.java
Mon Dec 14 02:06:05 2009
@@ -0,0 +1,43 @@
+package org.apache.maven.archiva.database.constraints;
+
+/*
+ * 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 org.apache.maven.archiva.model.ArchivaAuditLogs;
+
+public class MostRecentArchivaAuditLogsConstraint
+ extends AbstractSimpleConstraint
+{
+ private String sql;
+
+ public MostRecentArchivaAuditLogsConstraint()
+ {
+ sql = "SELECT FROM " + ArchivaAuditLogs.class.getName() + " ORDER BY
eventDate DESCENDING RANGE 0,1";
+ }
+
+ public Class<?> getResultClass()
+ {
+ return ArchivaAuditLogs.class;
+ }
+
+ public String getSelectSql()
+ {
+ return sql;
+ }
+}
Added:
archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaAuditLogsDao.java
URL:
http://svn.apache.org/viewvc/archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaAuditLogsDao.java?rev=890155&view=auto
==============================================================================
---
archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaAuditLogsDao.java
(added)
+++
archiva/branches/MRM-1296/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaAuditLogsDao.java
Mon Dec 14 02:06:05 2009
@@ -0,0 +1,61 @@
+package org.apache.maven.archiva.database.jdo;
+
+/*
+ * 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 java.util.List;
+
+import org.apache.maven.archiva.database.ArchivaAuditLogsDao;
+import org.apache.maven.archiva.database.ArchivaDatabaseException;
+import org.apache.maven.archiva.database.Constraint;
+import org.apache.maven.archiva.database.ObjectNotFoundException;
+import org.apache.maven.archiva.model.ArchivaAuditLogs;
+
+/**
+ * JdoArchivaAuditLogsDao
+ *
+ * @version
+ *
+ * @plexus.component role-hint="jdo"
+ */
+public class JdoArchivaAuditLogsDao
+ implements ArchivaAuditLogsDao
+{
+ /**
+ * @plexus.requirement role-hint="archiva"
+ */
+ private JdoAccess jdo;
+
+ public void deleteAuditLogs( ArchivaAuditLogs logs )
+ throws ArchivaDatabaseException
+ {
+ jdo.removeObject( logs );
+ }
+
+ public List<ArchivaAuditLogs> queryAuditLogs( Constraint constraint )
+ throws ObjectNotFoundException, ArchivaDatabaseException
+ {
+ return (List<ArchivaAuditLogs>) jdo.queryObjects(
ArchivaAuditLogs.class, constraint );
+ }
+
+ public ArchivaAuditLogs saveAuditLogs( ArchivaAuditLogs logs )
+ {
+ return (ArchivaAuditLogs) jdo.saveObject( logs );
+ }
+}
Modified:
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/PlexusActionSupport.java
URL:
http://svn.apache.org/viewvc/archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/PlexusActionSupport.java?rev=890155&r1=890154&r2=890155&view=diff
==============================================================================
---
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/PlexusActionSupport.java
(original)
+++
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/PlexusActionSupport.java
Mon Dec 14 02:06:05 2009
@@ -20,11 +20,14 @@
*/
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
+import org.apache.maven.archiva.database.ArchivaAuditLogsDao;
+import org.apache.maven.archiva.model.ArchivaAuditLogs;
import org.apache.maven.archiva.repository.audit.AuditEvent;
import org.apache.maven.archiva.repository.audit.AuditListener;
import org.apache.maven.archiva.repository.audit.Auditable;
@@ -53,6 +56,11 @@
*/
private List<AuditListener> auditListeners = new
ArrayList<AuditListener>();
+ /**
+ * @plexus.requirement role-hint="jdo"
+ */
+ private ArchivaAuditLogsDao auditLogsDao;
+
private String principal;
@SuppressWarnings("unchecked")
@@ -85,6 +93,15 @@
{
listener.auditEvent( event );
}
+
+ ArchivaAuditLogs auditLogs = new ArchivaAuditLogs();
+ auditLogs.setArtifact( resource );
+ auditLogs.setEvent( action );
+ auditLogs.setEventDate( Calendar.getInstance().getTime() );
+ auditLogs.setRepositoryId( repositoryId );
+ auditLogs.setUsername( getPrincipal() );
+
+ auditLogsDao.saveAuditLogs( auditLogs );
}
protected void triggerAuditEvent( String resource, String action )
Modified:
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
URL:
http://svn.apache.org/viewvc/archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java?rev=890155&r1=890154&r2=890155&view=diff
==============================================================================
---
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
(original)
+++
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
Mon Dec 14 02:06:05 2009
@@ -41,6 +41,7 @@
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.database.ArchivaAuditLogsDao;
import org.apache.maven.archiva.model.ArchivaProjectModel;
import org.apache.maven.archiva.model.ArchivaRepositoryMetadata;
import org.apache.maven.archiva.model.ArtifactReference;
@@ -149,7 +150,7 @@
* @plexus.requirement
*/
private ArchivaTaskScheduler scheduler;
-
+
private ChecksumAlgorithm[] algorithms = new
ChecksumAlgorithm[]{ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5};
private ProjectModelWriter pomWriter = new ProjectModel400Writer();
Modified:
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/ViewAuditLogReportAction.java
URL:
http://svn.apache.org/viewvc/archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/ViewAuditLogReportAction.java?rev=890155&r1=890154&r2=890155&view=diff
==============================================================================
---
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/ViewAuditLogReportAction.java
(original)
+++
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/ViewAuditLogReportAction.java
Mon Dec 14 02:06:05 2009
@@ -25,6 +25,12 @@
import javax.servlet.http.HttpServletRequest;
+import org.apache.maven.archiva.database.ArchivaAuditLogsDao;
+import org.apache.maven.archiva.database.ArchivaDatabaseException;
+import org.apache.maven.archiva.database.Constraint;
+import org.apache.maven.archiva.database.ObjectNotFoundException;
+import
org.apache.maven.archiva.database.constraints.MostRecentArchivaAuditLogsConstraint;
+import org.apache.maven.archiva.model.ArchivaAuditLogs;
import org.apache.maven.archiva.security.AccessDeniedException;
import org.apache.maven.archiva.security.ArchivaSecurityException;
import org.apache.maven.archiva.security.PrincipalNotFoundException;
@@ -51,6 +57,11 @@
*/
private UserRepositories userRepositories;
+ /**
+ * @plexus.requirement role-hint="jdo"
+ */
+ private ArchivaAuditLogsDao auditLogsDao;
+
private String repository;
private List<String> repositories;
@@ -61,16 +72,8 @@
private int rowCount = 30;
- public int getRowCount()
- {
- return rowCount;
- }
-
- public void setRowCount( int rowCount )
- {
- this.rowCount = rowCount;
- }
-
+ private List<ArchivaAuditLogs> auditLogs = new
ArrayList<ArchivaAuditLogs>();
+
public SecureActionBundle getSecureActionBundle()
throws SecureActionException
{
@@ -87,12 +90,25 @@
{
repositories = getObservableRepositories();
+ Constraint constraint = new MostRecentArchivaAuditLogsConstraint();
+ try
+ {
+ this.auditLogs = auditLogsDao.queryAuditLogs( constraint );
+ }
+ catch( ObjectNotFoundException e )
+ {
+ log.warn( "No audit logs found." );
+ }
+ catch ( ArchivaDatabaseException e )
+ {
+ log.warn( "Error occurred while querying audit logs." );
+ }
}
public String execute()
throws Exception
- {
+ {
return SUCCESS;
}
@@ -156,4 +172,24 @@
{
this.artifactId = artifactId;
}
+
+ public List<ArchivaAuditLogs> getAuditLogs()
+ {
+ return auditLogs;
+ }
+
+ public void setAuditLogs( List<ArchivaAuditLogs> auditLogs )
+ {
+ this.auditLogs = auditLogs;
+ }
+
+ public int getRowCount()
+ {
+ return rowCount;
+ }
+
+ public void setRowCount( int rowCount )
+ {
+ this.rowCount = rowCount;
+ }
}
Modified:
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/auditLogReport.jsp
URL:
http://svn.apache.org/viewvc/archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/auditLogReport.jsp?rev=890155&r1=890154&r2=890155&view=diff
==============================================================================
---
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/auditLogReport.jsp
(original)
+++
archiva/branches/MRM-1296/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/reports/auditLogReport.jsp
Mon Dec 14 02:06:05 2009
@@ -19,6 +19,7 @@
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib uri="http://www.extremecomponents.org" prefix="ec" %>
<html>
<head>
@@ -44,7 +45,7 @@
<div id="contentArea">
<s:form action="viewAuditLogReport" namespace="/report" validate="false">
-
+
<div id="auditLogReport">
<s:select label="Repository" name="repository"
list="repositories"/>
@@ -80,7 +81,27 @@
<s:submit value="View Audit Log"/>
</div>
- </s:form>
+ </s:form>
+
+
+ <table border="1">
+ <tr>
+ <th align="center">Event</th>
+ <th align="center">Repository</th>
+ <th align="center">Artifact</th>
+ <th align="center">Event Date</th>
+ <th align="center">Username</th>
+ </tr>
+ <c:forEach items="${auditLogs}" var="auditLog" varStatus="i">
+ <tr>
+ <td>${auditLog.event}</td>
+ <td>${auditLog.repositoryId}</td>
+ <td>${auditLog.artifact}</td>
+ <td>${auditLog.eventDate}</td>
+ <td>${auditLog.username}</td>
+ </tr>
+ </c:forEach>
+ </table>
</div>