use of com.predic8.membrane.core.interceptor.Interceptor.Flow in project service-proxy by membrane.
the class LimitedMemoryExchangeStore method oldSnap.
private void oldSnap(AbstractExchange exc, Flow flow) {
// TODO: [fix me] support multi-snap
// TODO: [fix me] snap message headers and request *here*, not in observer/response
exc.addExchangeViewerListener(new AbstractExchangeViewerListener() {
@Override
public void setExchangeFinished() {
inflight.remove(exc);
}
});
if (flow == Flow.REQUEST) {
exc.getRequest().addObserver(new MessageObserver() {
@Override
public void bodyRequested(AbstractBody body) {
}
@Override
public void bodyComplete(AbstractBody body) {
Response r = exc.getResponse();
if (r != null) {
AbstractBody b = r.getBody();
if (b != null && b.isRead())
// request-bodyComplete might occur after response-bodyComplete
return;
}
// System.out.println("Exchange put inflight " + exc.hashCode() + " " + exc.getRequest().getStartLine());
inflight.put(exc, exc.getRequest());
modify();
}
});
return;
}
try {
Message m = exc.getResponse();
if (m != null)
m.addObserver(new MessageObserver() {
public void bodyRequested(AbstractBody body) {
}
public void bodyComplete(AbstractBody body) {
snapInternal(exc, flow);
inflight.remove(exc);
modify();
// System.out.println("Exchange remove inflight " + exc.hashCode());
}
});
else {
inflight.remove(exc);
modify();
// System.out.println("Exchange remove inflight " + exc.hashCode() + " (2)");
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
use of com.predic8.membrane.core.interceptor.Interceptor.Flow in project service-proxy by membrane.
the class AdminPageBuilder method createServiceProxyVisualization.
public void createServiceProxyVisualization(AbstractServiceProxy proxy, String relativeRootPath) {
List<Interceptor> leftStack = new ArrayList<Interceptor>(), rightStack = new ArrayList<Interceptor>();
List<Interceptor> list = new ArrayList<Interceptor>(proxy.getInterceptors());
list.add(new // fake interceptor so that both stacks end with the same size
AbstractInterceptor() {
@Override
public EnumSet<Flow> getFlow() {
return Flow.Set.REQUEST_RESPONSE;
}
});
// build left and right stacks
for (Interceptor i : list) {
EnumSet<Flow> f = i.getFlow();
if (i instanceof ResponseInterceptor) {
for (Interceptor i2 : ((ResponseInterceptor) i).getInterceptors()) rightStack.add(i2);
} else if (i instanceof RequestInterceptor) {
for (Interceptor i3 : ((RequestInterceptor) i).getInterceptors()) leftStack.add(i3);
} else if (f.contains(Flow.REQUEST)) {
if (f.contains(Flow.RESPONSE)) {
// fill left and right to same height
while (leftStack.size() < rightStack.size()) leftStack.add(null);
while (rightStack.size() < leftStack.size()) rightStack.add(null);
// put i into both
leftStack.add(i);
rightStack.add(i);
} else {
leftStack.add(i);
}
} else {
if (f.contains(Flow.RESPONSE)) {
rightStack.add(i);
}
}
}
boolean noTarget = proxy.getTargetURL() == null && proxy.getTargetHost() == null;
table().cellspacing("0px").cellpadding("0px").classAttr("spv").style("width:662px");
createListenerRow(proxy);
if (leftStack.size() > 1 || !noTarget) {
createBeginArrowsRow();
for (int i = 0; i < leftStack.size() - 1 - (noTarget ? 1 : 0); i++) {
tr().style("background:url(\"" + relativeRootPath + "/admin/images/spv-middle.png\");background-repeat:repeat-y;display:inline-table");
createInterceptorRow(leftStack, rightStack, i, false);
end();
}
createEndArrowsRow();
if (noTarget) {
tr();
createInterceptorRow(leftStack, rightStack, leftStack.size() - 2, true);
end();
} else {
createTargetRow(proxy);
}
}
end();
}
use of com.predic8.membrane.core.interceptor.Interceptor.Flow in project service-proxy by membrane.
the class ElasticSearchExchangeStore method snap.
@Override
public void snap(AbstractExchange exc, Interceptor.Flow flow) {
AbstractExchangeSnapshot excCopy = null;
try {
if (flow == Interceptor.Flow.REQUEST) {
excCopy = new DynamicAbstractExchangeSnapshot(exc, this::addForElasticSearch);
addForElasticSearch(excCopy);
} else {
excCopy = getExchangeDtoById((int) exc.getId());
DynamicAbstractExchangeSnapshot.addObservers(exc, excCopy, this::addForElasticSearch);
excCopy = excCopy.updateFrom(exc);
addForElasticSearch(excCopy);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
use of com.predic8.membrane.core.interceptor.Interceptor.Flow in project service-proxy by membrane.
the class LimitedMemoryExchangeStore method addObservers.
private void addObservers(AbstractExchange exc, AbstractExchange excCopy, Flow flow) throws Exception {
Message msg = null;
if (flow == Flow.REQUEST) {
msg = exc.getRequest();
} else
msg = exc.getResponse();
msg.addObserver(new MessageObserver() {
@Override
public void bodyRequested(AbstractBody body) {
}
@Override
public void bodyComplete(AbstractBody body) {
try {
cleanSnapshot(Exchange.updateCopy(exc, excCopy));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
exc.addExchangeViewerListener(new AbstractExchangeViewerListener() {
@Override
public void setExchangeFinished() {
try {
cleanSnapshot(Exchange.updateCopy(exc, excCopy));
} catch (Exception e) {
e.printStackTrace();
}
}
});
cleanSnapshot(Exchange.updateCopy(exc, excCopy));
}
use of com.predic8.membrane.core.interceptor.Interceptor.Flow in project service-proxy by membrane.
the class LimitedMemoryExchangeStore method newSnap.
private void newSnap(AbstractExchange exc, Flow flow) {
AbstractExchange excCopy = null;
try {
if (flow == Flow.REQUEST) {
excCopy = cleanSnapshot(exc.createSnapshot());
snapInternal(excCopy, flow);
} else
excCopy = cleanSnapshot(Exchange.updateCopy(exc, getExchangeById((int) exc.getId())));
addObservers(exc, excCopy, flow);
modify();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Aggregations