feat: 添加各模块执行监听

This commit is contained in:
fit2-zhao 2023-07-24 13:57:55 +08:00 committed by fit2-zhao
parent cd3716b258
commit 54640dc32d
8 changed files with 176 additions and 0 deletions

View File

@ -0,0 +1,36 @@
package io.metersphere.listener;
import io.metersphere.api.event.APIEventSource;
import io.metersphere.plan.listener.ExecEventListener;
import io.metersphere.sdk.util.CommonBeanFactory;
import io.metersphere.sdk.util.LogUtils;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@Component
public class AppStartListener implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
LogUtils.info("================= 应用启动 =================");
// 注册所有监听源
LogUtils.info("初始化接口事件源");
APIEventSource apiEventSource = CommonBeanFactory.getBean(APIEventSource.class);
LogUtils.info("初始化性能测试事件源");
//LoadEventSource loadEventSource = CommonBeanFactory.getBean(LoadEventSource.class);
//todo: 注册其他事件源
// 创建监听器对象并注册到多个事件源
ExecEventListener listener = CommonBeanFactory.getBean(ExecEventListener.class);
apiEventSource.addListener(listener);
//todo: 注册其他监听器
//loadEventSource.addListener(listener);
// 触发事件
apiEventSource.fireEvent("API", "Event after removing the listener test.");
//loadEventSource.fireEvent("LOAD","Event after removing the listener.");
}
}

View File

@ -0,0 +1,19 @@
package io.metersphere.sdk.listener;
public class Event {
private String message;
private String module;
public Event(String module, String message) {
this.module = module;
this.message = message;
}
public String getMessage() {
return message;
}
public String getModule() {
return module;
}
}

View File

@ -0,0 +1,10 @@
package io.metersphere.sdk.listener;
/**
* 监听所有执行结果
*
* @param <T>
*/
public interface EventListener<T> {
void onEvent(T event);
}

View File

@ -0,0 +1,15 @@
package io.metersphere.sdk.listener;
public interface EventSource {
/**
* @param listener
*/
void addListener(EventListener<Event> listener);
/**
* @param module
* @param message
*/
void fireEvent(String module, String message);
}

View File

@ -0,0 +1,22 @@
package io.metersphere.api.event;
import io.metersphere.sdk.listener.Event;
import io.metersphere.sdk.listener.EventListener;
import io.metersphere.sdk.listener.EventSource;
import org.springframework.stereotype.Component;
@Component
public class APIEventSource implements EventSource {
private EventListener<Event> listener;
@Override
public void addListener(EventListener<Event> listener) {
this.listener = listener;
}
@Override
public void fireEvent(String module, String message) {
Event event = new Event("API", message);
listener.onEvent(event);
}
}

View File

@ -0,0 +1,36 @@
package io.metersphere.api.controller;
import io.metersphere.api.event.APIEventSource;
import io.metersphere.sdk.listener.Event;
import io.metersphere.sdk.listener.EventListener;
import io.metersphere.sdk.util.CommonBeanFactory;
import io.metersphere.sdk.util.LogUtils;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@AutoConfigureMockMvc
public class EventSourceTests {
@Test
@Order(0)
public void eventSourceTest() throws Exception {
// 注册所有监听源
LogUtils.info("初始化接口事件源");
APIEventSource apiEventSource = CommonBeanFactory.getBean(APIEventSource.class);
apiEventSource.addListener(new EventListener<Event>() {
@Override
public void onEvent(Event event) {
LogUtils.info("ExecEventListener: " + event.getModule() + "" + event.getMessage());
}
});
// 触发事件
apiEventSource.fireEvent("API", "Event after removing the listener test.");
}
}

View File

@ -0,0 +1,15 @@
package io.metersphere.plan.listener;
import io.metersphere.sdk.listener.Event;
import io.metersphere.sdk.listener.EventListener;
import io.metersphere.sdk.util.LogUtils;
import org.springframework.stereotype.Component;
@Component
public class ExecEventListener implements EventListener<Event> {
@Override
public void onEvent(Event event) {
// todo: 测试计划事件处理逻辑
LogUtils.info("ExecEventListener: " + event.getModule() + "" + event.getMessage());
}
}

View File

@ -0,0 +1,23 @@
package io.metersphere.plan.controller;
import io.metersphere.plan.listener.ExecEventListener;
import io.metersphere.sdk.listener.Event;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@AutoConfigureMockMvc
public class EventListenerTests {
@Test
@Order(0)
public void eventSourceTest() throws Exception {
new ExecEventListener().onEvent(new Event("TEST", "Event after removing the listener test."));
}
}