diff --git a/CHANGES.md b/CHANGES.md index bc88ad2b39ffba5ebfb516f9118792996465d2c6..87770d5eb98160ef48a11a114cd4cd861c9ca44e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -28,6 +28,7 @@ Release Notes. * Add source layer and dest layer to relation. * Follow protocol grammar fix `GCPhrase -> GCPhase`. * Set layer to mesh relation. +* Add `FAAS` to SpanLayer. #### UI diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/MultiScopesAnalysisListener.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/MultiScopesAnalysisListener.java index b0fbe72ffde182704996d78000e375bcee462b36..1ed76bd57b0a85d9409adeb9542b8cdc5ada5ae3 100644 --- a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/MultiScopesAnalysisListener.java +++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/MultiScopesAnalysisListener.java @@ -119,7 +119,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA sourceBuilder.setDestEndpointName(span.getOperationName()); sourceBuilder.setDestServiceInstanceName(segmentObject.getServiceInstance()); sourceBuilder.setDestServiceName(segmentObject.getService()); - sourceBuilder.setDestLayer(Layer.GENERAL); + sourceBuilder.setDestLayer(identifyServiceLayer(span.getSpanLayer())); sourceBuilder.setDetectPoint(DetectPoint.SERVER); sourceBuilder.setComponentId(span.getComponentId()); setPublicAttrs(sourceBuilder, span); @@ -134,7 +134,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA sourceBuilder.setSourceNormal(false); sourceBuilder.setDestServiceInstanceName(segmentObject.getServiceInstance()); sourceBuilder.setDestServiceName(segmentObject.getService()); - sourceBuilder.setDestLayer(Layer.GENERAL); + sourceBuilder.setDestLayer(identifyServiceLayer(span.getSpanLayer())); sourceBuilder.setDestEndpointName(span.getOperationName()); sourceBuilder.setDetectPoint(DetectPoint.SERVER); sourceBuilder.setComponentId(span.getComponentId()); @@ -165,13 +165,13 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA sourceBuilder.setSourceServiceName(segmentObject.getService()); sourceBuilder.setSourceServiceInstanceName(segmentObject.getServiceInstance()); - sourceBuilder.setSourceLayer(Layer.GENERAL); + sourceBuilder.setSourceLayer(identifyServiceLayer(span.getSpanLayer())); final NetworkAddressAlias networkAddressAlias = networkAddressAliasCache.get(networkAddress); if (networkAddressAlias == null) { sourceBuilder.setDestServiceName(networkAddress); sourceBuilder.setDestServiceInstanceName(networkAddress); - sourceBuilder.setDestLayer(fromSpanLayerValue(span.getSpanLayer())); + sourceBuilder.setDestLayer(identifyRemoteServiceLayer(span.getSpanLayer())); sourceBuilder.setDestNormal(false); } else { /* @@ -376,7 +376,10 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA }); } - private Layer fromSpanLayerValue(SpanLayer spanLayer) { + /** + * Identify the layer of remote service. Such as ${@link Layer#DATABASE} and ${@link Layer#CACHE}. + */ + private Layer identifyRemoteServiceLayer(SpanLayer spanLayer) { switch (spanLayer) { case Unknown: return Layer.UNDEFINED; @@ -392,11 +395,25 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA return Layer.CACHE; case UNRECOGNIZED: return Layer.UNDEFINED; + case FAAS: + return Layer.FAAS; default: throw new UnexpectedException("Can't transfer to the Layer. SpanLayer=" + spanLayer); } } + /** + * Identify the layer of span's service/instance owner. Such as ${@link Layer#FAAS} and ${@link Layer#GENERAL}. + */ + private Layer identifyServiceLayer(SpanLayer spanLayer) { + if (SpanLayer.FAAS.equals(spanLayer)) { + // function as a Service + return Layer.FAAS; + } else { + return Layer.GENERAL; + } + } + public static class Factory implements AnalysisListenerFactory { private final SourceReceiver sourceReceiver; private final NetworkAddressAliasCache networkAddressAliasCache;