Skip to content

Commit

Permalink
[Feature] Support copy monitoring (#2981)
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangshenghang authored Jan 15, 2025
1 parent 8bb4493 commit 67da9bd
Show file tree
Hide file tree
Showing 8 changed files with 226 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@

package org.apache.hertzbeat.manager.controller;

import static org.apache.hertzbeat.common.constants.CommonConstants.MONITOR_NOT_EXIST_CODE;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand All @@ -38,6 +36,10 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import static org.apache.hertzbeat.common.constants.CommonConstants.FAIL_CODE;
import static org.apache.hertzbeat.common.constants.CommonConstants.MONITOR_NOT_EXIST_CODE;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;

/**
* Monitoring management API
*/
Expand Down Expand Up @@ -101,4 +103,15 @@ public ResponseEntity<Message<Void>> detectMonitor(@Valid @RequestBody MonitorDt
monitorService.detectMonitor(monitorDto.getMonitor(), monitorDto.getParams(), monitorDto.getCollector());
return ResponseEntity.ok(Message.success("Detect success."));
}

@PostMapping("/copy/{id}")
@Operation(summary = "Copy Monitor", description = "Copy an existing monitor")
public ResponseEntity<Message<Void>> copyMonitor(@PathVariable("id") final Long id) {
try {
monitorService.copyMonitor(id);
return ResponseEntity.ok(Message.success("Copy monitor success"));
} catch (Exception e) {
return ResponseEntity.ok(Message.fail(FAIL_CODE, "Copy monitor failed: " + e.getMessage()));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@
package org.apache.hertzbeat.manager.service;

import jakarta.servlet.http.HttpServletResponse;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.hertzbeat.common.entity.grafana.GrafanaDashboard;
import org.apache.hertzbeat.common.entity.job.Job;
import org.apache.hertzbeat.common.entity.manager.Monitor;
Expand All @@ -32,13 +29,18 @@
import org.springframework.data.domain.Page;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
* Monitoring and management services
*/
public interface MonitorService {

/**
* Monitoring Availability Probes
*
* @param monitor Monitoring entity information
* @param params Parameter information
* @param collector collector pinned
Expand All @@ -49,16 +51,17 @@ public interface MonitorService {
/**
* Add monitoring
*
* @param monitor Monitoring Entity
* @param params Parameter information
* @param collector collector pinned
* @param dashboard grafana dashboard
* @param monitor Monitoring Entity
* @param params Parameter information
* @param collector collector pinned
* @param dashboard grafana dashboard
* @throws RuntimeException Add process exception throw
*/
void addMonitor(Monitor monitor, List<Param> params, String collector, GrafanaDashboard dashboard) throws RuntimeException;

/**
* Verify the correctness of request data parameters
*
* @param monitorDto monitorDto
* @param isModify Whether it is a modification monitoring
* @throws IllegalArgumentException Validation parameter error thrown
Expand All @@ -68,30 +71,33 @@ public interface MonitorService {
/**
* Modify update monitoring
*
* @param monitor Monitor Entity
* @param params Parameter information
* @param collector collector pinned
* @param dashboard grafana dashboard
* @param monitor Monitor Entity
* @param params Parameter information
* @param collector collector pinned
* @param dashboard grafana dashboard
* @throws RuntimeException Exception thrown during modification
*/
void modifyMonitor(Monitor monitor, List<Param> params, String collector, GrafanaDashboard dashboard) throws RuntimeException;

/**
* Delete Monitor
*
* @param id Monitor ID
* @throws RuntimeException Exception thrown during deletion
*/
void deleteMonitor(long id) throws RuntimeException;

/**
* Batch delete monitoring
*
* @param ids Monitoring ID List
* @throws RuntimeException Exception thrown during deletion
*/
void deleteMonitors(Set<Long> ids) throws RuntimeException;

/**
* Get monitoring information
*
* @param id Monitor ID
* @return MonitorDto Monitor Entity
* @throws RuntimeException Exception thrown during query
Expand All @@ -100,60 +106,68 @@ public interface MonitorService {

/**
* Dynamic conditional query
*
* @param monitorIds Monitor ID List
* @param app Monitor Type
* @param search Monitor Host support fuzzy query
* @param status Monitor Status 0:no monitor,1:usable,2:disabled,9:all status
* @param sort Sort Field
* @param order Sort mode eg:asc desc
* @param pageIndex List current page
* @param pageSize Number of list pagination
* @param labels Monitor labels
* @param app Monitor Type
* @param search Monitor Host support fuzzy query
* @param status Monitor Status 0:no monitor,1:usable,2:disabled,9:all status
* @param sort Sort Field
* @param order Sort mode eg:asc desc
* @param pageIndex List current page
* @param pageSize Number of list pagination
* @param labels Monitor labels
* @return Search Result
*/
Page<Monitor> getMonitors(List<Long> monitorIds, String app, String search, Byte status, String sort, String order, int pageIndex, int pageSize, String labels);

/**
* Unmanaged monitoring items in batches according to the monitoring ID list
*
* @param ids Monitoring ID List
*/
void cancelManageMonitors(HashSet<Long> ids);

/**
* Start the managed monitoring items in batches according to the monitoring ID list
*
* @param ids Monitoring ID List
*/
void enableManageMonitors(HashSet<Long> ids);

/**
* Query the monitoring category and its corresponding monitoring quantity
*
* @return Monitoring Category and Monitoring Quantity Mapping
*/
List<AppCount> getAllAppMonitorsCount();

/**
* Query monitoring
*
* @param monitorId Monitor ID
* @return Monitor information
*/
Monitor getMonitor(Long monitorId);

/**
* Update the status of the specified monitor
*
* @param monitorId monitorId
* @param status monitor status
*/
void updateMonitorStatus(Long monitorId, byte status);

/**
* Query the list of all monitoring information under the specified monitoring type
*
* @param app Monitor Type
* @return Monitor Entity List
*/
List<Monitor> getAppMonitors(String app);

/**
* Export Monitoring Configuration
*
* @param ids monitor id list
* @param type file type
* @param res response
Expand All @@ -163,6 +177,7 @@ public interface MonitorService {

/**
* Import Monitoring Configuration
*
* @param file configuration file
* @throws Exception This exception will be thrown if the export fails
*/
Expand All @@ -177,9 +192,17 @@ public interface MonitorService {

/**
* update app collect job by app
*
* @param job job content
*/
void updateAppCollectJob(Job job);

void addAndSaveMonitorJob(Monitor monitor, List<Param> params, String collector, SdMonitorParam sdMonitorParam, GrafanaDashboard grafanaDashboard);

/**
* Copy monitor by id
*
* @param id Monitor id
*/
void copyMonitor(Long id);
}
Loading

0 comments on commit 67da9bd

Please sign in to comment.