You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by jz...@apache.org on 2009/04/09 01:57:05 UTC

svn commit: r763464 - in /continuum/trunk: continuum-purge/ continuum-purge/src/main/java/org/apache/continuum/purge/ continuum-purge/src/main/java/org/apache/continuum/purge/executor/ continuum-webapp/src/main/java/org/apache/continuum/web/util/ conti...

Author: jzurbano
Date: Wed Apr  8 23:57:04 2009
New Revision: 763464

URL: http://svn.apache.org/viewvc?rev=763464&view=rev
Log:
CONTINUUM-1853 Provide an audit log

Added:
    continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/util/AuditLogConstants.java   (with props)
Modified:
    continuum/trunk/continuum-purge/pom.xml
    continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/ContinuumPurgeConstants.java
    continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/AbstractContinuumPurgeExecutor.java
    continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/CleanAllPurgeExecutor.java
    continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/DaysOldDirectoryPurgeExecutor.java
    continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/ReleasedSnapshotsRepositoryPurgeExecutor.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddMavenTwoProjectAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddProjectGroupAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildDefinitionAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildProjectAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/CancelBuildAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/DeleteProjectAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectEditAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectGroupAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectsListAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ScheduleAction.java
    continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildDefinitionTemplateAction.java
    continuum/trunk/continuum-webapp/src/main/resources/META-INF/plexus/application.xml
    continuum/trunk/continuum-webapp/src/main/resources/log4j.xml

Modified: continuum/trunk/continuum-purge/pom.xml
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-purge/pom.xml?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-purge/pom.xml (original)
+++ continuum/trunk/continuum-purge/pom.xml Wed Apr  8 23:57:04 2009
@@ -86,6 +86,11 @@
         </exclusion>
       </exclusions>
     </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <scope>runtime</scope>
+    </dependency>
     
     <!-- === Testing Dependencies === -->
     <dependency>

Modified: continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/ContinuumPurgeConstants.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/ContinuumPurgeConstants.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/ContinuumPurgeConstants.java (original)
+++ continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/ContinuumPurgeConstants.java Wed Apr  8 23:57:04 2009
@@ -31,4 +31,16 @@
     public static final String PURGE_DIRECTORY_RELEASES = "releases";
 
     public static final String PURGE_DIRECTORY_BUILDOUTPUT = "buildOutput";
+    
+    public static final String PURGE = "PURGE";
+    
+    public static final String PURGE_REPO_CONTENTS = "Purge All Repository Contents";
+    
+    public static final String PURGE_DIR_CONTENTS = "Purge All Directory Contents";
+   
+    public static final String PURGE_ARTIFACT = "Purge Artifact File";
+    
+    public static final String PURGE_FILE = "Purge Support File";
+    
+    public static final String PURGE_PROJECT = "Purge Project";
 }

Modified: continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/AbstractContinuumPurgeExecutor.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/AbstractContinuumPurgeExecutor.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/AbstractContinuumPurgeExecutor.java (original)
+++ continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/AbstractContinuumPurgeExecutor.java Wed Apr  8 23:57:04 2009
@@ -20,6 +20,7 @@
  */
 
 import org.apache.continuum.purge.repository.content.RepositoryManagedContent;
+import org.apache.continuum.purge.ContinuumPurgeConstants;
 import org.apache.maven.archiva.consumers.core.repository.ArtifactFilenameFilter;
 import org.apache.maven.archiva.model.ArtifactReference;
 import org.slf4j.Logger;
@@ -37,8 +38,10 @@
 public abstract class AbstractContinuumPurgeExecutor
     implements ContinuumPurgeExecutor
 {
-    private Logger log = LoggerFactory.getLogger( AbstractContinuumPurgeExecutor.class );
+    private static final char DELIM = ' ';
     
+    private Logger logger = LoggerFactory.getLogger( "AuditLog" );
+
     public void purge( Set<ArtifactReference> references, RepositoryManagedContent repository )
     {
         if ( references != null && !references.isEmpty() )
@@ -47,7 +50,7 @@
             {
                 File artifactFile = repository.toFile( reference );
                 artifactFile.delete();
-                log.info( "Purge artifact " + artifactFile.getName() );
+                triggerAuditEvent( artifactFile.getName(), ContinuumPurgeConstants.PURGE_ARTIFACT );
                 purgeSupportFiles( artifactFile, artifactFile.getName() );
                 // purge maven metadata
                 purgeSupportFiles( artifactFile.getParentFile(), "maven-metadata" );
@@ -83,8 +86,15 @@
             if ( file.exists() && file.isFile() )
             {
                 file.delete();
-                log.info( "Purge support file: " + file.getName() );
+                triggerAuditEvent( file.getName(), ContinuumPurgeConstants.PURGE_FILE );
             }
         }
     }
-}
\ No newline at end of file
+    
+    protected void triggerAuditEvent( String resource, String action )
+    {
+        String msg = ContinuumPurgeConstants.PURGE + DELIM + "<continuum>" + DELIM + '\"' + resource + '\"' + DELIM + '\"' + action + '\"';
+        
+        logger.info( msg );
+    }
+}

Modified: continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/CleanAllPurgeExecutor.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/CleanAllPurgeExecutor.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/CleanAllPurgeExecutor.java (original)
+++ continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/CleanAllPurgeExecutor.java Wed Apr  8 23:57:04 2009
@@ -71,6 +71,7 @@
             throw new ContinuumPurgeExecutorException( "Error while purging all artifacts or directories in " + path,
                                                        e );
         }
+        triggerAuditEvent( path, ContinuumPurgeConstants.PURGE_REPO_CONTENTS );
     }
 
     private void purgeReleases( String path )
@@ -87,6 +88,7 @@
             for ( File releaseDir : releasesDir )
             {
                 FileUtils.deleteDirectory( releaseDir );
+                triggerAuditEvent( releaseDir.getName(), ContinuumPurgeConstants.PURGE_DIR_CONTENTS );
             }
         }
         catch ( IOException e )
@@ -109,6 +111,7 @@
             for ( File projectDir : projectsDir )
             {
                 FileUtils.cleanDirectory( projectDir );
+                triggerAuditEvent( projectDir.getName(), ContinuumPurgeConstants.PURGE_DIR_CONTENTS );
             }
         }
         catch ( IOException e )

Modified: continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/DaysOldDirectoryPurgeExecutor.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/DaysOldDirectoryPurgeExecutor.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/DaysOldDirectoryPurgeExecutor.java (original)
+++ continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/DaysOldDirectoryPurgeExecutor.java Wed Apr  8 23:57:04 2009
@@ -99,6 +99,7 @@
             {
                 try
                 {
+                    triggerAuditEvent( dir.getName(), ContinuumPurgeConstants.PURGE_DIR_CONTENTS );
                     FileUtils.deleteDirectory( dir );
                     countToPurge--;
                 }
@@ -146,10 +147,12 @@
                     try
                     {
                         FileUtils.deleteDirectory( buildDir );
+                        triggerAuditEvent( buildDir.getName(), ContinuumPurgeConstants.PURGE_DIR_CONTENTS );
                         File logFile = new File( buildDir.getAbsoluteFile() + ".log.txt" );
 
                         if ( logFile.exists() )
                         {
+                            triggerAuditEvent( logFile.getName(), ContinuumPurgeConstants.PURGE_FILE );
                             logFile.delete();
                         }
 

Modified: continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/ReleasedSnapshotsRepositoryPurgeExecutor.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/ReleasedSnapshotsRepositoryPurgeExecutor.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/ReleasedSnapshotsRepositoryPurgeExecutor.java (original)
+++ continuum/trunk/continuum-purge/src/main/java/org/apache/continuum/purge/executor/ReleasedSnapshotsRepositoryPurgeExecutor.java Wed Apr  8 23:57:04 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.continuum.purge.ContinuumPurgeConstants;
 import org.apache.continuum.purge.repository.content.RepositoryManagedContent;
 import org.apache.maven.archiva.common.utils.VersionComparator;
 import org.apache.maven.archiva.common.utils.VersionUtil;
@@ -106,6 +107,8 @@
                 {
                     versionRef.setVersion( version );
                     repository.deleteVersion( versionRef );
+                    
+                    triggerAuditEvent( VersionedReference.toKey( versionRef ), ContinuumPurgeConstants.PURGE_PROJECT );
 
                     removeMetadata( versionRef );
                 }
@@ -131,4 +134,4 @@
 
         purgeSupportFiles( projectDir, "maven-metadata" );
     }
-}
\ No newline at end of file
+}

Added: continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/util/AuditLogConstants.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/util/AuditLogConstants.java?rev=763464&view=auto
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/util/AuditLogConstants.java (added)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/util/AuditLogConstants.java Wed Apr  8 23:57:04 2009
@@ -0,0 +1,75 @@
+package org.apache.continuum.web.util;
+
+/*
+ * 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.
+ */
+
+public class AuditLogConstants
+{
+    public static final String PROJECT = "PROJECT";
+
+    public static final String SCHEDULE = "BUILD_SCHEDULE";
+
+    public static final String TEMPLATE = "BUILD_TEMPLATE";
+
+    public static final String BUILD_DEFINITION = "BUILD_DEFINITION";
+    
+    // events
+    public static final String FORCE_BUILD = "Forced Project Build";
+
+    public static final String CANCEL_BUILD = "Cancelled Project Build";
+
+    public static final String CI_BUILD = "Scheduled Project Build";
+
+    public static final String PREPARE_RELEASE = "Prepare Project Release";
+
+    public static final String PERFORM_RELEASE = "Perform Project Release";
+
+    public static final String ROLLBACK_RELEASE = "Rollback Project Release";
+
+    public static final String ADD_M2_PROJECT = "Added M2 Project";
+
+    public static final String MODIFY_PROJECT = "Modified Project";
+
+    public static final String REMOVE_PROJECT = "Removed Project";
+
+    public static final String ADD_PROJECT_GROUP = "Added Project Group";
+
+    public static final String MODIFY_PROJECT_GROUP = "Modified Project Group";
+
+    public static final String REMOVE_PROJECT_GROUP = "Removed Project Group";
+
+    public static final String MODIFY_SCHEDULE = "Modified Build Schedule";
+
+    public static final String ADD_SCHEDULE = "Added Build Schedule";
+
+    public static final String REMOVE_SCHEDULE = "Removed Build Schedule";
+
+    public static final String ADD_GOAL = "Added Build Definition";
+
+    public static final String MODIFY_GOAL = "Modified Build Definition";
+
+    public static final String REMOVE_GOAL = "Removed Build Definition";
+
+    public static final String ADD_TEMPLATE = "Added Build Definition Template";
+
+    public static final String MODIFY_TEMPLATE = "Modified Build Definition Template";
+
+    public static final String REMOVE_TEMPLATE = "Removed Build Definition Template";
+}
+

Propchange: continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/util/AuditLogConstants.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddMavenTwoProjectAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddMavenTwoProjectAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddMavenTwoProjectAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddMavenTwoProjectAction.java Wed Apr  8 23:57:04 2009
@@ -19,12 +19,17 @@
  * under the License.
  */
 
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
+import java.io.InputStreamReader;
 import java.io.IOException;
 import java.util.List;
+import java.net.URL;
+import java.net.MalformedURLException;
 
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.builddefinition.BuildDefinitionServiceException;
 import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult;
@@ -58,9 +63,15 @@
         throws ContinuumException
     {
         ContinuumProjectBuildingResult result = null;
+        
+        String groupId = "";
+        
+        String artifactId = "";
+        
+        String resource = "";
 
         // TODO: remove this part once uploading of an m2 project with modules is supported ( CONTINUUM-1098 )
-        if ( checkProtocol == false )
+        if ( ( checkProtocol == false ) || ( ( checkProtocol == true ) && ( pomUrl.startsWith( FILE_SCHEME ) ) ) )
         {
             MavenXpp3Reader m2pomReader = new MavenXpp3Reader();
 
@@ -80,10 +91,14 @@
                 }
 
                 Model model = m2pomReader.read( new FileReader( filePath ) );
+                
+                groupId = model.getGroupId();
+                artifactId = model.getArtifactId();
+                resource =  groupId + ":" + artifactId;
 
                 List modules = model.getModules();
 
-                if ( modules != null && modules.size() != 0 )
+                if ( ( checkProtocol == false ) && ( modules != null && modules.size() != 0 ) )
                 {
                     result = new ContinuumProjectBuildingResult();
                     result.addError( ERROR_UPLOADING_M2_PROJECT_WITH_MODULES );
@@ -102,12 +117,49 @@
                 throw new ContinuumException( ERROR_READING_POM_EXCEPTION_MESSAGE, e );
             }
         }
+        else
+        {
+            if ( ( pomUrl.startsWith( "http" ) ) && ( pomUrl.endsWith( "pom.xml" ) ) )
+            {
+                try
+                {
+                    URL url = new URL( pomUrl );
+                    BufferedReader in = new BufferedReader( new InputStreamReader( url.openStream() ) );
+                    StringBuilder content = new StringBuilder();
+                    String line = in.readLine();
+                    
+                    while ( line != null )
+                    {
+                        content.append( line );
+                        line = in.readLine();
+                    }
+                    in.close();
+                   
+                    if ( content.length() > 0 )
+                    {
+                        groupId = getSubString( content.toString(), "<groupId>", "</groupId>" );
+                        artifactId = getSubString( content.toString(), "<artifactId>", "</artifactId>" );
+                        resource = groupId + ":" + artifactId;
+                    }
+                }
+                catch ( MalformedURLException e )
+                {
+                    addActionError( ERROR_READING_POM_EXCEPTION_MESSAGE );
+                }
+                catch ( IOException e )
+                {
+                    throw new ContinuumException( ERROR_READING_POM_EXCEPTION_MESSAGE, e );
+                }
+            }
+        }
 
         if ( result == null )
         {
             result = getContinuum().addMavenTwoProject( pomUrl, selectedProjectGroup, checkProtocol, scmUseCache,
                                                         !this.isNonRecursiveProject(), this.getBuildDefinitionTemplateId() );
         }
+        
+        triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, resource, AuditLogConstants.ADD_M2_PROJECT );
 
         return result;
     }
@@ -159,5 +211,16 @@
     {
         this.nonRecursiveProject = nonRecursiveProject;
     }
+    
+    private String getSubString( String content, String tagStart, String tagEnd )
+    {
+        String subString = "";
+        
+        int start = content.indexOf( tagStart ) + tagStart.length();
+        int end = content.indexOf( tagEnd );
+        subString = content.substring( start, end );
+        
+        return subString;
+    }
 
 }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddProjectGroupAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddProjectGroupAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddProjectGroupAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddProjectGroupAction.java Wed Apr  8 23:57:04 2009
@@ -24,6 +24,7 @@
 
 import org.apache.continuum.model.repository.LocalRepository;
 import org.apache.continuum.repository.RepositoryServiceException;
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.model.project.ProjectGroup;
 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
@@ -154,6 +155,8 @@
 
             return ERROR;
         }
+        
+        triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, name, AuditLogConstants.ADD_PROJECT_GROUP );
 
         return SUCCESS;
     }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildDefinitionAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildDefinitionAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildDefinitionAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildDefinitionAction.java Wed Apr  8 23:57:04 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.builddefinition.BuildDefinitionService;
 import org.apache.maven.continuum.builddefinition.BuildDefinitionServiceException;
@@ -314,6 +315,10 @@
             addActionError( authzE.getMessage() );
             return REQUIRES_AUTHORIZATION;
         }
+        
+        Project proj = getContinuum().getProject( projectId );
+        triggerAuditEvent( getPrincipal(), AuditLogConstants.BUILD_DEFINITION, proj.getGroupId() + ":" +
+                           proj.getArtifactId() + ":" + goals + " " + arguments, AuditLogConstants.ADD_GOAL );
 
         if ( groupBuildView )
         {
@@ -361,6 +366,8 @@
 
         if ( projectId != 0 )
         {
+            triggerAuditEvent( getPrincipal(), AuditLogConstants.BUILD_DEFINITION, getProjectGroupName() + ":" +
+                               goals + " " + arguments, AuditLogConstants.ADD_GOAL );
             return SUCCESS;
         }
         else
@@ -379,6 +386,10 @@
             if ( confirmed )
             {
                 getContinuum().removeBuildDefinitionFromProject( projectId, buildDefinitionId );
+                
+                Project proj = getContinuum().getProject( projectId );
+                triggerAuditEvent( getPrincipal(), AuditLogConstants.BUILD_DEFINITION, proj.getGroupId() + ":" +
+                                   proj.getArtifactId() + ":" + goals + " " + arguments, AuditLogConstants.REMOVE_GOAL );
 
                 return SUCCESS;
             }
@@ -407,6 +418,9 @@
             if ( confirmed )
             {
                 getContinuum().removeBuildDefinitionFromProjectGroup( projectGroupId, buildDefinitionId );
+                
+                triggerAuditEvent( getPrincipal(), AuditLogConstants.BUILD_DEFINITION, getProjectGroupName() + ":" +
+                                   goals + " " + arguments, AuditLogConstants.REMOVE_GOAL );
 
                 return SUCCESS;
             }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildProjectAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildProjectAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildProjectAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildProjectAction.java Wed Apr  8 23:57:04 2009
@@ -20,7 +20,9 @@
  */
 
 import org.apache.maven.continuum.ContinuumException;
+import org.apache.maven.continuum.model.project.Project;
 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.codehaus.plexus.util.StringUtils;
 
 /**
@@ -89,6 +91,9 @@
                 return "to_project_page";
             }
         }
+        
+        Project proj = getContinuum().getProject( projectId );
+        triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, proj.getGroupId() + ":" + proj.getArtifactId(), AuditLogConstants.FORCE_BUILD );
 
         return SUCCESS;
     }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/CancelBuildAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/CancelBuildAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/CancelBuildAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/CancelBuildAction.java Wed Apr  8 23:57:04 2009
@@ -30,6 +30,7 @@
 import org.apache.continuum.buildmanager.BuildsManager;
 import org.apache.continuum.model.project.ProjectScmRoot;
 import org.apache.continuum.taskqueue.BuildProjectTask;
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.model.project.Project;
 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
@@ -66,6 +67,10 @@
 	        BuildsManager buildsManager = getContinuum().getBuildsManager();
 	        
 	        buildsManager.cancelBuild( projectId );
+	        
+	        Project proj = getContinuum().getProject( projectId );
+
+          triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, proj.getGroupId() + ":" + proj.getArtifactId(), AuditLogConstants.CANCEL_BUILD );
 	    }
 	    catch ( AuthorizationRequiredException e )
 	    {
@@ -103,6 +108,11 @@
 	        if ( index > 0 )
 	        {
 	            getContinuum().getBuildsManager().cancelBuild( projectsId[index] );
+	            
+	            int projId = projectsId[index];
+              getContinuum().getBuildsManager().cancelBuild( projectsId[index] );
+              Project proj = getContinuum().getProject( projId );
+              triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, proj.getGroupId() + ":" + proj.getArtifactId(), AuditLogConstants.CANCEL_BUILD );
 	        }
 	        
 	    }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java Wed Apr  8 23:57:04 2009
@@ -34,6 +34,9 @@
 import org.codehaus.plexus.redback.system.SecuritySystemConstants;
 import org.codehaus.plexus.util.StringUtils;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * ContinuumActionSupport
  *
@@ -67,6 +70,10 @@
     private Continuum continuum;
     
     protected SimpleDateFormat dateFormatter = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss aaa z");
+    
+    private Logger logger = LoggerFactory.getLogger( "AuditLog" );
+    
+    private static final char DELIM = ' ';
 
     public void prepare()
         throws Exception
@@ -541,5 +548,39 @@
     protected ResourceBundle getResourceBundle()
     {
         return getTexts( "localization/Continuum" );
+    }
+    
+    protected String getPrincipal()
+    {
+        String principal = "guest";
+        
+        if ( getSecuritySession() != null )
+        {
+            if ( getSecuritySession().getUser() != null )
+            {
+                principal = (String) getSecuritySession().getUser().getPrincipal();
+            }
+        }
+        else
+        {
+            principal = "unknown-user";
+        }
+        return principal;
+    }
+    
+    /*
+     * resource formats:
+     *   project - {groupId}:{artifactId}
+     *           - {groupId}:{artifactId}:{version} for release prepare/perform
+     *   project group - {group_name}
+     *   build definition - {project_group}:{goals}
+     *   schedule - {name}:(cron)
+     */
+    protected void triggerAuditEvent( String user, String category, String resource, String action )
+    {
+        
+        String msg = category + DELIM + user + DELIM + '\"' + resource + '\"' + DELIM + '\"' + action + '\"';
+        
+        logger.info( msg );
     }    
 }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/DeleteProjectAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/DeleteProjectAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/DeleteProjectAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/DeleteProjectAction.java Wed Apr  8 23:57:04 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.model.project.Project;
 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
@@ -50,6 +51,10 @@
         {
             return REQUIRES_AUTHORIZATION;
         }
+        
+        Project proj = getContinuum().getProject( projectId );
+        triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, proj.getGroupId() + ":" +
+                           proj.getArtifactId(), AuditLogConstants.REMOVE_PROJECT );
 
         getContinuum().removeProject( projectId );
 

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectEditAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectEditAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectEditAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectEditAction.java Wed Apr  8 23:57:04 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.model.project.Project;
 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
@@ -78,6 +79,9 @@
         project.setScmTag( scmTag );
 
         getContinuum().updateProject( project );
+        
+        triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, project.getGroupId() + ":" +
+                           project.getArtifactId(), AuditLogConstants.MODIFY_PROJECT );
 
         return SUCCESS;
     }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectGroupAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectGroupAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectGroupAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectGroupAction.java Wed Apr  8 23:57:04 2009
@@ -34,6 +34,7 @@
 import org.apache.continuum.buildmanager.BuildsManager;
 import org.apache.continuum.model.project.ProjectScmRoot;
 import org.apache.continuum.model.repository.LocalRepository;
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.model.project.BuildDefinition;
 import org.apache.maven.continuum.model.project.BuildResult;
@@ -313,6 +314,8 @@
             name = getProjectGroupName();
             return CONFIRM;
         }
+        
+        triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, getProjectGroupName(), AuditLogConstants.REMOVE_PROJECT_GROUP );
 
         return SUCCESS;
     }
@@ -536,6 +539,8 @@
                 getContinuum().updateProject( project );
             }
         }
+        
+        triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, getProjectGroupName(), AuditLogConstants.MODIFY_PROJECT_GROUP );
 
         return SUCCESS;
     }
@@ -561,6 +566,8 @@
         {
             getContinuum().buildProjectGroupWithBuildDefinition( projectGroupId, buildDefinitionId );
         }
+        
+        triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, getProjectGroupName(), AuditLogConstants.FORCE_BUILD );
 
         if ( this.isFromSummaryPage() )
         {

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectsListAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectsListAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectsListAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectsListAction.java Wed Apr  8 23:57:04 2009
@@ -23,6 +23,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.model.project.BuildDefinition;
 import org.apache.maven.continuum.model.project.Project;
@@ -98,7 +99,9 @@
 
                 try
                 {
-                    logger.info( "Removing Project with id=" + projectId );
+                    Project proj = getContinuum().getProject( projectId );
+                    triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, proj.getGroupId() + ":" +
+                                       proj.getArtifactId(), AuditLogConstants.REMOVE_PROJECT );
 
                     getContinuum().removeProject( projectId );
                 }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java Wed Apr  8 23:57:04 2009
@@ -25,6 +25,7 @@
 import org.apache.continuum.release.distributed.DistributedReleaseUtil;
 import org.apache.continuum.release.distributed.manager.DistributedReleaseManager;
 import org.apache.continuum.web.action.AbstractReleaseAction;
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.model.project.Project;
 import org.apache.maven.continuum.model.system.Profile;
@@ -264,6 +265,9 @@
             releaseManager.perform( releaseId, performDirectory, goals, arguments, useReleaseProfile, listener,
                                     repository );
         }
+        
+        triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, project.getGroupId() + ":" +
+                           project.getArtifactId() + ":" + project.getVersion(), AuditLogConstants.PERFORM_RELEASE );
 
         return SUCCESS;
     }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java Wed Apr  8 23:57:04 2009
@@ -23,6 +23,7 @@
 import org.apache.continuum.release.distributed.DistributedReleaseUtil;
 import org.apache.continuum.release.distributed.manager.DistributedReleaseManager;
 import org.apache.continuum.web.action.AbstractReleaseAction;
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.installation.InstallationService;
 import org.apache.maven.continuum.model.project.Project;
@@ -342,6 +343,9 @@
                 releaseManager.prepare( project, getReleaseProperties(), getRelVersionMap(), getDevVersionMap(), listener,
                                         workingDirectory, environments, executable );
         }
+        
+        triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, project.getGroupId() + ":" + project.getArtifactId() + ":" +
+                           project.getVersion(), AuditLogConstants.PREPARE_RELEASE );
 
         return SUCCESS;
     }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java Wed Apr  8 23:57:04 2009
@@ -24,6 +24,7 @@
 
 import org.apache.continuum.configuration.BuildAgentConfigurationException;
 import org.apache.continuum.release.distributed.manager.DistributedReleaseManager;
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.utils.WorkingDirectoryService;
 import org.apache.maven.continuum.model.project.Project;
@@ -105,6 +106,9 @@
                     //do nothing
                 }
             }
+            
+            triggerAuditEvent( getPrincipal(), AuditLogConstants.PROJECT, project.getGroupId() + ":" +
+                               project.getArtifactId() + ":" + project.getVersion(), AuditLogConstants.ROLLBACK_RELEASE );
     
             releaseManager.getPreparedReleases().remove( releaseId );
         }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ScheduleAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ScheduleAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ScheduleAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ScheduleAction.java Wed Apr  8 23:57:04 2009
@@ -26,6 +26,7 @@
 import java.util.List;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.model.project.BuildQueue;
 import org.apache.maven.continuum.model.project.Schedule;
@@ -243,6 +244,7 @@
             try
             {
                 getContinuum().addSchedule( setFields( new Schedule() ) );
+                triggerAuditEvent( getPrincipal(), AuditLogConstants.SCHEDULE, getName() + ":" + getCronExpression(), AuditLogConstants.ADD_SCHEDULE );
             }
             catch ( ContinuumException e )
             {
@@ -256,6 +258,7 @@
             try
             {
                 getContinuum().updateSchedule( setFields( getContinuum().getSchedule( id ) ) );
+                triggerAuditEvent( getPrincipal(), AuditLogConstants.SCHEDULE, getName() + ":" + getCronExpression(), AuditLogConstants.MODIFY_SCHEDULE );
             }
             catch ( ContinuumException e )
             {
@@ -328,6 +331,8 @@
             addActionError( e.getMessage() );
             return REQUIRES_AUTHENTICATION;
         }
+        
+        String resource = getContinuum().getSchedule( id ).getName() + ":" + getCronExpression();
 
         if ( confirmed )
         {
@@ -349,6 +354,8 @@
 
             return CONFIRM;
         }
+        
+        triggerAuditEvent( getPrincipal(), AuditLogConstants.SCHEDULE, resource, AuditLogConstants.REMOVE_SCHEDULE );
 
         return SUCCESS;
     }

Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildDefinitionTemplateAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildDefinitionTemplateAction.java?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildDefinitionTemplateAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildDefinitionTemplateAction.java Wed Apr  8 23:57:04 2009
@@ -26,6 +26,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.builddefinition.BuildDefinitionServiceException;
 import org.apache.maven.continuum.execution.ContinuumBuildExecutorConstants;
@@ -139,12 +140,14 @@
         {
             buildDefinitionTemplate.setBuildDefinitions( selectedBuildDefinitions );
             this.getContinuum().getBuildDefinitionService().updateBuildDefinitionTemplate( buildDefinitionTemplate );
+            triggerAuditEvent( getPrincipal(), AuditLogConstants.TEMPLATE, buildDefinitionTemplate.getName(), AuditLogConstants.MODIFY_TEMPLATE );
         }
         else
         {
             buildDefinitionTemplate.setBuildDefinitions( selectedBuildDefinitions );
             this.buildDefinitionTemplate = this.getContinuum().getBuildDefinitionService()
                 .addBuildDefinitionTemplate( buildDefinitionTemplate );
+            triggerAuditEvent( getPrincipal(), AuditLogConstants.TEMPLATE, buildDefinitionTemplate.getName(), AuditLogConstants.ADD_TEMPLATE );
         }
 
         return SUCCESS;
@@ -158,6 +161,7 @@
             buildDefinitionTemplate =
                 getContinuum().getBuildDefinitionService().getBuildDefinitionTemplate(
                                                                                        this.buildDefinitionTemplate.getId() );
+            triggerAuditEvent( getPrincipal(), AuditLogConstants.TEMPLATE, buildDefinitionTemplate.getName(), AuditLogConstants.REMOVE_TEMPLATE );
             this.getContinuum().getBuildDefinitionService().removeBuildDefinitionTemplate( buildDefinitionTemplate );
         }
         else

Modified: continuum/trunk/continuum-webapp/src/main/resources/META-INF/plexus/application.xml
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/resources/META-INF/plexus/application.xml?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/resources/META-INF/plexus/application.xml (original)
+++ continuum/trunk/continuum-webapp/src/main/resources/META-INF/plexus/application.xml Wed Apr  8 23:57:04 2009
@@ -157,7 +157,7 @@
           <allowedScheme>http</allowedScheme>
           <allowedScheme>https</allowedScheme>
           <allowedScheme>ftp</allowedScheme>
-          <!-- <allowedScheme>file</allowedScheme> -->
+          <allowedScheme>file</allowedScheme>
         </allowedSchemes>
       </configuration>
     </component>

Modified: continuum/trunk/continuum-webapp/src/main/resources/log4j.xml
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/resources/log4j.xml?rev=763464&r1=763463&r2=763464&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/resources/log4j.xml (original)
+++ continuum/trunk/continuum-webapp/src/main/resources/log4j.xml Wed Apr  8 23:57:04 2009
@@ -29,6 +29,15 @@
       <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
     </layout>
   </appender>
+  
+  <appender name="continuumAuditlog" class="org.apache.log4j.DailyRollingFileAppender">
+    <param name="file" value="${appserver.base}/logs/continuum-audit.log" />
+    <param name="append" value="true" />
+    <param name="datePattern" value="'.'yyyy-MM-dd" />
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %m%n"/>
+    </layout>
+  </appender>
 
   <appender name="redbackAuditLog" class="org.apache.log4j.DailyRollingFileAppender">
     <param name="file" value="${appserver.base}/logs/continuum-security-audit.log" />
@@ -38,6 +47,11 @@
       <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} - %X{redback.currentUser} - %m%n"/>
     </layout>
   </appender>
+  
+  <logger name="AuditLog">
+    <level value="info" />
+    <appender-ref ref="continuumAuditlog" />
+  </logger>
 
   <logger name="org.codehaus.plexus.redback.struts2.action.AuditEvent" additivity="false">
     <level value="info" />



Re: svn commit: r763464 - in /continuum/trunk: continuum-purge/ continuum-purge/src/main/java/org/apache/continuum/purge/ continuum-purge/src/main/java/org/apache/continuum/purge/executor/ continuum-webapp/src/main/java/org/apache/continuum/web/util/ conti...

Posted by "Jevica Arianne B. Zurbano" <je...@gmail.com>.
Thanks for the comments Brett! :)

I will revise the logging with your suggestions.

-- 

Thanks,

Jev


Re: svn commit: r763464 - in /continuum/trunk: continuum-purge/ continuum-purge/src/main/java/org/apache/continuum/purge/ continuum-purge/src/main/java/org/apache/continuum/purge/executor/ continuum-webapp/src/main/java/org/apache/continuum/web/util/ conti...

Posted by Brett Porter <br...@apache.org>.
Hi Jev,

Some comments on this...

On 09/04/2009, at 9:57 AM, jzurbano@apache.org wrote:

> Modified: continuum/trunk/continuum-purge/pom.xml
> URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-purge/pom.xml?rev=763464&r1=763463&r2=763464&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- continuum/trunk/continuum-purge/pom.xml (original)
> +++ continuum/trunk/continuum-purge/pom.xml Wed Apr  8 23:57:04 2009
> @@ -86,6 +86,11 @@
>        </exclusion>
>      </exclusions>
>    </dependency>
> +    <dependency>
> +      <groupId>org.slf4j</groupId>
> +      <artifactId>slf4j-log4j12</artifactId>
> +      <scope>runtime</scope>
> +    </dependency>

I find it's best to just put the simple logger in at test scope and  
let the eventual user (in continuum, the webapp and the CLI apps)  
determine the runtime logging framework.

> +    private static final char DELIM = ' ';
>
> +    private Logger logger = LoggerFactory.getLogger( "AuditLog" );

Instead of doing the log message processing in the executor, how about  
moving all the logging activity into an audit log component, similar  
to the one in redback?
> import org.apache.maven.continuum.ContinuumException;
> import  
> org 
> .apache 
> .maven.continuum.builddefinition.BuildDefinitionServiceException;
> import  
> org 
> .apache 
> .maven.continuum.project.builder.ContinuumProjectBuildingResult;
> @@ -58,9 +63,15 @@
>        throws ContinuumException
>    {
>        ContinuumProjectBuildingResult result = null;
> +
> +        String groupId = "";
> +
> +        String artifactId = "";
> +
> +        String resource = "";
>
>        // TODO: remove this part once uploading of an m2 project  
> with modules is supported ( CONTINUUM-1098 )
> -        if ( checkProtocol == false )
> +        if ( ( checkProtocol == false ) || ( ( checkProtocol ==  
> true ) && ( pomUrl.startsWith( FILE_SCHEME ) ) ) )
>        {
>            MavenXpp3Reader m2pomReader = new MavenXpp3Reader();
>
> @@ -80,10 +91,14 @@
>                }
>
>                Model model = m2pomReader.read( new  
> FileReader( filePath ) );
> +
> +                groupId = model.getGroupId();
> +                artifactId = model.getArtifactId();
> +                resource =  groupId + ":" + artifactId;
>
>                List modules = model.getModules();
>
> -                if ( modules != null && modules.size() != 0 )
> +                if ( ( checkProtocol == false ) && ( modules !=  
> null && modules.size() != 0 ) )
>                {
>                    result = new ContinuumProjectBuildingResult();
>                     
> result.addError( ERROR_UPLOADING_M2_PROJECT_WITH_MODULES );
> @@ -102,12 +117,49 @@
>                throw new  
> ContinuumException( ERROR_READING_POM_EXCEPTION_MESSAGE, e );
>            }
>        }
> +        else
> +        {
> +            if ( ( pomUrl.startsWith( "http" ) ) &&  
> ( pomUrl.endsWith( "pom.xml" ) ) )
> +            {
> +                try
> +                {
> +                    URL url = new URL( pomUrl );
> +                    BufferedReader in = new BufferedReader( new  
> InputStreamReader( url.openStream() ) );
> +                    StringBuilder content = new StringBuilder();
> +                    String line = in.readLine();
> +
> +                    while ( line != null )
> +                    {
> +                        content.append( line );
> +                        line = in.readLine();
> +                    }
> +                    in.close();
> +
> +                    if ( content.length() > 0 )
> +                    {
> +                        groupId = getSubString( content.toString(),  
> "<groupId>", "</groupId>" );
> +                        artifactId =  
> getSubString( content.toString(), "<artifactId>", "</artifactId>" );
> +                        resource = groupId + ":" + artifactId;
> +                    }
> +                }
> +                catch ( MalformedURLException e )
> +                {
> +                     
> addActionError( ERROR_READING_POM_EXCEPTION_MESSAGE );
> +                }
> +                catch ( IOException e )
> +                {
> +                    throw new  
> ContinuumException( ERROR_READING_POM_EXCEPTION_MESSAGE, e );
> +                }
> +            }
> +        }
>
>        if ( result == null )
>        {
>            result = getContinuum().addMavenTwoProject( pomUrl,  
> selectedProjectGroup, checkProtocol, scmUseCache,
>                                                        ! 
> this.isNonRecursiveProject(), this.getBuildDefinitionTemplateId() );
>        }
> +
> +        triggerAuditEvent( getPrincipal(),  
> AuditLogConstants.PROJECT, resource,  
> AuditLogConstants.ADD_M2_PROJECT );
>
>        return result;
>    }
> @@ -159,5 +211,16 @@
>    {
>        this.nonRecursiveProject = nonRecursiveProject;
>    }
> +
> +    private String getSubString( String content, String tagStart,  
> String tagEnd )
> +    {
> +        String subString = "";
> +
> +        int start = content.indexOf( tagStart ) + tagStart.length();
> +        int end = content.indexOf( tagEnd );
> +        subString = content.substring( start, end );
> +
> +        return subString;
> +    }
>
> }

Most of this seems an unrelated change?

>
> +
> +        Project proj = getContinuum().getProject( projectId );
> +        triggerAuditEvent( getPrincipal(),  
> AuditLogConstants.PROJECT, proj.getGroupId() + ":" +  
> proj.getArtifactId(), AuditLogConstants.FORCE_BUILD );

Getting the project can be costly, just for logging - can you use  
existing IDs instead?
>
> +	
> +	        Project proj = getContinuum().getProject( projectId );
> +
> +          triggerAuditEvent( getPrincipal(),  
> AuditLogConstants.PROJECT, proj.getGroupId() + ":" +  
> proj.getArtifactId(), AuditLogConstants.CANCEL_BUILD );

as above :)
>
> +
> +        Project proj = getContinuum().getProject( projectId );
> +        triggerAuditEvent( getPrincipal(),  
> AuditLogConstants.PROJECT, proj.getGroupId() + ":" +
> +                           proj.getArtifactId(),  
> AuditLogConstants.REMOVE_PROJECT );

Another one here.
>
> -                    logger.info( "Removing Project with id=" +  
> projectId );
> +                    Project proj =  
> getContinuum().getProject( projectId );
> +                    triggerAuditEvent( getPrincipal(),  
> AuditLogConstants.PROJECT, proj.getGroupId() + ":" +
> +                                       proj.getArtifactId(),  
> AuditLogConstants.REMOVE_PROJECT );

And one more :)
>
> Modified: continuum/trunk/continuum-webapp/src/main/resources/META- 
> INF/plexus/application.xml
> URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/resources/META-INF/plexus/application.xml?rev=763464&r1=763463&r2=763464&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- continuum/trunk/continuum-webapp/src/main/resources/META-INF/ 
> plexus/application.xml (original)
> +++ continuum/trunk/continuum-webapp/src/main/resources/META-INF/ 
> plexus/application.xml Wed Apr  8 23:57:04 2009
> @@ -157,7 +157,7 @@
>          <allowedScheme>http</allowedScheme>
>          <allowedScheme>https</allowedScheme>
>          <allowedScheme>ftp</allowedScheme>
> -          <!-- <allowedScheme>file</allowedScheme> -->
> +          <allowedScheme>file</allowedScheme>
>        </allowedSchemes>
>      </configuration>
>    </component>

Seems to have snuck in?

>
> +
> +  <logger name="AuditLog">
> +    <level value="info" />
> +    <appender-ref ref="continuumAuditlog" />
> +  </logger>

If using a class, you can have a more specific name like the one  
below. Don't forget to add additivity="false"!

>
>  <logger  
> name="org.codehaus.plexus.redback.struts2.action.AuditEvent"  
> additivity="false">
>    <level value="info" />
>
>

Cheers,
Brett