上一篇讲了腾讯云同步工具的使用,这篇主要是补充如何将同步结果主动消息通知。

因为cos migration 工具是java语言,并在github开源的,所以可以直接修改源码,添加webhook推送代码。

主要的步骤如下:

  1. 在群聊中添加自定义机器人,获取webhook地址。
  2. 修改cos migration工具的源码,在同步任务后添加通知任务,向webhook地址post数据

上述步骤完成后群聊中就可以显示同步结果了,有成功的文件数,还有失败的文件路径及原因

webhook服务api

这里使用钉钉的群聊自定义机器人,当然可以用自己的服务器搭建,但最后还是希望可以通知到终端用户,使用现成的平台更改方便和高效。钉钉机器人的文档已经很完备了。

  1. 创建群聊
  2. 添加机器人,获取webhook地址

使用python简单测试下接口,官方文档也有java和php的测试例子

import sys
import requests
import json def send_msg(msg):
url = "https://oapi.dingtalk.com/robot/send?access_token=xxxxx"
headers = {'content-type': 'application/json; charset=UTF-8'}
data = {
"msgtype": "text",
"text": {
"content": msg
},
"at": {
"atMobiles": [
"13XXXXXXXXX"
],
"isAtAll": False
}
}
conrest = requests.post(url, data=json.dumps(data, ensure_ascii=False).encode('utf8'), headers=headers)
print(conrest.text, end=' ')
print(conrest.status_code) if __name__ == '__main__':
# text = sys.argv[1]
text = '你好,阿里云的钉钉,我是腾讯的cos migration'
send_msg(text)

修改java代码

因为对java不太熟,所以这边使用python脚本写https post的功能。java中调用终端执行python脚本。

同步成功跟同步失败的日志都通过python脚本发送消息。

java调用shell命令行的方法

     public static void callShell(String[] shellString, boolean waitExit) {
try {
Process process = Runtime.getRuntime().exec(shellString);
if(!waitExit){
return;
}
int exitValue = process.waitFor();
if (0 != exitValue) {
log.error("call shell failed. error code is :" + exitValue);
}else{
log.info("succeed to call cmd ");
}
} catch (Exception e) {
log.error("call shell failed. " + e);
}
}

添加同步任务

             printTaskStaticsInfo();
sendInfo2Webhook(); // 同步任务之后,添加消息通知任务
     public void sendInfo2Webhook(){
if(TaskStatics.instance.getSuccessCnt() > 0){
// 同步文件数大于0时,消息推送
String noty_info = String.format("成功同步文件数 : %d", TaskStatics.instance.getSuccessCnt());
String[] shellString = {"python3", "dingdingrobot.py", noty_info};
SystemUtils.callShell(shellString, false);
}

       // 查看error.log ,获取失败文件和原因
String[] shell_str = {"nohup", "sh", "webhook_error_DING.sh", ">/dev/null 2>&1 & "};
SystemUtils.callShell(shell_str, false);
}

 python代码

#  dingdingrobot.py  脚本

 import sys
import requests
import json
import datetime def send_msg(msg):
now_time = datetime.datetime.now().strftime('%d{d}%H:%M{M}\n').format(d='号', M='分')
url = "https://oapi.dingtalk.com/robot/send?access_token=xxxx"
headers = {'content-type': 'application/json; charset=UTF-8'}
data = {
"msgtype": "text",
"text": {
"content": "%s*%s" % (now_time, msg)
}
}
conrest = requests.post(url, data=json.dumps(data, ensure_ascii=False).encode('utf8'), headers=headers)
print(conrest.text, end=' ')
print(conrest.status_code) if __name__ == '__main__':
text = sys.argv[1]
send_msg(text)

 shell脚本

用于检索error.log是否有localpath的失败文件路径,有则调用python脚本通知

 #!/bin/bash
sleep
if [ `grep -i "localpath" cos_migrate_tool_v5-master/log/error.log|wc -l` -gt ];then
DATA="`cat cos_migrate_tool_v5-master/log/error.log | grep "localpath" |sort|uniq`"
python3 dingdingrobot.py "$DATA"
: > cos_migrate_tool_v5-master/log/error.log # 清除之前的错误信息
fi

基本上述代码就可以实现同步结果的钉钉消息推送了。


java的重编译  

腾讯云的start_migrate脚本是运行dep下的cos_migrate_tool-1.0-jar-with-dependencies.jar,同时工程使用Maven进行编译的,所以修改过java代码后,需要使用maven进行重编译。

cos migration工具webhook推送的更多相关文章

  1. 如何让Targetprocess 中 webhook 推送comment 到指定的项目

    Targetprocess 作为Agile管理工具非常好使.我们用TP + bearychat来做任务的沟通. TP目前是不支持comment push到指定的项目,因为其带出的字段中没有相关项目.但 ...

  2. iOS8自定义推送显示按钮及推送优化

    http://www.jianshu.com/p/803bfaae989e iOS8自定义推送显示按钮及推送优化 字数1435 阅读473 评论0 喜欢2 导语 在iOS8中,推送消息不再只是简单地点 ...

  3. 【开源一个小工具】一键将网页内容推送到Kindle

    最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...

  4. 自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机

    目录: 一.ansible简介 1.1.ansible是什么 1.2.ansible如何工作 1.3.ansible优缺点 1.4.ansible安装方式 1.5.ansible文件简单介绍 1.6. ...

  5. jenkins定位GitLab推送的最新Webhook中push event来自哪一个分支

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.调研目的 jenkins可以和GitLab搭档,每当GitLab上有commit的时候,都可以触发jenkins执行相 ...

  6. Pusher 消息推送测试工具

    1.Pusher 简介 Pusher 是一款为 iOS.Mac App 提供推送测试的小工具. 其它下载地址 Pusher v0.7.3 for Mac,密码:p19i. 2.使用方法 使用方法简介 ...

  7. Easy APNs Provider 消息推送测试工具

    1.Easy APNs Provider 简介 Easy APNs Provider 是一款为 iOS.Mac App 提供推送测试的小工具. App Store 下载地址 Easy APNs Pro ...

  8. 【PM面试题】设计一个股价推送工具

    这一轮面试时间比较短,问题在短时间内不能很全面展开,因此抓住一些关键点变得尤其重要,这里我记录下当时是怎么想这个问题的. 问题解析 子问题1:推送什么?从问题中看出我们需要推送的是股价,用户可以自定义 ...

  9. 采集电脑摄像头和mic,rtp端口推送音视频工具

    介绍:这个是我在做一个rtmp播放的项目中自己写的rtp推送的工具,可选择摄像头,可选择推送rtp的端口和ip 下载地址: github:https://github.com/alexhegang/s ...

随机推荐

  1. VCL界面控件DevExpress VCL Controls发布v18.2.3|附下载

    DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...

  2. tensorflow-softmax

    之前在softmax多分类中讲到多用交叉熵作为损失函数,这里顺便写个例子,tensorlflow练手. # encoding:utf-8 import tensorflow as tf import ...

  3. JavaScript , js 上下文(this 的指代)

    上下文 代表 this 变量的值, 以及 它的 指代; 它决定一个函数怎么被调用; 当一个函数作为一个对象的方法被调用的时候, this总是指向 调用这个方法的对象. ----- 1 ,情况一: 字面 ...

  4. mongodb启动出现Failed to connect to 127.0.0.1:27017 after 5000ms milliseconds,giving up

    今天一早准备继续学习mongodb,但是在命令行运行mongo.exe报错 出错原因:mongod一不小心被非法关闭,留下了一个mongod.lock, 将数据库给锁定了 解决方法: 1)在data路 ...

  5. CentOS7+Nginx配置Tomcat负载均衡环境

    1.准备两个Tomcat 配置两个Tomcat一个端口是8080另外一个端口是8081,分别在webapps下面添加一个测试用的web项目,修改index.jsp文件,8080端口的index.jsp ...

  6. gcd和lcm模板

    long long gcd(long long b,long long c)//计算最大公约数{ return c==0?b:gcd(c,b%c);} long long lcm(long long ...

  7. threejs教程

    http://www.haomou.net/2015/08/30/2015_threejs0/ http://www.johannes-raida.de/tutorials.htm https://w ...

  8. 【转载】 从ACM会议看中国大陆计算机科学与国外的差距

    ps:   这是一篇06年的文章,与今日的国内计算机行业学术圈环境简直是天翻地覆,很不错的history,值得mark下,今日的cs学术发展十号是坏不发表意见,但是history是值得对比,借鉴,思考 ...

  9. TX2-static-dhcp-network

    前言 之前是使用私有的镜像而不是按照nvidia官网中JetPack3.2套件的镜像对TX2板子进行刷机,刷机之后发现网络不能正常连接,即使已经连接了有线网口,经过大师的指点才终于明白了其中的一点点奥 ...

  10. shell常用函数封装-main.sh

    #!/bin/bash #sunlight sp monitor system #created on 2018/01/07#by chao.dong#used by sp servers consi ...