Skip to content

Commit

Permalink
feat: add FunctionManager
Browse files Browse the repository at this point in the history
  • Loading branch information
Lambert-Rao committed Feb 20, 2024
1 parent 13e171f commit d504b6d
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -36,8 +38,8 @@

/**
* HealthService is the manager of all health check services. It is responsible for creating, deleting and executing health check services.<br> 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 {
Expand Down Expand Up @@ -67,6 +69,8 @@ private static void setClassCache(Class<?> clazz) {
*/
private Map<String, Map<Long, AbstractHealthCheckService>> checkServiceMap = new ConcurrentHashMap<>();

private ScheduledThreadPoolExecutor scheduledExecutor;

public void insertCheckService(List<HealthCheckObjectConfig> configList) {
configList.forEach(this::insertCheckService);
}
Expand Down Expand Up @@ -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();
}
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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 {

}

0 comments on commit d504b6d

Please sign in to comment.