sql2slack对于slack 的处理是通过http 请求的,默认已经固定了格式了,以下是一个简单的修改,可以方便的支持钉钉webhook消息
而且具有通用性
需要修改部分
主要是关于使用resty 处理http 请求的部分,默认是写死的,可以修改为
job.go
// _, err = resty.New().R().SetDoNotParseResponse(true).SetHeader("content-type", "application/json").SetBody(map[string]interface{}{
// "text": msg,
// }).Post(j.Channel)
// support dingding more flex
_, err = resty.New().R().SetDoNotParseResponse(true).SetHeader("content-type", "application/json").SetBody(msg).Post(j.Channel)
return err
job 配置定义
为了方便,我们可以基于关键字模式的钉钉webhook
example.s2s.hcl
job tst {
channel = "替换为钉钉webhook的地址"
driver = "mysql"
dsn = "root:demo@tcp(mysql:3306)/demo"
query = <<SQL
SELECT users.* FROM users where status =1
SQL
schedule = "* * * * *"
message = <<JS
if ( $rows.length < 1 ) {
return
}
log("this is a demo")
var msg = "";
_.chain($rows).pluck('name').each(function(name){
msg += name+"--------";
})
var info = {
msgtype: "text",
text: {
content: msg
}
}
log(JSON.stringify(info))
say(JSON.stringify(info))
JS
}
参考使用
- docker-compose 文件
version: "3"
services:
mysql:
image: mysql:5.7.16
ports:
- 3306:3306
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
environment:
MYSQL_ROOT_PASSWORD: demo
MYSQL_DATABASE: demo
MYSQL_USER: demo
MYSQL_PASSWORD: demo
TZ: Asia/Shanghai
sql2slack:
build: ./
image: dalongrong/sql2slack
command: -jobs-dir /opt/hcls
volumes:
- "./hcls:/opt/hcls"
- dockerfile
修改了官方的构建模式,基于源码构建
FROM golang:alpine as builder
WORKDIR /app
RUN /bin/sed -i 's,http://dl-cdn.alpinelinux.org,https://mirrors.aliyun.com,g' /etc/apk/repositories
RUN apk add --no-cache git
COPY . /app/
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn
RUN go build
FROM alpine
COPY --from=builder /app/sql2slack ./
RUN echo $PWD
ENTRYPOINT ["./sql2slack"]
- 数据初始化
需要先启动mysql 服务,然后执行下边的sql内容
CREATE TABLE `users` (
`name` varchar(100) ,
`status` varchar(100)
) ENGINE=InnoDB
INSERT INTO demo.users
(name, status)
VALUES('dalong', '0');
INSERT INTO demo.users
(name, status)
VALUES('demo', '1');
INSERT INTO demo.users
(name, status)
VALUES('rong', '1');
- 启动服务
docker-compose up -d sql2slack
- 效果
说明
以上是一个简单的扩展调整来支持钉钉消息,因为sql2slack 支持多数据库以及多数据源(独立文件模式)
同时基于js 引擎的灵活数据处理能力,我们基于此可以做好多灵活的数据处理
参考资料
https://github.com/alash3al/sql2slack
https://github.com/rongfengliang/sql2webhook