cos migration工具webhook推送
上一篇讲了腾讯云同步工具的使用,这篇主要是补充如何将同步结果主动消息通知。
因为cos migration 工具是java语言,并在github开源的,所以可以直接修改源码,添加webhook推送代码。
主要的步骤如下:
- 在群聊中添加自定义机器人,获取webhook地址。
- 修改cos migration工具的源码,在同步任务后添加通知任务,向webhook地址post数据
上述步骤完成后群聊中就可以显示同步结果了,有成功的文件数,还有失败的文件路径及原因
webhook服务api
这里使用钉钉的群聊自定义机器人,当然可以用自己的服务器搭建,但最后还是希望可以通知到终端用户,使用现成的平台更改方便和高效。钉钉机器人的文档已经很完备了。
- 创建群聊
- 添加机器人,获取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推送的更多相关文章
- 如何让Targetprocess 中 webhook 推送comment 到指定的项目
Targetprocess 作为Agile管理工具非常好使.我们用TP + bearychat来做任务的沟通. TP目前是不支持comment push到指定的项目,因为其带出的字段中没有相关项目.但 ...
- iOS8自定义推送显示按钮及推送优化
http://www.jianshu.com/p/803bfaae989e iOS8自定义推送显示按钮及推送优化 字数1435 阅读473 评论0 喜欢2 导语 在iOS8中,推送消息不再只是简单地点 ...
- 【开源一个小工具】一键将网页内容推送到Kindle
最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...
- 自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机
目录: 一.ansible简介 1.1.ansible是什么 1.2.ansible如何工作 1.3.ansible优缺点 1.4.ansible安装方式 1.5.ansible文件简单介绍 1.6. ...
- jenkins定位GitLab推送的最新Webhook中push event来自哪一个分支
转载请标明出处:http://www.cnblogs.com/zblade/ 一.调研目的 jenkins可以和GitLab搭档,每当GitLab上有commit的时候,都可以触发jenkins执行相 ...
- Pusher 消息推送测试工具
1.Pusher 简介 Pusher 是一款为 iOS.Mac App 提供推送测试的小工具. 其它下载地址 Pusher v0.7.3 for Mac,密码:p19i. 2.使用方法 使用方法简介 ...
- Easy APNs Provider 消息推送测试工具
1.Easy APNs Provider 简介 Easy APNs Provider 是一款为 iOS.Mac App 提供推送测试的小工具. App Store 下载地址 Easy APNs Pro ...
- 【PM面试题】设计一个股价推送工具
这一轮面试时间比较短,问题在短时间内不能很全面展开,因此抓住一些关键点变得尤其重要,这里我记录下当时是怎么想这个问题的. 问题解析 子问题1:推送什么?从问题中看出我们需要推送的是股价,用户可以自定义 ...
- 采集电脑摄像头和mic,rtp端口推送音视频工具
介绍:这个是我在做一个rtmp播放的项目中自己写的rtp推送的工具,可选择摄像头,可选择推送rtp的端口和ip 下载地址: github:https://github.com/alexhegang/s ...
随机推荐
- Docker(2):快速入门及常用命令
什么是Docker? Docker 是世界领先的软件容器平台.开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题.运维人员利用 Docker 可以在隔离容器中并行运行和管理 ...
- Html.DropDownList()的用法
页面代码如下: <%= Html.DropDownList("Category", ViewData["Categories"] as SelectLis ...
- [深入理解Java虚拟机]<垃圾收集器与内存分配策略>
Overview 垃圾收集考虑三件事: 哪些内存需要回收? 什么时候回收? 如何回收? 重点考虑Java堆中动态分配和回收的内存. Is Object alive? 引用计数法 给对象添加一个引用计数 ...
- LeetCode--1、26、27、35、53 Array(Easy)
1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to ...
- python文件读写小结
读文件 打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的): >>> f = open('test.txt', 'r') r表示是文本文件,rb是二进制文件 ...
- pyx文件 生成pyd 文件用于 cython调用
转于:https://www.2cto.com/kf/201405/304168.html 1. 初衷 最近学用python,python不愧是为程序员考虑的编程语言,写起来很快很方便,大大节省开发效 ...
- redis的哨兵模式
我是在一台服务器上安装了三个redis 一主两从 想安装gcc gcc-c++ make tcl lrzsz yum -y install gcc gcc-c++ make tcl lrzsz ...
- 模拟php curl向远程服务器上传文件
test.php <?php header('content-type:text/html;charset=utf8'); $file = dirname(__FILE__).'/1.jpg'; ...
- JavaBasic_07
面向对象三大特征 1.封装 封装是一种信息隐藏技术 a.是指数据和基于数据的操作封装在一起,数据被保护在内部(类的内部(对象)) b.系统的其他部分只有通过在数据外面的被授权的操作才能进行交互(没有授 ...
- URL diff URI
很多人会混淆这两个名词. URL:(Uniform/Universal Resource Locator 的缩写,统一资源定位符). URI:(Uniform Resource Identifier ...