2014-04-22 8 views
0

스프링 인사이트 documentation 상태 :Insight에서 분석 할 코드를 지정하는 다른 방법은 무엇입니까?

트레이스는 실행 스레드를 나타냅니다. 일반적으로 HTTP 요청에 의해 시작되지만 백그라운드 작업으로 시작할 수도 있습니다.

내 응용 프로그램 아키텍처 스타일은 백그라운드에서 실행중인 대기열 중 하나이기도합니다. 그러나 Spring Insight가 이러한 호출을 대기중인 메시지로 시작하도록하는 방법을 알아낼 수는 없습니다. 나는. 메시지가 대기열에서 읽힌 후 추적을 계측하고 싶습니다.

인사이트 계측기가 이러한 백그라운드 작업을 어떻게 보장합니까?

답변

0

모든 명령 처리기를 대상으로하는 부분이 만들어졌습니다. AbstractOperationCollectionAspect을 확장하고, createOperation 메소드를 구현할 때 사용할 핸들러로 핸들러에서 전달하는 collectionPoint 애스펙트를 구현합니다.
즉,

public aspect CommandHandlerOperationCollectionAspect extends AbstractOperationCollectionAspect 
{ 

    public pointcut collectionPoint(): 
      execution(* com.xtrac.common.core.handler.ThreadedHandler.HandlerRunnable.executeActorHandler(com.xtrac.common.core.handler.Handler,java.lang.Object)); 


    protected Operation createOperation(JoinPoint jp) 
    { 
     Object[] args = jp.getArgs(); 
     com.xtrac.common.core.handler.Handler handler = (Handler) args[0]; 
     Operation operation = new Operation() 
       .type(XTRACOperationType.COMMAND_HANDLER) 
       .label(handler.getClass().getSimpleName()) 
       .sourceCodeLocation(getSourceCodeLocation(jp)); 
     return operation; 
    } 

    @Override 
    public String getPluginName() 
    { 
     return HandlerPluginRuntimeDescriptor.PLUGIN_NAME; 
    } 

    @Override 
    public boolean isMetricsGenerator() 
    { 
     return true; 
    } 
} 

는 또한 분석기 작성하는 AbstractSingleTypeEndpointAnalyzer을 구현 : 공용 클래스가 HandlerEndPointAnalyzer이 AbstractSingleTypeEndpointAnalyzer 확장을 { 개인 정적 최종 HandlerEndPointAnalyzer INSTANCE = 새로운 HandlerEndPointAnalyzer();

private HandlerEndPointAnalyzer() { 
     super(XTRACOperationType.COMMAND_HANDLER); 
    } 

    public static final HandlerEndPointAnalyzer getInstance() { 
     return INSTANCE; 
    } 

    @Override 
     protected EndPointAnalysis makeEndPoint(Frame handlerFrame, int depth) { 
      Operation operation = handlerFrame.getOperation(); 
    String resourceLabel = operation.getLabel(); 
    String exampleRequest = EndPointAnalysis.getHttpExampleRequest(handlerFrame); 
    return new EndPointAnalysis(EndPointName.valueOf(resourceLabel), 
           resourceLabel, 
           exampleRequest, 
           getOperationScore(operation, depth), 
           operation); 
} 

는 기술자로 추가해야되는 :

public class HandlerPluginRuntimeDescriptor extends PluginRuntimeDescriptor { 
    public static final String PLUGIN_NAME = "handler"; 
    private static final HandlerPluginRuntimeDescriptor INSTANCE=new HandlerPluginRuntimeDescriptor(); 
    private static final List<? extends EndPointAnalyzer> epAnalyzers= 
      ArrayUtil.asUnmodifiableList(HandlerEndPointAnalyzer.getInstance()); 

    private HandlerPluginRuntimeDescriptor() { 
     super(); 
    } 

    public static final HandlerPluginRuntimeDescriptor getInstance() { 
     return INSTANCE; 
    } 

    @Override 
    public Collection<? extends EndPointAnalyzer> getEndPointAnalyzers() { 
     return epAnalyzers; 
    } 

    @Override 
    public String getPluginName() { 
     return PLUGIN_NAME; 
    } 
} 

모든 스프링 XML 파일에 기록 : 일부 ftl들과 함께

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:insight="http://www.springframework.org/schema/insight-idk" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/insight-idk http://www.springframework.org/schema/insight-idk/insight-idk-1.0.xsd"> 

    <insight:plugin name="handler" version="${project.version}" publisher="XTRAC Solutions LLC" /> 


    <insight:operation-group group="XTRAC Handlers" operation="command_handler_operation" /> 
    <insight:operation-group group="XTRAC Handlers" operation="event_handler_operation" /> 
    <insight:operation-group group="XTRAC Classic" operation="xtrac_workflow_operation" /> 

    <insight:operation-view operation="command_handler_operation" 
          template="com/xtrac/insight/command_handler_operation.ftl" /> 
    <insight:operation-view operation="event_handler_operation" 
          template="com/xtrac/insight/event_handler_operation.ftl" /> 
    <insight:operation-view operation="xtrac_workflow_operation" 
          template="com/xtrac/insight/xtrac_workflow_operation.ftl" /> 

    <bean id="handlerPluginEndPointAnalyzer" 
      class="com.xtrac.insight.HandlerEndPointAnalyzer" 
      factory-method="getInstance" 
      lazy-init="true" 
     /> 
    <bean id="handlerPluginRuntimeDescriptor" 
      class="com.xtrac.insight.HandlerPluginRuntimeDescriptor" 
      factory-method="getInstance" 
      lazy-init="true" 
      /> 

</beans> 

.

이 핸드러에서 발생하는 일부 웹 서비스 호출을 수집하기 위해 MethodOperationCollectionAspect도 생성했습니다. 이것은 핸들러 조작 중에 무슨 일이 일어나고 있는지와 얼마나 많은 시간이 걸리는지를 보여주는 멋진 디스플레이를 위해 설정합니다. 예 : 나는이 매우 유용

Thresholds

명명 된 처리기에 대한베이스 라인 임계 값을 설정 한 경우 Example of Spring Handlers with web service calls intermixed

이 은 응용 프로그램의 상태에 모니터를 유지하기위한 프레임 워크를 설정 그때 할 수 있기 때문에 응용 프로그램이 정상적으로 작동하는지 확인하십시오. 그렇지 않으면 엔드 포인트의 기본값은 < 200ms입니다.
Health