/** * * Dianping.com Inc. * * Copyright (c) 2003-2013 All Rights Reserved. **/ package com.dianping.pigeon.remoting.common.domain; import java.io.Serializable; import java.util.List; import java.util.Map; import com.dianping.pigeon.remoting.common.monitor.trace.MonitorData; public interface InvocationContext<M extends MonitorData> { InvocationRequest getRequest(); void setRequest(InvocationRequest request); InvocationResponse getResponse(); /**** ** 在整个调用流程中公用,会随着调用被传播,如被修改,会随着调用流被同步 ** ** @param key ** @param value **/ void putContextValue(String key, Serializable value); /**** ** 在整个调用流程中公用,会随着调用被传播,如被修改,会随着调用流被同步 ** ** @param key ** @return **/ Serializable getContextValue(String key); /**** ** 在整个调用流程中公用,会随着调用被传播,如被修改,会随着调用流被同步 ** ** @return **/ Map<String, Serializable> getContextValues(); String getMethodUri(); void setMethodUri(String uri); List<TimePoint> getTimeline(); M getMonitorData(); void setMonitorData(M monitorData); enum TimePhase { S/** start **/ , R/** receive **/ , T/** thread pool **/ , D/** degrade **/ , Q/** request **/ , P/** response **/ , O/** monitor **/ , C/** context **/ , G/** gateway **/ , A/** authenticate **/ , U/** business **/ , M/** method **/ , F/** future **/ , B/** back **/ , E /** end **/ } public static class TimePoint { TimePhase phase; long time; public TimePoint(TimePhase phase, long time) { this.phase = phase; this.time = time; } public TimePoint(TimePhase phase) { this.phase = phase; this.time = System.currentTimeMillis(); } public TimePhase getPhase() { return phase; } public void setPhase(TimePhase phase) { this.phase = phase; } public long getTime() { return time; } public void setTime(long time) { this.time = time; } public String toString() { return phase + "" + time; } } }