@ -5,22 +5,18 @@ import com.fr.general.GeneralUtils;
import com.fr.intelli.measure.Estimator ;
import com.fr.intelli.metrics.Compute ;
import com.fr.intelli.metrics.MessageRecorderFactory ;
import com.fr.intelli.metrics.SessionBinder ;
import com.fr.intelli.metrics.SupervisoryConfig ;
import com.fr.intelli.record.Measurable ;
import com.fr.intelli.record.MeasureObject ;
import com.fr.intelli.record.MeasureUnit ;
import com.fr.log.FineLoggerFactory ;
import com.fr.measure.DBMeterFactory ;
import com.fr.stable.ArrayUtils ;
import com.fr.stable.StringUtils ;
import com.fr.stable.web.Session ;
import com.fr.stable.web.SessionProvider ;
import com.fr.third.net.bytebuddy.asm.Advice ;
import com.fr.third.net.bytebuddy.implementation.bytecode.assign.Assigner ;
import com.fr.web.core.SessionPoolManager ;
import com.fr.web.session.SessionLocalManager ;
import java.lang.annotation.Annotation ;
import java.lang.reflect.Method ;
import java.util.ArrayList ;
import java.util.Arrays ;
@ -41,10 +37,11 @@ public class MonitorAdvice implements DesignerAnalyzerAdvice {
public static void onMethodEnter ( @Advice.Origin Method method ,
@Advice.AllArguments ( typing = Assigner . Typing . DYNAMIC ) Object [ ] args ,
@Advice.Local ( "startTime" ) Long startTime ,
@Advice.Local ( "regi steredS ession" ) Boolean registeredSession ) {
@Advice.Local ( "sessionBinder " ) SessionBinder sessionBinder ) {
startTime = ( System . currentTimeMillis ( ) ) ;
registeredSession = ( findSessionAnnotation ( method , args ) ) ;
sessionBinder = new SessionBinder ( ) ;
sessionBinder . attachSession ( method , args ) ;
}
@Advice.OnMethodExit ( onThrowable = Exception . class )
@ -53,12 +50,10 @@ public class MonitorAdvice implements DesignerAnalyzerAdvice {
@Advice.AllArguments ( typing = Assigner . Typing . DYNAMIC ) Object [ ] args ,
@Advice.Thrown ( typing = Assigner . Typing . DYNAMIC ) Exception e ,
@Advice.Local ( "startTime" ) Long startTime ,
@Advice.Local ( "regi steredS ession" ) Boolean registeredSession ) throws Exception {
@Advice.Local ( "sessionBinder " ) SessionBinder sessionBinder ) throws Exception {
String error = StringUtils . EMPTY ;
try {
if ( e ! = null ) {
try {
error = getErrorContent ( e ) ;
@ -95,10 +90,7 @@ public class MonitorAdvice implements DesignerAnalyzerAdvice {
} catch ( Exception ignore ) {
//埋点信息入库失败应该不能影响业务流程
} finally {
if ( registeredSession ) {
// 如果上面记录了,这里就要释放
SessionLocalManager . releaseSession ( ) ;
}
sessionBinder . detachSession ( ) ;
}
}
}
@ -136,20 +128,4 @@ public class MonitorAdvice implements DesignerAnalyzerAdvice {
measureObject . memory ( unit . measureMemory ( ) ) ;
}
}
public static boolean findSessionAnnotation ( Method method , Object [ ] args ) {
Annotation [ ] [ ] all = method . getParameterAnnotations ( ) ;
int len = ArrayUtils . getLength ( args ) ;
for ( int i = 0 ; i < len ; i + + ) {
Annotation [ ] current = all [ i ] ;
for ( Annotation annotation : current ) {
if ( annotation . annotationType ( ) . equals ( Session . class ) ) {
SessionLocalManager . setSession (
SessionPoolManager . getSessionIDInfor ( GeneralUtils . objectToString ( args [ i ] ) , SessionProvider . class ) ) ;
return true ;
}
}
}
return false ;
}
}