This is an automated email from the ASF dual-hosted git repository.
gongchao pushed a commit to branch pulgin-custom
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
The following commit(s) were added to refs/heads/pulgin-custom by this push:
new 050beb560 [feature] supports plug-in custom parameters (#2605)
050beb560 is described below
commit 050beb56037e3010662b999afb14ab033166022b
Author: linDong <[email protected]>
AuthorDate: Mon Aug 26 18:50:17 2024 +0800
[feature] supports plug-in custom parameters (#2605)
Co-authored-by: shown <[email protected]>
Co-authored-by: Kerwin Bryant <[email protected]>
---
.../manager/component/alerter/DispatcherAlarm.java | 2 +-
.../manager/controller/PluginController.java | 17 ++++
.../hertzbeat/manager/dao/PluginParamDao.java | 48 +++++++++
.../hertzbeat/manager/pojo/dto/PluginParam.java | 110 +++++++++++++++++++++
.../hertzbeat/manager/service/PluginService.java | 19 +++-
.../manager/service/impl/PluginServiceImpl.java | 109 ++++++++++++++++++--
.../manager/service/PluginServiceTest.java | 7 +-
.../java/org/apache/hertzbeat/plugin/Plugin.java | 8 ++
8 files changed, 310 insertions(+), 10 deletions(-)
diff --git
a/manager/src/main/java/org/apache/hertzbeat/manager/component/alerter/DispatcherAlarm.java
b/manager/src/main/java/org/apache/hertzbeat/manager/component/alerter/DispatcherAlarm.java
index 0e688e1c7..c543c08a1 100644
---
a/manager/src/main/java/org/apache/hertzbeat/manager/component/alerter/DispatcherAlarm.java
+++
b/manager/src/main/java/org/apache/hertzbeat/manager/component/alerter/DispatcherAlarm.java
@@ -131,7 +131,7 @@ public class DispatcherAlarm implements InitializingBean {
// Notice distribution
sendNotify(alert);
// Execute the plugin if enable
- pluginService.pluginExecute(Plugin.class, plugin ->
plugin.alert(alert));
+ pluginService.pluginExecute(Plugin.class, plugin ->
plugin.alert(alert), (plugin, configMapList) -> plugin.alert(alert,
configMapList));
}
} catch (IgnoreException ignored) {
} catch (InterruptedException e) {
diff --git
a/manager/src/main/java/org/apache/hertzbeat/manager/controller/PluginController.java
b/manager/src/main/java/org/apache/hertzbeat/manager/controller/PluginController.java
index 1fb73ada7..0bd5d83c6 100644
---
a/manager/src/main/java/org/apache/hertzbeat/manager/controller/PluginController.java
+++
b/manager/src/main/java/org/apache/hertzbeat/manager/controller/PluginController.java
@@ -26,7 +26,9 @@ import java.util.List;
import lombok.RequiredArgsConstructor;
import org.apache.hertzbeat.common.entity.dto.Message;
import org.apache.hertzbeat.common.entity.dto.PluginUpload;
+import org.apache.hertzbeat.common.entity.manager.ParamDefine;
import org.apache.hertzbeat.common.entity.manager.PluginMetadata;
+import org.apache.hertzbeat.manager.pojo.dto.PluginParam;
import org.apache.hertzbeat.manager.service.PluginService;
import org.springframework.data.domain.Page;
import org.springframework.http.ResponseEntity;
@@ -85,4 +87,19 @@ public class PluginController {
pluginService.updateStatus(plugin);
return ResponseEntity.ok(Message.success("Update success"));
}
+
+ @GetMapping("/getParamDefine")
+ @Operation(summary = "get param define", description = "get param define
by jar path")
+ public ResponseEntity<Message<List<ParamDefine>>>
getParamDefine(@RequestParam Long pluginMetadataId) {
+ List<ParamDefine> plugins =
pluginService.getParamDefine(pluginMetadataId);
+ return ResponseEntity.ok(Message.success(plugins));
+ }
+
+ @PostMapping("/saveParams")
+ @Operation(summary = "get param define", description = "get param define
by jar path")
+ public ResponseEntity<Message<Boolean>> saveParams(@RequestBody
List<PluginParam> pluginParams) {
+ pluginService.savePluginParam(pluginParams);
+ return ResponseEntity.ok(Message.success(true));
+ }
+
}
diff --git
a/manager/src/main/java/org/apache/hertzbeat/manager/dao/PluginParamDao.java
b/manager/src/main/java/org/apache/hertzbeat/manager/dao/PluginParamDao.java
new file mode 100644
index 000000000..d7fbeaa96
--- /dev/null
+++ b/manager/src/main/java/org/apache/hertzbeat/manager/dao/PluginParamDao.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.hertzbeat.manager.dao;
+
+import java.util.List;
+import java.util.Set;
+import org.apache.hertzbeat.manager.pojo.dto.PluginParam;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * PluginParamDao database operations
+ */
+public interface PluginParamDao extends JpaRepository<PluginParam, Long> {
+
+ /**
+ * Query the list of parameters associated with the monitoring ID'
+ * @param pluginMetadataId Monitor ID
+ * @return list of parameter values
+ */
+ List<PluginParam> findParamsByPluginMetadataId(Long pluginMetadataId);
+
+ /**
+ * Remove the parameter list associated with the pluginMetadata ID based
on it
+ * @param pluginMetadataId Monitor Id
+ */
+ void deleteParamsByPluginMetadataId(long pluginMetadataId);
+
+ /**
+ * Remove the parameter list associated with the pluginMetadata ID list
based on it
+ * @param pluginMetadataIds Monitoring ID List
+ */
+ void deleteParamsByPluginMetadataIdIn(Set<Long> pluginMetadataIds);
+}
diff --git
a/manager/src/main/java/org/apache/hertzbeat/manager/pojo/dto/PluginParam.java
b/manager/src/main/java/org/apache/hertzbeat/manager/pojo/dto/PluginParam.java
new file mode 100644
index 000000000..b92948f2b
--- /dev/null
+++
b/manager/src/main/java/org/apache/hertzbeat/manager/pojo/dto/PluginParam.java
@@ -0,0 +1,110 @@
+/*
+ * 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.hertzbeat.manager.pojo.dto;
+
+import static io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_ONLY;
+import static io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_WRITE;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EntityListeners;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Index;
+import jakarta.persistence.Table;
+import jakarta.persistence.UniqueConstraint;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import java.time.LocalDateTime;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+/**
+ * PluginParam
+ */
+@Entity
+@Table(name = "hzb_plugin_param", indexes = { @Index(columnList =
"pluginMetadataId") },
+ uniqueConstraints = @UniqueConstraint(columnNames =
{"pluginMetadataId", "field"}))
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description = "Parameter Entity")
+@EntityListeners(AuditingEntityListener.class)
+public class PluginParam {
+
+ /**
+ * Parameter primary key index ID
+ */
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Schema(title = "Parameter primary key index ID", example = "87584674384",
accessMode = READ_ONLY)
+ private Long id;
+ /**
+ * Monitor ID
+ */
+ @Schema(title = "Plugin task ID", example = "875846754543", accessMode =
READ_WRITE)
+ @NotNull
+ private Long pluginMetadataId;
+
+ /**
+ * Parameter Field Identifier
+ */
+ @Schema(title = "Parameter identifier field", example = "port", accessMode
= READ_WRITE)
+ @Size(max = 100)
+ @NotNull
+ private String field;
+
+ /**
+ * Param Value
+ */
+ @Schema(title = "parameter values", example = "8080", accessMode =
READ_WRITE)
+ @Size(max = 8126)
+ @Column(length = 8126)
+ private String paramValue;
+
+ /**
+ * Parameter type 0: number 1: string 2: encrypted string 3: json string
mapped by map
+ */
+ @Schema(title = "Parameter types 0: number 1: string 2: encrypted string
3:map mapped json string 4:arrays string",
+ accessMode = READ_WRITE)
+ @Min(0)
+ private byte type;
+
+ /**
+ * Record create time
+ */
+ @Schema(title = "Record create time", example = "1612198922000",
accessMode = READ_ONLY)
+ @CreatedDate
+ private LocalDateTime gmtCreate;
+
+ /**
+ * Record the latest modification time
+ */
+ @Schema(title = "Record modify time", example = "1612198444000",
accessMode = READ_ONLY)
+ @LastModifiedDate
+ private LocalDateTime gmtUpdate;
+
+}
diff --git
a/manager/src/main/java/org/apache/hertzbeat/manager/service/PluginService.java
b/manager/src/main/java/org/apache/hertzbeat/manager/service/PluginService.java
index 23d01a30b..42254d7b5 100644
---
a/manager/src/main/java/org/apache/hertzbeat/manager/service/PluginService.java
+++
b/manager/src/main/java/org/apache/hertzbeat/manager/service/PluginService.java
@@ -17,10 +17,15 @@
package org.apache.hertzbeat.manager.service;
+import java.util.List;
import java.util.Set;
+import java.util.function.BiConsumer;
import java.util.function.Consumer;
import org.apache.hertzbeat.common.entity.dto.PluginUpload;
+import org.apache.hertzbeat.common.entity.job.Configmap;
+import org.apache.hertzbeat.common.entity.manager.ParamDefine;
import org.apache.hertzbeat.common.entity.manager.PluginMetadata;
+import org.apache.hertzbeat.manager.pojo.dto.PluginParam;
import org.springframework.data.domain.Page;
/**
@@ -58,7 +63,7 @@ public interface PluginService {
* @param execute run plugin logic
* @param <T> plugin type
*/
- <T> void pluginExecute(Class<T> clazz, Consumer<T> execute);
+ <T> void pluginExecute(Class<T> clazz, Consumer<T> execute, BiConsumer<T,
List<Configmap>> biConsumer);
/**
* delete plugin
@@ -69,4 +74,16 @@ public interface PluginService {
void updateStatus(PluginMetadata plugin);
+ /**
+ * get param define
+ * @param pluginMetadataId plugin id
+ */
+ List<ParamDefine> getParamDefine(Long pluginMetadataId);
+
+ /**
+ * save plugin param
+ * @param params params
+ */
+ void savePluginParam(List<PluginParam> params);
+
}
diff --git
a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/PluginServiceImpl.java
b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/PluginServiceImpl.java
index 162d4bc39..3ebd6d8a6 100644
---
a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/PluginServiceImpl.java
+++
b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/PluginServiceImpl.java
@@ -39,9 +39,11 @@ import java.util.ServiceLoader;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
+import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
@@ -49,17 +51,23 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.hertzbeat.common.constants.PluginType;
import org.apache.hertzbeat.common.entity.dto.PluginUpload;
+import org.apache.hertzbeat.common.entity.job.Configmap;
+import org.apache.hertzbeat.common.entity.manager.ParamDefine;
import org.apache.hertzbeat.common.entity.manager.PluginItem;
import org.apache.hertzbeat.common.entity.manager.PluginMetadata;
import org.apache.hertzbeat.common.support.exception.CommonException;
import org.apache.hertzbeat.manager.dao.PluginItemDao;
import org.apache.hertzbeat.manager.dao.PluginMetadataDao;
+import org.apache.hertzbeat.manager.dao.PluginParamDao;
+import org.apache.hertzbeat.manager.pojo.dto.PluginParam;
import org.apache.hertzbeat.manager.service.PluginService;
import org.apache.hertzbeat.plugin.Plugin;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.yaml.snakeyaml.Yaml;
/**
* plugin service
@@ -73,6 +81,8 @@ public class PluginServiceImpl implements PluginService {
private final PluginItemDao itemDao;
+ private final PluginParamDao pluginParamDao;
+
public static Map<Class<?>, PluginType> PLUGIN_TYPE_MAPPING = new
HashMap<>();
/**
@@ -80,6 +90,20 @@ public class PluginServiceImpl implements PluginService {
*/
private static final Map<String, Boolean> PLUGIN_ENABLE_STATUS = new
ConcurrentHashMap<>();
+ /**
+ * plugin param define
+ */
+ private static final Map<Long, List<ParamDefine>> PARAMS_Define_MAP = new
ConcurrentHashMap<>();
+
+ /**
+ * plugin params
+ */
+ private static final Map<Long, List<Configmap>> PARAMS_MAP = new
ConcurrentHashMap<>();
+
+ /**
+ * pluginItem Mapping pluginId
+ */
+ private static final Map<String, Long> ITEM_TO_PLUGINMETADATAID_MAP = new
ConcurrentHashMap<>();
private final List<URLClassLoader> pluginClassLoaders = new ArrayList<>();
@@ -106,6 +130,8 @@ public class PluginServiceImpl implements PluginService {
}
// delete metadata
metadataDao.deleteById(plugin.getId());
+ syncPluginParamMap(plugin.getId(), null, true);
+ pluginParamDao.deleteParamsByPluginMetadataId(plugin.getId());
} catch (IOException e) {
throw new RuntimeException(e);
}
@@ -139,6 +165,33 @@ public class PluginServiceImpl implements PluginService {
}
}
+ @Override
+ public List<ParamDefine> getParamDefine(Long pluginMetadataId) {
+ if (PARAMS_Define_MAP.containsKey(pluginMetadataId)) {
+ return PARAMS_Define_MAP.get(pluginMetadataId);
+ }
+ return List.of();
+ }
+
+ @Override
+ public void savePluginParam(List<PluginParam> params) {
+ if (CollectionUtils.isEmpty(params)) {
+ return;
+ }
+
pluginParamDao.deleteParamsByPluginMetadataId(params.get(0).getPluginMetadataId());
+ pluginParamDao.saveAll(params);
+ syncPluginParamMap(params.get(0).getPluginMetadataId(), params, false);
+ }
+
+ private void syncPluginParamMap(Long pluginMetadataId, List<PluginParam>
params, boolean isDelete) {
+ if (isDelete) {
+ PARAMS_MAP.remove(pluginMetadataId);
+ return;
+ }
+ List<Configmap> configmapList = params.stream().map(item -> new
Configmap(item.getField(), item.getParamValue(), item.getType())).toList();
+ PARAMS_MAP.put(pluginMetadataId, configmapList);
+ }
+
static {
PLUGIN_TYPE_MAPPING.put(Plugin.class, PluginType.POST_ALERT);
}
@@ -268,13 +321,33 @@ public class PluginServiceImpl implements PluginService {
private void syncPluginStatus() {
List<PluginMetadata> plugins = metadataDao.findAll();
Map<String, Boolean> statusMap = new HashMap<>();
+ Map<String, Long> itemToPluginMetadataIdMap = new HashMap<>();
for (PluginMetadata plugin : plugins) {
for (PluginItem item : plugin.getItems()) {
statusMap.put(item.getClassIdentifier(),
plugin.getEnableStatus());
+ itemToPluginMetadataIdMap.put(item.getClassIdentifier(),
plugin.getId());
}
}
PLUGIN_ENABLE_STATUS.clear();
PLUGIN_ENABLE_STATUS.putAll(statusMap);
+ ITEM_TO_PLUGINMETADATAID_MAP.clear();
+ ITEM_TO_PLUGINMETADATAID_MAP.putAll(itemToPluginMetadataIdMap);
+ }
+
+ @PostConstruct
+ private void initParams(){
+ try {
+ List<PluginParam> params = pluginParamDao.findAll();
+ Map<Long, List<PluginParam>> content = params.stream()
+
.collect(Collectors.groupingBy(PluginParam::getPluginMetadataId));
+
+ for (Map.Entry<Long, List<PluginParam>> entry :
content.entrySet()) {
+ syncPluginParamMap(entry.getKey(), entry.getValue(), false);
+ }
+ } catch (Exception e) {
+ log.error("Failed to init params:{}", e.getMessage());
+ throw new CommonException("Failed to init params:" +
e.getMessage());
+ }
}
/**
@@ -288,14 +361,19 @@ public class PluginServiceImpl implements PluginService {
pluginClassLoader.close();
}
}
- pluginClassLoaders.clear();
- System.gc();
+
+ if (!pluginClassLoaders.isEmpty()) {
+ pluginClassLoaders.clear();
+ System.gc();
+ }
+ PARAMS_Define_MAP.clear();
List<PluginMetadata> plugins =
metadataDao.findPluginMetadataByEnableStatusTrue();
for (PluginMetadata metadata : plugins) {
- List<URL> urls = loadLibInPlugin(metadata.getJarFilePath());
+ List<URL> urls = loadLibInPlugin(metadata.getJarFilePath(),
metadata.getId());
urls.add(new File(metadata.getJarFilePath()).toURI().toURL());
pluginClassLoaders.add(new URLClassLoader(urls.toArray(new
URL[0]), Plugin.class.getClassLoader()));
}
+
} catch (MalformedURLException e) {
log.error("Failed to load plugin:{}", e.getMessage());
throw new CommonException("Failed to load plugin:" +
e.getMessage());
@@ -308,19 +386,24 @@ public class PluginServiceImpl implements PluginService {
* loading other JAR files that are dependencies for the plugin
*
* @param pluginJarPath jar file path
+ * @param pluginMetadataId plugin id
* @return urls
*/
@SneakyThrows
- private List<URL> loadLibInPlugin(String pluginJarPath) {
+ private List<URL> loadLibInPlugin(String pluginJarPath, Long
pluginMetadataId) {
File libDir = new File(getOtherLibDir(pluginJarPath));
FileUtils.forceMkdir(libDir);
List<URL> libUrls = new ArrayList<>();
try (JarFile jarFile = new JarFile(pluginJarPath)) {
Enumeration<JarEntry> entries = jarFile.entries();
+ Yaml yaml = new Yaml();
while (entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
File file = new File(libDir, entry.getName());
- if (!entry.isDirectory() && entry.getName().endsWith(".jar")) {
+ if (entry.isDirectory()) {
+ continue;
+ }
+ if (entry.getName().endsWith(".jar")) {
if (!file.getParentFile().exists()) {
FileUtils.createParentDirectories(file);
}
@@ -335,18 +418,30 @@ public class PluginServiceImpl implements PluginService {
out.flush();
}
}
+ if ((entry.getName().contains("define")) &&
(entry.getName().endsWith(".yml") || entry.getName().endsWith(".yaml"))) {
+ try (InputStream ymlInputStream =
jarFile.getInputStream(entry)) {
+ List<ParamDefine> params = yaml.loadAs(ymlInputStream,
List.class);
+ PARAMS_Define_MAP.putIfAbsent(pluginMetadataId,
params);
+ }
+ }
}
}
return libUrls;
}
@Override
- public <T> void pluginExecute(Class<T> clazz, Consumer<T> execute) {
+ public <T> void pluginExecute(Class<T> clazz, Consumer<T> execute,
BiConsumer<T, List<Configmap>> biConsumer) {
for (URLClassLoader pluginClassLoader : pluginClassLoaders) {
ServiceLoader<T> load = ServiceLoader.load(clazz,
pluginClassLoader);
for (T t : load) {
if (pluginIsEnable(t.getClass())) {
- execute.accept(t);
+ Long pluginId =
ITEM_TO_PLUGINMETADATAID_MAP.get(t.getClass().getName());
+ List<Configmap> configmapList = PARAMS_MAP.get(pluginId);
+ if (CollectionUtils.isEmpty(configmapList)) {
+ execute.accept(t);
+ } else {
+ biConsumer.accept(t, configmapList);
+ }
}
}
}
diff --git
a/manager/src/test/java/org/apache/hertzbeat/manager/service/PluginServiceTest.java
b/manager/src/test/java/org/apache/hertzbeat/manager/service/PluginServiceTest.java
index ed94f69c6..39cf4365a 100644
---
a/manager/src/test/java/org/apache/hertzbeat/manager/service/PluginServiceTest.java
+++
b/manager/src/test/java/org/apache/hertzbeat/manager/service/PluginServiceTest.java
@@ -39,6 +39,7 @@ import org.apache.hertzbeat.common.entity.manager.PluginItem;
import org.apache.hertzbeat.common.entity.manager.PluginMetadata;
import org.apache.hertzbeat.manager.dao.PluginItemDao;
import org.apache.hertzbeat.manager.dao.PluginMetadataDao;
+import org.apache.hertzbeat.manager.dao.PluginParamDao;
import org.apache.hertzbeat.manager.service.impl.PluginServiceImpl;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -60,16 +61,20 @@ class PluginServiceTest {
@InjectMocks
private PluginServiceImpl pluginService;
+
@Mock
private PluginMetadataDao metadataDao;
+ @Mock
+ private PluginParamDao pluginParamDao;
+
@Mock
private PluginItemDao itemDao;
@BeforeEach
void setUp() {
- pluginService = new PluginServiceImpl(metadataDao, itemDao);
+ pluginService = new PluginServiceImpl(metadataDao,
itemDao,pluginParamDao);
}
@Test
diff --git a/plugin/src/main/java/org/apache/hertzbeat/plugin/Plugin.java
b/plugin/src/main/java/org/apache/hertzbeat/plugin/Plugin.java
index d72632925..efeed5046 100644
--- a/plugin/src/main/java/org/apache/hertzbeat/plugin/Plugin.java
+++ b/plugin/src/main/java/org/apache/hertzbeat/plugin/Plugin.java
@@ -17,7 +17,9 @@
package org.apache.hertzbeat.plugin;
+import java.util.List;
import org.apache.hertzbeat.common.entity.alerter.Alert;
+import org.apache.hertzbeat.common.entity.job.Configmap;
/**
* Plugin
@@ -28,4 +30,10 @@ public interface Plugin {
* execute when alert
*/
void alert(Alert alert);
+
+ /**
+ * Supports user-defined parameters
+ */
+ void alert(Alert alert, List<Configmap> params);
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]