diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthExecutor.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthExecutor.java index be21f14f..c43bc984 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthExecutor.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthExecutor.java @@ -50,6 +50,8 @@ public class HealthExecutor { public void execute(AbstractHealthCheckService service) { final long startTime = System.currentTimeMillis(); + //TODO: execute is called by a ScheduledThreadPoolExecutor, + // when called, it should check if current service should doCheck(check service check rate can be dynamically configured). try { memoryCache.update(service.getConfig().getHealthCheckResourceType(), service.getConfig().getInstanceId(), HealthCheckStatus.CHECKING, "", null, service.getConfig()); diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthService.java index 69eaf171..d8b395d5 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthService.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/health/HealthService.java @@ -17,6 +17,8 @@ package org.apache.eventmesh.dashboard.console.health; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import org.apache.eventmesh.dashboard.console.health.annotation.HealthCheckType; import org.apache.eventmesh.dashboard.console.health.check.AbstractHealthCheckService; import org.apache.eventmesh.dashboard.console.health.check.config.HealthCheckObjectConfig; @@ -36,8 +38,8 @@ /** * HealthService is the manager of all health check services. It is responsible for creating, deleting and executing health check services.
In - * this class has a {@link HealthExecutor} which is used to execute health check services, and also a map to store all health check services. when the - * function executeAll is called, health check service will be executed by {@link HealthExecutor}. + * this class there is a {@link HealthExecutor} which is used to execute health check services, and also a map to store all health check services. + * when the function executeAll is called, health check service will be executed by {@link HealthExecutor}. */ @Slf4j public class HealthService { @@ -67,6 +69,8 @@ private static void setClassCache(Class clazz) { */ private Map> checkServiceMap = new ConcurrentHashMap<>(); + private ScheduledThreadPoolExecutor scheduledExecutor; + public void insertCheckService(List configList) { configList.forEach(this::insertCheckService); } @@ -141,4 +145,23 @@ private AbstractHealthCheckService createCheckService(Class clazz, HealthChec Constructor constructor = clazz.getConstructor(HealthCheckObjectConfig.class); return (AbstractHealthCheckService) constructor.newInstance(config); } + + /** + * start scheduled execution of health check services + * + * @param initialDelay unit is second + * @param period unit is second + */ + public void startScheduledExecution(long initialDelay, long period) { + if (scheduledExecutor == null) { + scheduledExecutor = new ScheduledThreadPoolExecutor(1); + } + scheduledExecutor.scheduleAtFixedRate(this::executeAll, initialDelay, period, TimeUnit.SECONDS); + } + + public void stopScheduledExecution() { + if (scheduledExecutor != null) { + scheduledExecutor.shutdown(); + } + } } diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManager.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManager.java new file mode 100644 index 00000000..7535c95f --- /dev/null +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManager.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.console.spring.support; + +import lombok.Getter; +import org.apache.eventmesh.dashboard.console.health.CheckResultCache; +import org.apache.eventmesh.dashboard.console.health.HealthService; +import org.apache.eventmesh.dashboard.console.service.health.HealthDataService; + +import lombok.Setter; + +/** + * FunctionManager is in charge of tasks such as scheduled health checks + */ +public class FunctionManager { + + @Setter + private FunctionManagerProperties properties; + + @Getter + private HealthService healthService; + + @Setter + private HealthDataService healthDataService; + + public void initFunctionManager() { + // HealthService Initialization + healthService = new HealthService(); + CheckResultCache checkResultCache = new CheckResultCache(); + healthService.createExecutor(healthDataService, checkResultCache); + healthService.startScheduledExecution(5, 5); + } +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManagerBean.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManagerBean.java new file mode 100644 index 00000000..a149479c --- /dev/null +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManagerBean.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.console.spring.support; + +import javax.annotation.PostConstruct; +import org.apache.eventmesh.dashboard.console.health.HealthService; +import org.apache.eventmesh.dashboard.console.service.health.HealthDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +@Component +public class FunctionManagerBean { + + private FunctionManager functionManager; + + private FunctionManagerProperties properties; + + @Autowired + private HealthDataService healthDataService; + + @Bean + public HealthService getHealthService() { + return functionManager.getHealthService(); + } + + @PostConstruct + void initManager() { + functionManager = new FunctionManager(); + functionManager.setProperties(properties); + functionManager.setHealthDataService(healthDataService); + functionManager.initFunctionManager(); + } +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManagerProperties.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManagerProperties.java new file mode 100644 index 00000000..5709dc1f --- /dev/null +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManagerProperties.java @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.console.spring.support; + +public class FunctionManagerProperties { + +}