用Python脚本扫码hdfs、oss中是否生成文件并钉钉报警

之前的需求有点变化,需要读取topic后去生成自动运行监测的脚本,因此需要监测两小时的数据,同时出现问题还需要钉钉报警。

思路,在数据库中添加一个字段,isMonitor,1表示监控状态,0表示未监控状态。从库中读出所有的topic,将他们按照“,”分割去处理,path直接到代码中写死,因为我们使用的表的格式比较像,当然也可以直接从数据库中读取path

# -*- coding: utf-8 -*-
import sys
from commands import *
import datetime
import pymysql
import functools
import requests

pt = datetime.datetime.now().strftime('%Y%m%d')
slsAndKafkaPath = "oss://a/b/c/logs_bi/topic_name/%Y%m%d"
nginxPath = "oss://a/b/c/nginx/%Y%m%d"
hdfsPath = "hdfs://a/b/c/topic_name/%Y%m%d"
hdfsPath1 = "hdfs://a/b/d/topic_name/%Y%m%d"


def list_unpack(l):
    """拆开一层嵌套列表元组"""
    return functools.reduce(lambda x, y: x + y, l)

def getPath():
    li = []
    db = pymysql.connect("ip", "账号", "密码", "库名", port=3306)

    cursor = db.cursor()

    sql = """
    select topic_name from testTable where isMonitor = 1
    """

    cursor.execute(sql)
    data = cursor.fetchall()
    if not data:
        return ""


    data = list(data)
    data = list_unpack(data)
    data = list(data)
    data = ','.join(data)
    data = str(data)
    data = data.split(",")

    cursor.close()
    db.close()

    return data


def monitorDingDing():
    url = "钉钉机器人url"
    headers = {'content-type': "application/json"}
    values = """
                {
            "msgtype": "text",
            "text": {
                "content": "test测试扫描文件失败:任务失败"
            },
            "at": {
                "atMobiles": [
                    ""
                ],
                "isAtAll": true
            }
        }
        """
    req = requests.post(url, values, headers=headers)
    print "钉钉报警信息:",req.text


def runCmd(cmd):
    cmd = "source /etc/profile;%s" % (cmd)
    status, output = getstatusoutput(cmd)

    if status == 0:
        return output
    else:
        sys.exit(1)


def getDirDate():
    data = getPath()

    for i in data:

        if i.__contains__("nginx"):
            path = nginxPath.replace("%Y%m%d", pt)
            print(cmd)
            cmd = """hdfs dfs -ls %s | awk '{print $7}' | tail -2 | head -1""" % (path)
        elif i.__contains__("bigdata"):
            path = hdfsPath.replace("topic_name", i)

            path = path.replace("%Y%m%d", pt)
            print(cmd)
            cmd = """hdfs dfs -ls %s | awk '{print $7}' | tail -2 | head -1""" % (path)
            path = hdfsPath.replace(i, "topic_name")
        elif i.__contains__("parent"):
            path = hdfsPath1.replace("topic_name", i)

            path = path.replace("%Y%m%d", pt)
            cmd = """hdfs dfs -ls %s | awk '{print $7}' | tail -2 | head -1""" % (path)
            print(cmd)
            path = hdfsPath1.replace(i, "topic_name")
        else:
            path = slsAndKafkaPath.replace("topic_name", str(i))
            path = path.replace("%Y%m%d", pt)

            cmd = """hdfs dfs -ls %s | awk '{print $7}' | tail -2 | head -1""" % (path)
            print(cmd)
            path = path.replace(str(i), "topic_name")

    rt = runCmd(cmd)
    return rt


file_time = getDirDate()
print(file_time)
d1 = datetime.datetime.strptime(file_time, '%H:%M')
cur_time = datetime.datetime.now().strftime('%H:%M')
d2 = datetime.datetime.strptime(cur_time, '%H:%M')
print(cur_time)
time = (d2 - d1).seconds
if time > 100: #设置为100是为了让脚本运行后直接报警,正常使用需要设置为7200
    monitorDingDing()
    print("find problem")
else:
    print("check success")
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计,皆可应用在项目、毕业设计、课程设计、期末/期/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值