百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

用 Python 造了个运维小小弟,运维的活就交给我了

off999 2024-09-18 22:34 53 浏览 0 评论

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,,版权归原作者所有,如有问题请及时联系我们以作处理

作者:somenzz

原文链接:https://cloud.tencent.com/developer/article/1758817

周六,正和家人在外边玩得起劲,突然接收到微信报警,某某系统供数出错……

此时,内心是崩溃的,有一万个羊驼在翻腾,我能瞬间说出这系统的 100 个缺陷。

然而,也有另外一个声音在耳边提醒着:抱怨是最没用的,可怜之人必有可恨之处,老板在乎不是你的苦劳,而是你的功劳。

算了,回家打开电脑,解决报错。

以上的场景做过运维的朋友想必比较熟悉,没做过运维的人相信也有类似的经历,总之就是那些让你不爽的事,如果这些不爽的事与电脑有关,不妨继续一看。

痛定思痛,我再也不愿意做如此重复又没技术含量的杂事了,今天必须拿出一个方案来。

向领导说不干这个了
换系统
自己想办法解决
俗话说三思而后行,常言道换位思考,当今互联网时代更要学会产品思维。
假如我是客户,我会喜欢什么样的产品呢?肯定是有问题会自我修复的产品,如果确实无法自我修复,应该提示我升级或找售后维护,如果拒绝服务却又没有任何信息提示,那么这个产品只好废弃不用了。作为一名员工,其实也是领导的一款产品,需要提高自己的核心竞争力,做别人不愿做或做别人做不好的事,这样才能体现自己的价值。这样想,心情平静了许多。

那么,我选择先做 3 。

分析问题:这个属于系统 bug,上传失败通过在网页上再点一次上传按钮就可以传成功。

不如干脆造个运维小小弟在报错的时候自动帮我点下得了!想到这里,我被自己想法折服了,这个还真可以实现,找当今稳排第一的编程语言 Python 来实现这个小小弟就成了,毕竟还是打过交道的,应该没有大问题。

有想法就要有行动,just do it。

思路:我需要的是一个可以在网页上自动操作的小小弟,因此先分析网页 Web 请求,再选取相应的工具,最后编码调试。

第一步 分析网页。网站是需要登陆的,打开 Chrome 浏览器,输入用户名和密码,按 F12 /或 Ctrl + Shift + I 打开开发者工具 ,勾选以下选项。

再点击登陆按钮,然后查看开发者工具的网络请求记录。

发现这一步为 POST 请求,参数中出现了刚才输入用户名密码,这里未加密,有些网站密码可能通过JavaScript 对密码进行了加密后上传至服务器的,此时则需要使用加密后的密码提交 Post 请求。查看其 ResPonse 如下:

发现返回值是 Json 格式的字符串,有个 methodName 为 login,参数也是刚才输入的用户名密码,更进一步说明,这一请求就是验证登陆用户是否合法的。

第二步 选取工具。这里涉及到爬虫,我熟悉的爬虫工具有 urllib(标准库),requests(第三方库),selenium(第三方库),
urllib 比较简单,实现 Session 有点麻烦;selenium 太笨重,虽然可以运行 JavaScript,但是需要浏览器驱动,找各种元素的 xpath,运行起来也很慢;而 requests 库就非常 Pythonnic ,简单而优雅,能轻松处理 Session ,这也是我的最爱用的工具。
于是选定 requests 先做一个登陆验证。

第三步 编码调试。由于页面需要登陆,因此需要保留与服务器通讯的会话 Session。
登陆的代码如下:

import requests
s = requests.Session()
url = "http://xxx.xxx.xxx.xxx:9080/******/vision/RMIServlet"
data = {
    "className": "UserService",
    "methodName": "login",
    "params": '["admin","******"]',
}
r = s.post(url, data=data)
print(r.text)
print(r.status_code)

执行结果为

{"retCode":0,"result":true}
200

返回 200 说明访问成功,小兴奋了一把。接着,同样的方法我点击供数配置菜单,得到供数的页面,继续分析。

点击供数配置时的请求

点击供数配置后的应答

发现其返回了跳转页面的参数,我们获取该参数,继续请求即可,对应的代码如下:

import requests
import json
s = requests.Session()
url = "http://xxx.xxx.xxx.xxx:9080/******/vision/RMIServlet"
data = {
"className": "UserService",
"methodName": "login",
"params": '["admin","******"]',
}
r = s.post(url, data=data)
print(r.text)
print(r.status_code)

data2 = {
    "className": "UrlLinkService",
    "methodName": "getURLLink",
    "params": '["I8ae3cd903146dcb1013146df075c000c"]',
}
r2 = s.post(url, data=data2)
print("获取供数配置页面参数信息",r2.status_code)
result = json.loads(r2.text) # 将Json 字符串转化为 Python 字典
print(result['result']['url']) # 获取 url 参数

运行结果如下:

{"retCode":0,"result":true}
200
获取供数配置页面参数信息 200
/bioffice/vision/SupplyManagement?opFlg=querySysCfgTask&forwardPage=list.jsp

接下来,点击我们要处理的系统名称,再点击详细信息,找到重新上传按钮,注意每一步的 Post 或 Get 请求,道理都是通的,编写相应的 Post 或 Get 代码即可。
完整代码如下所示:

import requests
import json
s = requests.Session()
url = "http://xxx.xxx.xxx.xxx:9080/******/vision/RMIServlet"
data = {
"className": "UserService",
"methodName": "login",
"params": '["admin","******"]',
}
r = s.post(url, data=data)
print(r.text)
print(r.status_code)data2 = {
"className": "UrlLinkService",
"methodName": "getURLLink",
"params": '["I8ae3cd903146dcb1013146df075c000c"]',
}
r2 = s.post(url, data=data2)
print("获取供数配置页面参数信息",r2.status_code)
result = json.loads(r2.text) # 将Json 字符串转化为 Python 字典
print(result['result']['url']) # 获取 url 参数url3 = f"http://xxx.xxx.xxx.xxx:9080{result['result']['url']}"
#print(url3)
r3 = s.get(url3)
print(r3.url, r3.status_code)taskinfo = ['988909',CRM.DJJGXCKMX','2018-08-19','CRM'] #实际使用时可做为参数传入payload0 = {
   "opFlg": "queryTask",
   "forwardPage": "listtask.jsp",
   "sysid": taskinfo[3],
   "sysname": "",
   "rundate": taskinfo[2],
}
payload1 = {
   "opFlg": "modifyTask",
   "forwardPage": "listtask.jsp",
   "flg": "U",
   "sid": taskinfo[0],
   "vname": taskinfo[1],
   "rundate": taskinfo[2],
}r4 = s.get(
   "http://xxx.xxx.xxx.xxx:9080/******/vision/SupplyManagement", params=payload0
)
r5 = s.get(
   "http://xxx.xxx.xxx.xxx:9080/******/vision/SupplyManagement", params=payload1
)print(r4.url, r4.status_code)
print(r5.url, r5.status_code)
if r5.status_code == 200:
   print("已执行上传")
else:
   print("执行上传失败")

测试环境验证:
执行前:

原本运行结束时间为 2018-08-20 05:37:11
执行上述代码,打印信息如下:

{"retCode":0,"result":true}
200
获取供数配置页面参数信息 200
/bioffice/vision/SupplyManagement?opFlg=querySysCfgTask&forwardPage=list.jsp
http://xxx.xxx.xxx.xxx:9080/******/vision/SupplyManagement/list.jsp 200
http://xxx.xxx.xxx.xxx:9080/******/vision/SupplyManagement/listtask.jsp 200
http://xxx.xxx.xxx.xxx:9080/******/vision/SupplyManagement/listtask.jsp 200
已执行上传

再次查看运行结束时间为2018-08-20 22:47:39

说明这个小小弟已经成功的为我执行了重新上传的任务,后续可监控的报警信息传递给这个小小弟,小小弟就可以在生产环境自动帮我处理上传失败的问题了。

总结:只要思想不滑坡,办法总比困难多。上面分享的这些,对于懂 http 协议的人来说简单地就像老戏骨看小娃娃表演一般,所以起名叫小小弟,他的功能还是非常简单的,但是把这些技术用于解决实际的运维问题我认为还是比较有意义的,具有自动修复功能的运维才是真正的自动化运维。后续会逐步加强小小弟的功能。

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: