This is an automated email from the ASF dual-hosted git repository. wankai pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push: new 30748d2052 Fix Service Layer when building Events in the EventHookCallback. (#11918) 30748d2052 is described below commit 30748d2052dea49edb477cedf1fe7efbac43292a Author: Wan Kai <wankai...@foxmail.com> AuthorDate: Fri Feb 23 14:01:55 2024 +0800 Fix Service Layer when building Events in the EventHookCallback. (#11918) --- docs/en/changes/changes.md | 1 + .../core/alarm/provider/EventHookCallback.java | 20 ++++++++++++++------ .../core/alarm/provider/EventHookCallbackTest.java | 12 +++++++++--- .../server/core/query/ServiceTopologyBuilder.java | 3 +++ 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 118d0ab995..70b71e3775 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -55,6 +55,7 @@ * Fix table exists check in the JDBC Storage Plugin. * Fix day-based table rolling time range strategy in JDBC storage. * Add `maxInboundMessageSize (SW_DCS_MAX_INBOUND_MESSAGE_SIZE)` configuration to change the max inbound message size of DCS. +* Fix Service Layer when building Events in the EventHookCallback. #### UI diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallback.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallback.java index db4cdfac4e..acb14d2764 100644 --- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallback.java +++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallback.java @@ -28,7 +28,9 @@ import org.apache.skywalking.oap.server.core.CoreModule; import org.apache.skywalking.oap.server.core.alarm.AlarmCallback; import org.apache.skywalking.oap.server.core.alarm.AlarmMessage; import org.apache.skywalking.oap.server.core.analysis.IDManager; +import org.apache.skywalking.oap.server.core.analysis.Layer; import org.apache.skywalking.oap.server.core.query.MetadataQueryService; +import org.apache.skywalking.oap.server.core.query.type.Service; import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; import org.apache.skywalking.oap.server.library.module.ModuleManager; @@ -69,7 +71,12 @@ public class EventHookCallback implements AlarmCallback { } private String getLayer(String serviceId) throws IOException { - return getMetadataQueryService().getService(serviceId).getLayers().iterator().next(); + Service service = getMetadataQueryService().getService(serviceId); + if (service != null) { + return service.getLayers().iterator().next(); + } else { + return Layer.UNDEFINED.name(); + } } private List<Event> constructCurrentEvent(AlarmMessage msg) throws IOException { @@ -100,6 +107,7 @@ public class EventHookCallback implements AlarmCallback { .setService(sourceServiceIdDef.getName()) .build() ); + builder.setLayer(getLayer(msg.getId0())); events.add(builder.build()); IDManager.ServiceID.ServiceIDDefinition destServiceIdDef = IDManager.ServiceID.analysisId(msg.getId1()); builder.setSource( @@ -107,7 +115,7 @@ public class EventHookCallback implements AlarmCallback { .setService(destServiceIdDef.getName()) .build() ).setUuid(UUID.randomUUID().toString()); - builder.setLayer(getLayer(sourceServiceIdDef.isReal() ? msg.getId0() : msg.getId1())); + builder.setLayer(getLayer(msg.getId1())); events.add(builder.build()); break; case DefaultScopeDefine.SERVICE_INSTANCE : @@ -129,6 +137,7 @@ public class EventHookCallback implements AlarmCallback { .setService(IDManager.ServiceID.analysisId(sourceInstanceIdDef.getServiceId()).getName()) .build() ); + builder.setLayer(getLayer(sourceInstanceIdDef.getServiceId())); events.add(builder.build()); IDManager.ServiceInstanceID.InstanceIDDefinition destInstanceIdDef = IDManager.ServiceInstanceID.analysisId(msg.getId1()); builder.setSource( @@ -137,8 +146,7 @@ public class EventHookCallback implements AlarmCallback { .setService(IDManager.ServiceID.analysisId(destInstanceIdDef.getServiceId()).getName()) .build() ).setUuid(UUID.randomUUID().toString()); - IDManager.ServiceID.ServiceIDDefinition srcInstanceServiceIdDef = IDManager.ServiceID.analysisId(sourceInstanceIdDef.getServiceId()); - builder.setLayer(getLayer(srcInstanceServiceIdDef.isReal() ? sourceInstanceIdDef.getServiceId() : destInstanceIdDef.getServiceId())); + builder.setLayer(getLayer(destInstanceIdDef.getServiceId())); events.add(builder.build()); break; case DefaultScopeDefine.ENDPOINT : @@ -160,6 +168,7 @@ public class EventHookCallback implements AlarmCallback { .setService(IDManager.ServiceID.analysisId(sourceEndpointIDDef.getServiceId()).getName()) .build() ); + builder.setLayer(getLayer(sourceEndpointIDDef.getServiceId())); events.add(builder.build()); IDManager.EndpointID.EndpointIDDefinition destEndpointIDDef = IDManager.EndpointID.analysisId(msg.getId1()); builder.setSource( @@ -168,8 +177,7 @@ public class EventHookCallback implements AlarmCallback { .setService(IDManager.ServiceID.analysisId(destEndpointIDDef.getServiceId()).getName()) .build() ).setUuid(UUID.randomUUID().toString()); - IDManager.ServiceID.ServiceIDDefinition srcEndpointServiceIdDef = IDManager.ServiceID.analysisId(sourceEndpointIDDef.getServiceId()); - builder.setLayer(getLayer(srcEndpointServiceIdDef.isReal() ? sourceEndpointIDDef.getServiceId() : destEndpointIDDef.getServiceId())); + builder.setLayer(getLayer(destEndpointIDDef.getServiceId())); events.add(builder.build()); break; } diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallbackTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallbackTest.java index 08dabec7b7..de333eccb7 100644 --- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallbackTest.java +++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallbackTest.java @@ -67,7 +67,8 @@ public class EventHookCallbackTest { when(moduleServiceHolder.getService(EventAnalyzerService.class)).thenReturn(mockEventAnalyzerService); when(moduleManager.find(CoreModule.NAME)).thenReturn(moduleProviderHolder); when(moduleServiceHolder.getService(MetadataQueryService.class)).thenReturn(metadataQueryService); - when(metadataQueryService.getService(any())).thenReturn(mockService()); + Service service = mockService(); + when(metadataQueryService.getService(service.getId())).thenReturn(service); //make sure current service be called. callback.doAlarm(msgs); verify(mockEventAnalyzerService).analyze(any(Event.class)); @@ -83,6 +84,7 @@ public class EventHookCallbackTest { assertEquals("Alarm", value.getName()); assertEquals(msg.getAlarmMessage(), value.getMessage()); assertEquals(msg.getPeriod(), (value.getEndTime() - value.getStartTime()) / 1000 / 60); + assertEquals(service.getLayers().iterator().next(), value.getLayer()); } @@ -95,7 +97,8 @@ public class EventHookCallbackTest { when(moduleServiceHolder.getService(EventAnalyzerService.class)).thenReturn(eventAnalyzerService); when(moduleManager.find(CoreModule.NAME)).thenReturn(moduleProviderHolder); when(moduleServiceHolder.getService(MetadataQueryService.class)).thenReturn(metadataQueryService); - when(metadataQueryService.getService(any())).thenReturn(mockService()); + Service service = mockService(); + when(metadataQueryService.getService(service.getId())).thenReturn(service); callback.doAlarm(msgs); ArgumentCaptor<Event> argument = ArgumentCaptor.forClass(Event.class); @@ -109,6 +112,8 @@ public class EventHookCallbackTest { assertEquals((sourceEvent.getEndTime() - sourceEvent.getStartTime()) / 1000 / 60, msg.getPeriod()); assertEquals(destEvent.getSource().getService(), IDManager.ServiceID.analysisId(msg.getId1()).getName()); assertEquals((destEvent.getEndTime() - destEvent.getStartTime()) / 1000 / 60, msg.getPeriod()); + assertEquals(service.getLayers().iterator().next(), sourceEvent.getLayer()); + assertEquals(Layer.UNDEFINED.name(), destEvent.getLayer()); } private List<AlarmMessage> mockAlarmMessagesHasSingleElement() { @@ -127,7 +132,7 @@ public class EventHookCallbackTest { msg.setScopeId(DefaultScopeDefine.SERVICE_RELATION); msg.setScope(""); msg.setName("test-skywalking"); - msg.setId0(IDManager.ServiceID.buildId("sourceIdStr", true)); + msg.setId0(IDManager.ServiceID.buildId("test-skywalking", true)); msg.setId1(IDManager.ServiceID.buildId("destIdStr", true)); msg.setAlarmMessage("Alarm caused by Rule service_resp_time_rule"); msg.setPeriod(5); @@ -137,6 +142,7 @@ public class EventHookCallbackTest { private Service mockService() { Service service = new Service(); service.setName("test-skywalking"); + service.setId(IDManager.ServiceID.buildId(service.getName(), true)); service.getLayers().add(Layer.GENERAL.name()); return service; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilder.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilder.java index 181e272e3b..ba48400f74 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilder.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilder.java @@ -27,6 +27,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.CoreModule; import org.apache.skywalking.oap.server.core.analysis.IDManager; +import org.apache.skywalking.oap.server.core.analysis.Layer; import org.apache.skywalking.oap.server.core.analysis.manual.networkalias.NetworkAddressAlias; import org.apache.skywalking.oap.server.core.cache.NetworkAddressAliasCache; import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogService; @@ -216,6 +217,8 @@ class ServiceTopologyBuilder { Service service = getMetadataQueryService().getService(sourceId); if (service != null) { serviceNode.getLayers().addAll(service.getLayers()); + } else { + serviceNode.getLayers().add(Layer.UNDEFINED.name()); } return serviceNode; }