add a remote log to log from javascript to server log

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1436858 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Olivier Lamy 2013-01-22 12:08:10 +00:00
parent fc0b17de62
commit 2f96f5acee
5 changed files with 273 additions and 0 deletions

View File

@ -0,0 +1,80 @@
package org.apache.archiva.web.api;
/*
* 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.archiva.web.model.JavascriptLog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* @author Olivier Lamy
* @since 1.4-M4
*/
@Service( "javascriptLogger#default" )
public class DefaultJavascriptLogger
implements JavascriptLogger
{
private Logger logger = LoggerFactory.getLogger( getClass() );
public Boolean trace( JavascriptLog javascriptLog )
{
Logger toUse =
javascriptLog.getLoggerName() == null ? logger : LoggerFactory.getLogger( javascriptLog.getLoggerName() );
toUse.trace( javascriptLog.getMessage() );
return Boolean.TRUE;
}
public Boolean debug( JavascriptLog javascriptLog )
{
Logger toUse =
javascriptLog.getLoggerName() == null ? logger : LoggerFactory.getLogger( javascriptLog.getLoggerName() );
toUse.debug( javascriptLog.getMessage() );
return Boolean.TRUE;
}
public Boolean info( JavascriptLog javascriptLog )
{
Logger toUse =
javascriptLog.getLoggerName() == null ? logger : LoggerFactory.getLogger( javascriptLog.getLoggerName() );
toUse.info( javascriptLog.getMessage() );
return Boolean.TRUE;
}
public Boolean warn( JavascriptLog javascriptLog )
{
Logger toUse =
javascriptLog.getLoggerName() == null ? logger : LoggerFactory.getLogger( javascriptLog.getLoggerName() );
toUse.warn( javascriptLog.getMessage() );
return Boolean.TRUE;
}
public Boolean error( JavascriptLog javascriptLog )
{
Logger toUse =
javascriptLog.getLoggerName() == null ? logger : LoggerFactory.getLogger( javascriptLog.getLoggerName() );
toUse.error( javascriptLog.getMessage() );
return Boolean.TRUE;
}
}

View File

@ -0,0 +1,73 @@
package org.apache.archiva.web.api;
/*
* 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.archiva.redback.authorization.RedbackAuthorization;
import org.apache.archiva.web.model.JavascriptLog;
import javax.ws.rs.Consumes;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
/**
* @author Olivier Lamy
* @since 1.4-M4
*/
@Path( "/javascriptLogger/" )
public interface JavascriptLogger
{
@PUT
@Path( "trace" )
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@RedbackAuthorization( noRestriction = true, noPermission = true)
Boolean trace( JavascriptLog javascriptLog );
@PUT
@Path( "debug" )
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@RedbackAuthorization( noRestriction = true, noPermission = true)
Boolean debug( JavascriptLog javascriptLog );
@PUT
@Path( "info" )
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@RedbackAuthorization( noRestriction = true, noPermission = true)
Boolean info( JavascriptLog javascriptLog );
@PUT
@Path( "warn" )
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@RedbackAuthorization( noRestriction = true, noPermission = true)
Boolean warn( JavascriptLog javascriptLog );
@PUT
@Path( "error" )
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@RedbackAuthorization( noRestriction = true, noPermission = true)
Boolean error( JavascriptLog javascriptLog );
}

View File

@ -0,0 +1,72 @@
package org.apache.archiva.web.model;
/*
* 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 javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
/**
* @author Olivier Lamy
* @since 1.4-M4
*/
@XmlRootElement( name = "javascriptLog" )
public class JavascriptLog
implements Serializable
{
private String loggerName;
private String message;
public JavascriptLog()
{
// no op
}
public String getLoggerName()
{
return loggerName;
}
public void setLoggerName( String loggerName )
{
this.loggerName = loggerName;
}
public String getMessage()
{
return message;
}
public void setMessage( String message )
{
this.message = message;
}
@Override
public String toString()
{
final StringBuilder sb = new StringBuilder();
sb.append( "JavascriptLog" );
sb.append( "{loggerName='" ).append( loggerName ).append( '\'' );
sb.append( ", message='" ).append( message ).append( '\'' );
sb.append( '}' );
return sb.toString();
}
}

View File

@ -51,6 +51,7 @@
<ref bean="runtimeInfoService#rest"/>
<ref bean="dataValidatorService#rest"/>
<ref bean="fileUploadService#rest"/>
<ref bean="javascriptLogger#default"/>
</jaxrs:serviceBeans>
<jaxrs:outInterceptors>

View File

@ -495,6 +495,53 @@ require(["jquery","jquery.tmpl","i18n","knockout"], function(jquery,jqueryTmpl,i
mainContent.find(".tooltip-doc" ).tooltip({html: true, trigger: 'hover'});
}
//------------------------------------
// remote logging
//------------------------------------
JavascriptLog=function(loggerName,message){
this.loggerName=loggerName;
this.message=message;
}
remoteLogTrace=function(loggerName,message){
var javascriptLog=new JavascriptLog(loggerName,message);
remoteLog("trace",javascriptLog);
}
remoteLogDebug=function(loggerName,message){
var javascriptLog=new JavascriptLog(loggerName,message);
remoteLog("debug",javascriptLog);
}
remoteLogInfo=function(loggerName,message){
var javascriptLog=new JavascriptLog(loggerName,message);
remoteLog("info",javascriptLog);
}
remoteLogWarn=function(loggerName,message){
var javascriptLog=new JavascriptLog(loggerName,message);
remoteLog("warn",javascriptLog);
}
remoteLogError=function(loggerName,message){
var javascriptLog=new JavascriptLog(loggerName,message);
remoteLog("error",javascriptLog);
}
/**
*
* @param level trace/debug/info/warn/error
* @param javascriptLog
*/
remoteLog=function(level,javascriptLog){
$.ajax("restServices/archivaUiServices/javascriptLogger/"+level,{
type: "PUT",
contentType: 'application/json',
data: $.toJSON(javascriptLog)
}
);
}
//-----------------------------------------
// extends jquery tmpl to support var def
//-----------------------------------------