代码接入lark报警工具类

作者原创,转摘请注明原地址,感谢 。

接入LarK报警实体类:

package model;

import lombok.*;
import java.io.Serializable;

/**
 * @version: java version 1.8+
 * @Author : Eillot
 * @Explain :
 * @contact:
 * @Time : 2019/7/19 2:28 PM
 * @File : AlertModel
 * @Software: IntelliJ IDEA 2018.1.8
 */


@Data
@Builder
public  class AlertModel  implements Serializable{


    private static final long serialVersionUID = -484663548726471548L;

    /**
     * 报警内容
     */
    private String message;

    /**
     * 报警名称
     */
    private String ruleName;

    /**
     * 报警地址  可以指定自己系统的一个url
     */
    private String ruleUrl;

    /**
     * alerting 告警;ok 恢复
     */
    private String state;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getRuleName() {
        return ruleName;
    }

    public void setRuleName(String ruleName) {
        this.ruleName = ruleName;
    }

    public String getRuleUrl() {
        return ruleUrl;
    }

    public void setRuleUrl(String ruleUrl) {
        this.ruleUrl = ruleUrl;
    }

    public AlertModel(){}

    public AlertModel(String message, String ruleName, String ruleUrl, String state) {
        this.message = message;
        this.ruleName = ruleName;
        this.ruleUrl = ruleUrl;
        this.state = state;
    }

    @Getter
    public enum StateEnum{
        ALERTING("alerting"),
        OK("ok"),
        ;

        private String msg;

        StateEnum(String msg){
            this.msg = msg;
        }
    }
}

 

实操上代码

package report;

import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import com.alibaba.dubbo.common.json.JSON;
import lombok.extern.slf4j.Slf4j;
import model.AlertModel;
import org.modelmapper.ModelMapper;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;


/**
 * @version: java version 1.8+
 * @Author : Eillot
 * @Explain :
 * @contact:
 * @Time : 2019/7/19 10:22 AM
 * @File : SendLarkNotification
 * @Software: IntelliJ IDEA 2018.1.8
 */

@Slf4j
public class SendLarkNotification {


    /**
     * 功能:接入Lark通知
     * @param ruleName    报警名称
     * @param ruleUrl     报警规则地址
     * @param url         Lark 配置地址
     * @param alertMessage 告警内容
     * @return
     */
    public static boolean alert(String ruleName,String ruleUrl, String url,String alertMessage) {

        RestTemplate restTemplate= new RestTemplate();

        /**
        if (StringUtils.isNotEmpty(alertMessage) && alertMessage.length() > 40000) {
            alertMessage = StringUtils.substring(alertMessage, 0, 40000);
        }**/

        AlertModel alertModel = AlertModel.builder()
                .message(alertMessage)
                .ruleName(ruleName)
                .ruleUrl(ruleUrl)
                .state(AlertModel.StateEnum.ALERTING.getMsg()).build();

        log.warn("http alert param={}", alertModel);

        HttpHeaders httpHeaders = new HttpHeaders();
        MediaType mediaType = MediaType.parseMediaType("application/json;charset=UTF-8");
        httpHeaders.setContentType(mediaType);
        httpHeaders.add("Accept", MediaType.APPLICATION_JSON.toString());

        HttpEntity<AlertModel> httpEntity = new HttpEntity<>(alertModel, httpHeaders);
        try {

            HashMap<String, Object> map = new ModelMapper().map(alertModel, HashMap.class);

            /**
             * header信息,header属性信息可以多次调用此方法进行设置即可
             */
            String result = HttpRequest.post(url)
                    .header(Header.CONTENT_TYPE, "application/json;charset=UTF-8")
                    .header(Header.ACCEPT, MediaType.APPLICATION_JSON.toString())
                    .body(JSON.json(alertModel))
                    .timeout(20000)
                    .execute().body();
            System.out.println(result);
            log.info("http alert [OK], alertModel={}, result={}", alertModel, result);
        }catch (Exception e){
            log.error("http alert [ERROR] {}", e.getMessage(), e);
            return false;
        }
        return true;
    }

    /**
     * 测试代码
     * @param args
     */
    /**
    public static void main(String[] args) {

        //接入Lark的应用地址
        String  url =  "xxxx";//改为自己的应用部署的地址

        String alertMessage="1122334455";
        String ruleName = "我是测试呀";
        String ruleUrl = "我是测试的url呀";

        Boolean b = alert(ruleName,ruleUrl,url,alertMessage);
        System.out.println(b);
    }*/
}

 

posted @ 2019-10-09 11:16  Eillot  阅读(760)  评论(0)    收藏  举报