[manager] 告警信息Webhook转发
This commit is contained in:
@@ -10,9 +10,16 @@ import com.usthe.manager.pojo.entity.NoticeReceiver;
|
|||||||
import com.usthe.manager.service.MonitorService;
|
import com.usthe.manager.service.MonitorService;
|
||||||
import com.usthe.manager.service.NoticeConfigService;
|
import com.usthe.manager.service.NoticeConfigService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.http.HttpEntity;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.mail.SimpleMailMessage;
|
import org.springframework.mail.SimpleMailMessage;
|
||||||
import org.springframework.mail.javamail.JavaMailSender;
|
import org.springframework.mail.javamail.JavaMailSender;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.client.ResourceAccessException;
|
||||||
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -32,16 +39,18 @@ public class DispatchAlarm {
|
|||||||
private MonitorService monitorService;
|
private MonitorService monitorService;
|
||||||
private NoticeConfigService noticeConfigService;
|
private NoticeConfigService noticeConfigService;
|
||||||
private JavaMailSender javaMailSender;
|
private JavaMailSender javaMailSender;
|
||||||
|
private RestTemplate restTemplate;
|
||||||
|
|
||||||
public DispatchAlarm(AlerterWorkerPool workerPool, AlerterDataQueue dataQueue,
|
public DispatchAlarm(AlerterWorkerPool workerPool, AlerterDataQueue dataQueue,
|
||||||
JavaMailSender javaMailSender,NoticeConfigService noticeConfigService,
|
JavaMailSender javaMailSender,NoticeConfigService noticeConfigService,
|
||||||
AlertService alertService, MonitorService monitorService) {
|
AlertService alertService, MonitorService monitorService, RestTemplate restTemplate) {
|
||||||
this.workerPool = workerPool;
|
this.workerPool = workerPool;
|
||||||
this.dataQueue = dataQueue;
|
this.dataQueue = dataQueue;
|
||||||
this.alertService = alertService;
|
this.alertService = alertService;
|
||||||
this.monitorService = monitorService;
|
this.monitorService = monitorService;
|
||||||
this.noticeConfigService = noticeConfigService;
|
this.noticeConfigService = noticeConfigService;
|
||||||
this.javaMailSender = javaMailSender;
|
this.javaMailSender = javaMailSender;
|
||||||
|
this.restTemplate = restTemplate;
|
||||||
startDispatch();
|
startDispatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -117,7 +126,18 @@ public class DispatchAlarm {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void sendWebHookAlert(NoticeReceiver receiver, Alert alert) {
|
private void sendWebHookAlert(NoticeReceiver receiver, Alert alert) {
|
||||||
|
try {
|
||||||
|
ResponseEntity<String> entity = restTemplate.postForEntity(receiver.getHookUrl(), alert, String.class);
|
||||||
|
if (entity.getStatusCode().value() < HttpStatus.BAD_REQUEST.value()) {
|
||||||
|
log.debug("Send WebHook: {} Success", receiver.getHookUrl());
|
||||||
|
} else {
|
||||||
|
log.warn("Send WebHook: {} Failed", receiver.getHookUrl());
|
||||||
|
}
|
||||||
|
} catch (ResourceAccessException e) {
|
||||||
|
log.warn("Send WebHook: {} Failed: {}.", receiver.getHookUrl(), e.getMessage());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendEmailAlert(NoticeReceiver receiver, Alert alert) {
|
private void sendEmailAlert(NoticeReceiver receiver, Alert alert) {
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package com.usthe.manager.config;
|
||||||
|
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.HttpRequest;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.client.ClientHttpRequestExecution;
|
||||||
|
import org.springframework.http.client.ClientHttpRequestInterceptor;
|
||||||
|
import org.springframework.http.client.ClientHttpResponse;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static java.net.Proxy.Type.HTTP;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* restTemplate拦截器添加请求头信息
|
||||||
|
* @author tom
|
||||||
|
*/
|
||||||
|
public class HeaderRequestInterceptor implements ClientHttpRequestInterceptor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
|
||||||
|
throws IOException {
|
||||||
|
// 默认发送json
|
||||||
|
if (request.getHeaders().getContentType() == null) {
|
||||||
|
request.getHeaders().setContentType(MediaType.APPLICATION_JSON);
|
||||||
|
}
|
||||||
|
// 使用短链接
|
||||||
|
request.getHeaders().add(HttpHeaders.CONNECTION, "close");
|
||||||
|
return execution.execute(request, body);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.usthe.manager.config;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.http.client.ClientHttpRequestFactory;
|
||||||
|
import org.springframework.http.client.SimpleClientHttpRequestFactory;
|
||||||
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* restTemplate config
|
||||||
|
* todo 连接池
|
||||||
|
* @author tom
|
||||||
|
* @date 2021/12/18 08:46
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
public class RestTemplateConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public RestTemplate restTemplate(ClientHttpRequestFactory factory){
|
||||||
|
RestTemplate restTemplate = new RestTemplate(factory);
|
||||||
|
restTemplate.setInterceptors(Collections.singletonList(new HeaderRequestInterceptor()));
|
||||||
|
return restTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
|
||||||
|
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
|
||||||
|
factory.setConnectTimeout(5000);
|
||||||
|
factory.setReadTimeout(5000);
|
||||||
|
return factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -57,6 +57,7 @@
|
|||||||
<logger name="io.netty" level="info"/>
|
<logger name="io.netty" level="info"/>
|
||||||
<logger name="org.slf4j" level="info"/>
|
<logger name="org.slf4j" level="info"/>
|
||||||
<logger name="ch.qos.logback" level="info"/>
|
<logger name="ch.qos.logback" level="info"/>
|
||||||
|
<logger name="org.apache.kafka.clients" level="info"/>
|
||||||
|
|
||||||
<!-- 生产环境配置 -->
|
<!-- 生产环境配置 -->
|
||||||
<springProfile name="prod">
|
<springProfile name="prod">
|
||||||
@@ -69,7 +70,7 @@
|
|||||||
|
|
||||||
<!-- 开发环境配置 -->
|
<!-- 开发环境配置 -->
|
||||||
<springProfile name="dev">
|
<springProfile name="dev">
|
||||||
<root level="INFO">
|
<root level="DEBUG">
|
||||||
<appender-ref ref="ConsoleAppender"/>
|
<appender-ref ref="ConsoleAppender"/>
|
||||||
<appender-ref ref="SystemOutFileAppender"/>
|
<appender-ref ref="SystemOutFileAppender"/>
|
||||||
<appender-ref ref="ErrOutFileAppender"/>
|
<appender-ref ref="ErrOutFileAppender"/>
|
||||||
|
|||||||
@@ -94,6 +94,7 @@
|
|||||||
<th nzAlign="center">策略名称</th>
|
<th nzAlign="center">策略名称</th>
|
||||||
<th nzAlign="center">接收人</th>
|
<th nzAlign="center">接收人</th>
|
||||||
<th nzAlign="center">转发所有</th>
|
<th nzAlign="center">转发所有</th>
|
||||||
|
<th nzAlign="center">是否启用</th>
|
||||||
<th nzAlign="center">最新修改时间</th>
|
<th nzAlign="center">最新修改时间</th>
|
||||||
<th nzAlign="center" nzRight>操作</th>
|
<th nzAlign="center" nzRight>操作</th>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -114,6 +115,14 @@
|
|||||||
<span>否</span>
|
<span>否</span>
|
||||||
</nz-tag>
|
</nz-tag>
|
||||||
</td>
|
</td>
|
||||||
|
<td nzAlign="center">
|
||||||
|
<nz-tag *ngIf="data.enable" nzColor="green">
|
||||||
|
<span>开启</span>
|
||||||
|
</nz-tag>
|
||||||
|
<nz-tag *ngIf="!data.enable" nzColor="orange">
|
||||||
|
<span>关闭</span>
|
||||||
|
</nz-tag>
|
||||||
|
</td>
|
||||||
<td nzAlign="center">{{ data.gmtUpdate? data.gmtUpdate : data.gmtCreate }}</td>
|
<td nzAlign="center">{{ data.gmtUpdate? data.gmtUpdate : data.gmtCreate }}</td>
|
||||||
<td nzAlign="center" nzRight>
|
<td nzAlign="center" nzRight>
|
||||||
<button nz-button nzType="primary" (click)="onEditOneNoticeRule(data)">
|
<button nz-button nzType="primary" (click)="onEditOneNoticeRule(data)">
|
||||||
|
|||||||
Reference in New Issue
Block a user