diff --git a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java index 7e06ef78229..aa3717ce23e 100644 --- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java +++ b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java @@ -151,7 +151,7 @@ public void detectMonitor(Monitor monitor, List params, String collector) @Override @Transactional(rollbackFor = Exception.class) public void addMonitor(Monitor monitor, List params, String collector, GrafanaDashboard grafanaDashboard) - throws RuntimeException { + throws RuntimeException { // Apply for monitor id long monitorId = SnowFlakeIdGenerator.generateId(); Map labels = monitor.getLabels(); @@ -167,12 +167,12 @@ public void addMonitor(Monitor monitor, List params, String collector, Gr // Construct the collection task Job entity boolean isStatic = CommonConstants.SCRAPE_STATIC.equals(monitor.getScrape()) - || !StringUtils.hasText(monitor.getScrape()); + || !StringUtils.hasText(monitor.getScrape()); String app = isStatic ? monitor.getApp() : monitor.getScrape(); Job appDefine = appService.getAppDefine(app); if (!isStatic) { appDefine.setSd(true); - monitor.setInstance("unknow"); + monitor.setInstance("unknown"); } if (CommonConstants.PROMETHEUS.equals(monitor.getApp())) { appDefine.setApp(CommonConstants.PROMETHEUS_APP_PREFIX + monitor.getName()); @@ -185,19 +185,19 @@ public void addMonitor(Monitor monitor, List params, String collector, Gr String instance = monitor.getInstance(); // The port field may be null Param portParam = params.stream() - .filter(param -> PARAM_FIELD_PORT.equals(param.getField())) - .findFirst() - .orElse(null); + .filter(param -> PARAM_FIELD_PORT.equals(param.getField())) + .findFirst() + .orElse(null); String portWithMark = (Objects.isNull(portParam) || !StringUtils.hasText(portParam.getParamValue())) - ? "" - : SignConstants.DOUBLE_MARK + portParam.getParamValue(); + ? "" + : SignConstants.DOUBLE_MARK + portParam.getParamValue(); if (!IpDomainUtil.isHasPortWithMark(instance)) { instance = instance + portWithMark; } monitor.setInstance(instance); Map metadata = Map.of(CommonConstants.LABEL_INSTANCE_NAME, monitor.getName(), - CommonConstants.LABEL_INSTANCE, instance); + CommonConstants.LABEL_INSTANCE, instance); appDefine.setMetadata(metadata); appDefine.setLabels(monitor.getLabels()); appDefine.setAnnotations(monitor.getAnnotations()); @@ -207,7 +207,7 @@ public void addMonitor(Monitor monitor, List params, String collector, Gr }).collect(Collectors.toList()); appDefine.setConfigmap(configmaps); long jobId = collector == null ? collectJobScheduling.addAsyncCollectJob(appDefine, null) - : collectJobScheduling.addAsyncCollectJob(appDefine, collector); + : collectJobScheduling.addAsyncCollectJob(appDefine, collector); try { detectMonitor(monitor, params, collector); } catch (Exception ignored) { @@ -216,16 +216,16 @@ public void addMonitor(Monitor monitor, List params, String collector, Gr try { if (collector != null) { CollectorMonitorBind collectorMonitorBind = CollectorMonitorBind.builder() - .collector(collector) - .monitorId(monitorId) - .build(); + .collector(collector) + .monitorId(monitorId) + .build(); collectorMonitorBindDao.save(collectorMonitorBind); } monitor.setId(monitorId); monitor.setJobId(jobId); // create grafana dashboard if (monitor.getApp().equals(CommonConstants.PROMETHEUS) && grafanaDashboard != null - && grafanaDashboard.isEnabled()) { + && grafanaDashboard.isEnabled()) { dashboardService.createOrUpdateDashboard(grafanaDashboard.getTemplate(), monitorId); } monitorDao.save(monitor); @@ -246,9 +246,9 @@ public void export(List ids, String type, HttpServletResponse res) throws public void exportAll(String type, HttpServletResponse res) throws Exception { // Get all monitor IDs from the database List allMonitorIds = monitorDao.findAll() - .stream() - .map(Monitor::getId) - .collect(Collectors.toList()); + .stream() + .map(Monitor::getId) + .collect(Collectors.toList()); // Use the existing export method to export all monitors export(allMonitorIds, type, res); @@ -269,13 +269,13 @@ public void validate(MonitorDto monitorDto, Boolean isModify) throws IllegalArgu monitorInfo.setName(monitorInfo.getName().trim()); Monitor monitor = monitorInfo.toEntity(); Map paramMap = monitorDto.getParamInfos() - .stream() - .peek(param -> { - param.setMonitorId(monitor.getId()); - String value = param.getParamValue() == null ? null : param.getParamValue().trim(); - param.setParamValue(value); - }) - .collect(Collectors.toMap(MonitorParam::getField, param -> param)); + .stream() + .peek(param -> { + param.setMonitorId(monitor.getId()); + String value = param.getParamValue() == null ? null : param.getParamValue().trim(); + param.setParamValue(value); + }) + .collect(Collectors.toMap(MonitorParam::getField, param -> param)); // Check name uniqueness and can not equal app type if (isModify != null) { Optional defineOptional = appService.getAppDefineOption(monitor.getName()); @@ -307,7 +307,7 @@ public void validate(MonitorDto monitorDto, Boolean isModify) throws IllegalArgu List paramDefines = appService.getAppParamDefines(monitor.getApp()); if (!CollectionUtils.isEmpty(paramDefines)) { boolean isStatic = CommonConstants.SCRAPE_STATIC.equals(monitor.getScrape()) - || !StringUtils.hasText(monitor.getScrape()); + || !StringUtils.hasText(monitor.getScrape()); for (ParamDefineInfo paramDefine : paramDefines) { String field = paramDefine.getField(); MonitorParam param = paramMap.get(field); @@ -339,16 +339,16 @@ private void checkJobFields(String app) { for (Metrics.Field field : metrics.getFields()) { if (JexlCheckerUtil.verifyKeywords(field.getField())) { throw new IllegalArgumentException(job.getApp() + " " + metrics.getName() + " " - + field.getField() + " prohibited keywords, please modify the template information."); + + field.getField() + " prohibited keywords, please modify the template information."); } if (JexlCheckerUtil.verifyStartCharacter(field.getField())) { throw new IllegalArgumentException(job.getApp() + " " + metrics.getName() + " " - + field.getField() - + " illegal start character, please modify the template information."); + + field.getField() + + " illegal start character, please modify the template information."); } if (JexlCheckerUtil.verifySpaces(field.getField())) { throw new IllegalArgumentException(job.getApp() + " " + metrics.getName() + " " - + field.getField() + " no spaces allowed, please modify the template information."); + + field.getField() + " no spaces allowed, please modify the template information."); } } } @@ -358,7 +358,7 @@ private void checkJobFields(String app) { @Override @Transactional(rollbackFor = Exception.class) public void modifyMonitor(Monitor monitor, List params, String collector, GrafanaDashboard grafanaDashboard) - throws RuntimeException { + throws RuntimeException { long monitorId = monitor.getId(); // Check to determine whether the monitor corresponding to the monitor id exists Optional queryOption = monitorDao.findById(monitorId); @@ -382,22 +382,28 @@ public void modifyMonitor(Monitor monitor, List params, String collector, labelDao.saveAll(addLabels); } + boolean isStatic = CommonConstants.SCRAPE_STATIC.equals(monitor.getScrape()) + || !StringUtils.hasText(monitor.getScrape()); + if (!isStatic && !StringUtils.hasText(monitor.getInstance())) { + monitor.setInstance("unknown"); + } + String instance = monitor.getInstance(); // The port field may be null Param portParam = params.stream() - .filter(param -> PARAM_FIELD_PORT.equals(param.getField())) - .findFirst() - .orElse(null); + .filter(param -> PARAM_FIELD_PORT.equals(param.getField())) + .findFirst() + .orElse(null); String portWithMark = (Objects.isNull(portParam) || !StringUtils.hasText(portParam.getParamValue())) - ? "" - : SignConstants.DOUBLE_MARK + portParam.getParamValue(); - if (Objects.nonNull(instance)) { + ? "" + : SignConstants.DOUBLE_MARK + portParam.getParamValue(); + if (Objects.nonNull(instance) && !IpDomainUtil.isHasPortWithMark(instance)) { instance = instance + portWithMark; } + + monitor.setInstance(instance); - boolean isStatic = CommonConstants.SCRAPE_STATIC.equals(monitor.getScrape()) - || !StringUtils.hasText(monitor.getScrape()); if (preMonitor.getStatus() != CommonConstants.MONITOR_PAUSED_CODE) { // Construct the collection task Job entity String app = isStatic ? monitor.getApp() : monitor.getScrape(); @@ -416,13 +422,13 @@ public void modifyMonitor(Monitor monitor, List params, String collector, appDefine.setScheduleType(monitor.getScheduleType()); appDefine.setCronExpression(monitor.getCronExpression()); Map metadata = Map.of(CommonConstants.LABEL_INSTANCE_NAME, monitor.getName(), - CommonConstants.LABEL_INSTANCE, monitor.getInstance()); + CommonConstants.LABEL_INSTANCE, monitor.getInstance()); appDefine.setMetadata(metadata); appDefine.setLabels(monitor.getLabels()); appDefine.setAnnotations(monitor.getAnnotations()); List configmaps = params.stream() - .map(param -> new Configmap(param.getField(), param.getParamValue(), param.getType())) - .collect(Collectors.toList()); + .map(param -> new Configmap(param.getField(), param.getParamValue(), param.getType())) + .collect(Collectors.toList()); appDefine.setConfigmap(configmaps); long newJobId; if (collector == null) { @@ -444,8 +450,8 @@ public void modifyMonitor(Monitor monitor, List params, String collector, collectorMonitorBindDao.deleteCollectorMonitorBindsByMonitorId(monitorId); if (collector != null) { CollectorMonitorBind collectorMonitorBind = CollectorMonitorBind.builder() - .collector(collector).monitorId(monitorId) - .build(); + .collector(collector).monitorId(monitorId) + .build(); collectorMonitorBindDao.save(collectorMonitorBind); } // force update gmtUpdate time, due the case: monitor not change, param change. @@ -482,7 +488,7 @@ public void deleteMonitors(Set ids) throws RuntimeException { return; } Set subMonitorIds = monitorBindDao.findMonitorBindsByBizIdIn(ids).stream().map(MonitorBind::getMonitorId) - .collect(Collectors.toSet()); + .collect(Collectors.toSet()); Set allMonitorIds = new HashSet<>(ids); allMonitorIds.addAll(subMonitorIds); List monitors = monitorDao.findMonitorsByIdIn(allMonitorIds); @@ -523,28 +529,28 @@ public MonitorDto getMonitorDto(long id) throws RuntimeException { monitorDto.setParams(params); List metricsInfos; if (DispatchConstants.PROTOCOL_PROMETHEUS.equalsIgnoreCase(monitor.getApp()) - || monitor.getType() == CommonConstants.MONITOR_TYPE_PUSH_AUTO_CREATE) { + || monitor.getType() == CommonConstants.MONITOR_TYPE_PUSH_AUTO_CREATE) { List metricsDataList = warehouseService.queryMonitorMetricsData(id); metricsInfos = metricsDataList.stream() - .map(t -> MetricsInfo.builder().name(t.getMetrics()) - .favorited(favoritedMetrics.contains(t.getMetrics())).build()) - .collect(Collectors.toList()); + .map(t -> MetricsInfo.builder().name(t.getMetrics()) + .favorited(favoritedMetrics.contains(t.getMetrics())).build()) + .collect(Collectors.toList()); monitorDto.setGrafanaDashboard(dashboardService.getDashboardByMonitorId(id)); } else { boolean isStatic = CommonConstants.SCRAPE_STATIC.equals(monitor.getScrape()) - || !StringUtils.hasText(monitor.getScrape()); + || !StringUtils.hasText(monitor.getScrape()); String type = isStatic ? monitor.getApp() : monitor.getScrape(); Job job = appService.getAppDefine(type); metricsInfos = job.getMetrics().stream() - .filter(Metrics::isVisible) - .map(t -> MetricsInfo.builder().name(t.getName()) - .favorited(favoritedMetrics.contains(t.getName())).build()) - .collect(Collectors.toList()); + .filter(Metrics::isVisible) + .map(t -> MetricsInfo.builder().name(t.getName()) + .favorited(favoritedMetrics.contains(t.getName())).build()) + .collect(Collectors.toList()); } monitorDto.setMetrics(metricsInfos); monitorDto.setMonitor(monitor); Optional bindOptional = collectorMonitorBindDao - .findCollectorMonitorBindByMonitorId(monitor.getId()); + .findCollectorMonitorBindByMonitorId(monitor.getId()); bindOptional.ifPresent(bind -> monitorDto.setCollector(bind.getCollector())); return monitorDto; } else { @@ -554,7 +560,7 @@ public MonitorDto getMonitorDto(long id) throws RuntimeException { @Override public Page getMonitors(List monitorIds, String app, String search, Byte status, String sort, - String order, int pageIndex, int pageSize, String labels) { + String order, int pageIndex, int pageSize, String labels) { Specification specification = (root, query, criteriaBuilder) -> { List andList = new ArrayList<>(); if (!CollectionUtils.isEmpty(monitorIds)) { @@ -579,7 +585,7 @@ public Page getMonitors(List monitorIds, String app, String searc if (StringUtils.hasText(search)) { Predicate predicateHost = criteriaBuilder.like(root.get("instance"), "%" + search + "%"); Predicate predicateName = criteriaBuilder.like(criteriaBuilder.lower(root.get("name")), - "%" + search.toLowerCase() + "%"); + "%" + search.toLowerCase() + "%"); Long id = Longs.tryParse(search); if (id != null) { orList.add(criteriaBuilder.equal(root.get("id"), id)); @@ -633,12 +639,12 @@ public void cancelManageMonitors(Set ids) { // The jobId is not deleted, and the jobId is reused again after the management // is started. Set subMonitorIds = monitorBindDao.findMonitorBindsByBizIdIn(ids).stream().map(MonitorBind::getMonitorId) - .collect(Collectors.toSet()); + .collect(Collectors.toSet()); ids.addAll(subMonitorIds); List managedMonitors = monitorDao.findMonitorsByIdIn(ids) - .stream().filter(monitor -> monitor.getStatus() != CommonConstants.MONITOR_PAUSED_CODE) - .peek(monitor -> monitor.setStatus(CommonConstants.MONITOR_PAUSED_CODE)) - .collect(Collectors.toList()); + .stream().filter(monitor -> monitor.getStatus() != CommonConstants.MONITOR_PAUSED_CODE) + .peek(monitor -> monitor.setStatus(CommonConstants.MONITOR_PAUSED_CODE)) + .collect(Collectors.toList()); if (!CollectionUtils.isEmpty(managedMonitors)) { for (Monitor monitor : managedMonitors) { collectJobScheduling.cancelAsyncCollectJob(monitor.getJobId()); @@ -651,12 +657,12 @@ public void cancelManageMonitors(Set ids) { public void enableManageMonitors(Set ids) { // Update monitoring status Add corresponding monitoring periodic task Set subMonitorIds = monitorBindDao.findMonitorBindsByBizIdIn(ids).stream().map(MonitorBind::getMonitorId) - .collect(Collectors.toSet()); + .collect(Collectors.toSet()); ids.addAll(subMonitorIds); List unManagedMonitors = monitorDao.findMonitorsByIdIn(ids) - .stream().filter(monitor -> monitor.getStatus() == CommonConstants.MONITOR_PAUSED_CODE) - .peek(monitor -> monitor.setStatus(CommonConstants.MONITOR_UP_CODE)) - .collect(Collectors.toList()); + .stream().filter(monitor -> monitor.getStatus() == CommonConstants.MONITOR_PAUSED_CODE) + .peek(monitor -> monitor.setStatus(CommonConstants.MONITOR_UP_CODE)) + .collect(Collectors.toList()); if (unManagedMonitors.isEmpty()) { return; } @@ -665,7 +671,7 @@ public void enableManageMonitors(Set ids) { // Construct the collection task Job entity List params = paramDao.findParamsByMonitorId(monitor.getId()); boolean isStatic = CommonConstants.SCRAPE_STATIC.equals(monitor.getScrape()) - || !StringUtils.hasText(monitor.getScrape()); + || !StringUtils.hasText(monitor.getScrape()); String app = isStatic ? monitor.getApp() : monitor.getScrape(); Job appDefine = appService.getAppDefine(app); if (!isStatic) { @@ -681,20 +687,20 @@ public void enableManageMonitors(Set ids) { appDefine.setScheduleType(monitor.getScheduleType()); appDefine.setCronExpression(monitor.getCronExpression()); Map metadata = Map.of(CommonConstants.LABEL_INSTANCE_NAME, monitor.getName(), - CommonConstants.LABEL_INSTANCE, monitor.getInstance()); + CommonConstants.LABEL_INSTANCE, monitor.getInstance()); appDefine.setMetadata(metadata); appDefine.setLabels(monitor.getLabels()); appDefine.setAnnotations(monitor.getAnnotations()); List configmaps = params.stream() - .map(param -> new Configmap(param.getField(), param.getParamValue(), param.getType())) - .collect(Collectors.toList()); + .map(param -> new Configmap(param.getField(), param.getParamValue(), param.getType())) + .collect(Collectors.toList()); List paramDefaultValue = appDefine.getParams().stream() - .filter(item -> StringUtils.hasText(item.getDefaultValue())) - .toList(); + .filter(item -> StringUtils.hasText(item.getDefaultValue())) + .toList(); paramDefaultValue.forEach(defaultVar -> { if (configmaps.stream().noneMatch(item -> item.getKey().equals(defaultVar.getField()))) { Configmap configmap = new Configmap(defaultVar.getField(), defaultVar.getDefaultValue(), - CommonConstants.TYPE_STRING); + CommonConstants.TYPE_STRING); configmaps.add(configmap); } }); @@ -702,7 +708,7 @@ public void enableManageMonitors(Set ids) { // Issue collection tasks Optional bindOptional = collectorMonitorBindDao - .findCollectorMonitorBindByMonitorId(monitor.getId()); + .findCollectorMonitorBindByMonitorId(monitor.getId()); String collector = bindOptional.map(CollectorMonitorBind::getCollector).orElse(null); long newJobId = collectJobScheduling.addAsyncCollectJob(appDefine, collector); monitor.setJobId(newJobId); @@ -756,15 +762,15 @@ public List getAllAppMonitorsCount() { @Override public void updateAppCollectJob(Job job) { List monitors = monitorDao.findMonitorsByAppEquals(job.getApp()) - .stream().filter(monitor -> monitor.getStatus() != CommonConstants.MONITOR_PAUSED_CODE) - .toList(); + .stream().filter(monitor -> monitor.getStatus() != CommonConstants.MONITOR_PAUSED_CODE) + .toList(); if (monitors.isEmpty()) { return; } List monitorBinds = collectorMonitorBindDao.findCollectorMonitorBindsByMonitorIdIn( - monitors.stream().map(Monitor::getId).collect(Collectors.toSet())); + monitors.stream().map(Monitor::getId).collect(Collectors.toSet())); Map monitorIdCollectorMap = monitorBinds.stream().collect( - Collectors.toMap(CollectorMonitorBind::getMonitorId, CollectorMonitorBind::getCollector)); + Collectors.toMap(CollectorMonitorBind::getMonitorId, CollectorMonitorBind::getCollector)); for (Monitor monitor : monitors) { try { Job appDefine = job.clone(); @@ -781,20 +787,20 @@ public void updateAppCollectJob(Job job) { appDefine.setCyclic(true); appDefine.setTimestamp(System.currentTimeMillis()); Map metadata = Map.of(CommonConstants.LABEL_INSTANCE_NAME, monitor.getName(), - CommonConstants.LABEL_INSTANCE, monitor.getInstance()); + CommonConstants.LABEL_INSTANCE, monitor.getInstance()); appDefine.setMetadata(metadata); appDefine.setLabels(monitor.getLabels()); appDefine.setAnnotations(monitor.getAnnotations()); List params = paramDao.findParamsByMonitorId(monitor.getId()); List configmaps = params.stream().map(param -> new Configmap(param.getField(), - param.getParamValue(), param.getType())).collect(Collectors.toList()); + param.getParamValue(), param.getType())).collect(Collectors.toList()); List paramDefaultValue = appDefine.getParams().stream() - .filter(item -> StringUtils.hasText(item.getDefaultValue())) - .toList(); + .filter(item -> StringUtils.hasText(item.getDefaultValue())) + .toList(); paramDefaultValue.forEach(defaultVar -> { if (configmaps.stream().noneMatch(item -> item.getKey().equals(defaultVar.getField()))) { Configmap configmap = new Configmap(defaultVar.getField(), defaultVar.getDefaultValue(), - (byte) 1); + (byte) 1); configmaps.add(configmap); } }); @@ -878,8 +884,8 @@ private void detectSdMonitor(Monitor monitor, List params, String collect appDefine.setLabels(monitor.getLabels()); appDefine.setAnnotations(monitor.getAnnotations()); List configmaps = params.stream() - .map(param -> new Configmap(param.getField(), param.getParamValue(), param.getType())) - .collect(Collectors.toList()); + .map(param -> new Configmap(param.getField(), param.getParamValue(), param.getType())) + .collect(Collectors.toList()); appDefine.setConfigmap(configmaps); appDefine.setSd(true); List collectRep; @@ -914,18 +920,18 @@ private void detectMonitorDirectly(Monitor monitor, List params, String c appDefine.setCyclic(false); appDefine.setTimestamp(System.currentTimeMillis()); Map metadata = Map.of(CommonConstants.LABEL_INSTANCE_NAME, monitor.getName(), - CommonConstants.LABEL_INSTANCE, monitor.getInstance()); + CommonConstants.LABEL_INSTANCE, monitor.getInstance()); appDefine.setMetadata(metadata); appDefine.setLabels(monitor.getLabels()); appDefine.setAnnotations(monitor.getAnnotations()); List configmaps = params.stream() - .map(param -> new Configmap(param.getField(), param.getParamValue(), param.getType())) - .collect(Collectors.toList()); + .map(param -> new Configmap(param.getField(), param.getParamValue(), param.getType())) + .collect(Collectors.toList()); appDefine.setConfigmap(configmaps); // To detect availability, you only need to collect the set of availability // metrics with a priority of 0. List availableMetrics = appDefine.getMetrics().stream() - .filter(item -> item.getPriority() == 0).collect(Collectors.toList()); + .filter(item -> item.getPriority() == 0).collect(Collectors.toList()); appDefine.setMetrics(availableMetrics); List collectRep; if (collector != null) {