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

因为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. ios九宫格算法

    - (void)viewDidLoad { [super viewDidLoad]; //1.总列数(一行最多3列) ; CGFloat appW=; CGFloat appH=; //2.间隙=(控 ...

  2. Struts2中的ModelDriven接口

    若没有实现ModelDriven的接口,Controll的代码会比较冗余,不能实现Controll和Model代码的分离 下面是没有实现ModelDriven接口的SuggestAction pack ...

  3. spark:ML和MLlib的区别

    ML和MLlib的区别如下: ML是升级版的MLlib,最新的Spark版本优先支持ML. ML支持DataFrame数据结构和Pipelines,而MLlib仅支持RDD数据结构. ML明确区分了分 ...

  4. 使用Chrome调试工具抢阿里云免费套餐

    活动地址如下: https://free.aliyun.com/ntms/free/experience/getTrial.html 首先打开地址,需要登录,登陆后看到如下页面: 选择个人免费套餐,这 ...

  5. JS之计时器

    JavaScript 计时事件 通过使用 JavaScript,我们有能力作到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行.我们称之为计时事件. 在 JavaScritp 中使用计 ...

  6. Opencv-Python 图像透视变换cv2.warpPerspective

    # -*- coding:utf-8 -*- import cv2 import numpy as np import sys img = cv2.imread('test.jpg') # cv2.i ...

  7. Caution: request is not finished yet

    /********************************************************************** * Caution: request is not fi ...

  8. Java匿名内部类的继承者、终结者————lambda表达式

    一.什么是lambda表达式? lambda表达式就是一个代码块,可以传入变量和放入相应的代码. 二.基本格式  (参数 ) - >{                      代码       ...

  9. Unity反射探针用法教程

    Unity 3D反射探针 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...

  10. C语言--第0次作业评分和总结(5班)

    作业链接http://www.cnblogs.com/ranh941/p/7496793.html 一.评分要求 *得分点1:建博客(5分) *得分点2:第0次作业(45分) **问题0:阅读推荐博客 ...