From 3b071f120b68bb8649c7f4825774b3b6d8bf0deb Mon Sep 17 00:00:00 2001 From: "Welliam.Cao" <303350019@qq.com> Date: Sat, 28 Mar 2020 01:25:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=B6=88=E6=81=AF=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=A8=A1=E5=9D=97-=E9=82=AE=E4=BB=B6=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sched/models.py | 5 ++++- apps/tasks/celery_notice.py | 26 ++++++++++++++++++++++++++ apps/tasks/celery_sql.py | 4 +++- dao/apsched.py | 18 ++++++++++-------- dao/database.py | 5 ++--- static/js/database/histroy.js | 1 + static/js/database/query.js | 11 +++-------- templates/database/db_histroy.html | 1 + templates/database/db_query.html | 1 + utils/notice/email.py | 1 + 10 files changed, 52 insertions(+), 21 deletions(-) create mode 100644 apps/tasks/celery_notice.py diff --git a/apps/sched/models.py b/apps/sched/models.py index 9853ddd9..46c3ddfb 100644 --- a/apps/sched/models.py +++ b/apps/sched/models.py @@ -131,6 +131,9 @@ class Meta: def to_alert_json(self): json_format = { + "job_name":self.job_name, + "job_cmd":self.job_command, + "job_node":self.job_node.sched_server.server_assets.ip, "notice_type":self.notice_type, "notice_number":self.notice_number, "notice_interval":self.notice_interval, @@ -210,7 +213,7 @@ def to_json(self): 'jid': self.job_id.job_id, 'stime':self.stime, 'etime':self.etime, - "status":self.status, + "status":int(self.status), "result":self.result, } return json_format diff --git a/apps/tasks/celery_notice.py b/apps/tasks/celery_notice.py new file mode 100644 index 00000000..6d22bbaa --- /dev/null +++ b/apps/tasks/celery_notice.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# _#_ coding:utf-8 _*_ +from celery import task +from utils.notice import Notice + +@task +def apsched_notice(jobs, jobLogs): + status = "失败" + + if jobLogs.get("status") == 0:status = "成功" + + message = """节点: {job_node}
+ 命令: {job_cmd}
+ 执行结果: {result}
+ 执行状态: {status}""".format(job_node=jobs.get("job_node"),job_cmd=jobs.get("job_cmd"), + result=jobLogs.get("result"), status=status) + + if jobs.get("notice_type") == 0: + message = { + "e_content":message, + "e_sub":"[OpsManage-任务通知] {job_name}".format(job_name=jobs.get("job_name")), + "e_to":jobs.get("notice_number") + } + + Notice(jobs.get("notice_type")).send(**message) + diff --git a/apps/tasks/celery_sql.py b/apps/tasks/celery_sql.py index 291b5b18..c3af952d 100644 --- a/apps/tasks/celery_sql.py +++ b/apps/tasks/celery_sql.py @@ -4,7 +4,8 @@ from databases.models import (SQL_Execute_Histroy,Database_Detail) @task -def record_exec_sql(exe_user,exe_db,exe_sql,exe_time,exec_status=None,exe_result=None): +def record_exec_sql(exe_user,exe_db,exe_sql,exe_time, + exe_effect_row=0,exec_status=None,exe_result=None): try: exe_db = Database_Detail.objects.get(id=exe_db) except Exception as ex: @@ -16,6 +17,7 @@ def record_exec_sql(exe_user,exe_db,exe_sql,exe_time,exec_status=None,exe_result exe_sql = exe_sql, exec_status = exec_status, exe_result = exe_result, + exe_effect_row = exe_effect_row, exe_time = exe_time ) return {"status":"success","msg":None} diff --git a/dao/apsched.py b/dao/apsched.py index 33029f6b..c685c094 100644 --- a/dao/apsched.py +++ b/dao/apsched.py @@ -8,6 +8,7 @@ from .assets import AssetsBase from utils.sched.rpc import sched_rpc from django.db.models import Q +from apps.tasks.celery_notice import apsched_notice class ApschedBase(object): def __init__(self): @@ -173,21 +174,22 @@ def insert_jobs_logs_by_jid(self,data): data["job_id"] = jobs data.pop("jid") jobLogs = Sched_Job_Logs.objects.create(**data) - self.judge_notice(jobs.to_alert_json(), jobLogs.to_json()) + self.judge_notice(jobs, jobLogs) return jobLogs.to_json() except Exception as ex: msg = "record jobs logs error {ex}".format(ex=str(ex)) logger.warn(msg) return msg - def judge_notice(self,jobs,jobLogs): + def judge_notice(self,jobs, jobLogs): try: - atime = int(jobs.get('atime')) - except: - atime = 0 - if jobs.get('is_alert') > 0 and int(time.time()) - atime > 0: - pass -# apsched_notice.apply_async(**{"jobs":jobs,"jobslog":jobLogs}) + if jobs.is_alert > 0 and int(time.time()) - jobs.atime > jobs.notice_interval: + apsched_notice.apply_async((jobs.to_alert_json(), jobLogs.to_json()), queue='default', retry=True) + jobs.atime = int(time.time()) + jobs.save() + except Exception as ex: + msg = "notice jobs status failed {ex}".format(ex=str(ex)) + logger.warn(msg) def create_jobs(self,request): node = self.schedNode(request) diff --git a/dao/database.py b/dao/database.py index fbe5112b..960aebb2 100644 --- a/dao/database.py +++ b/dao/database.py @@ -519,11 +519,10 @@ def optimize_sql(self,request): def __record_operation(self,request,dbServer,time_consume,result): - if isinstance(result, str): - record_exec_sql.apply_async((request.user.username,request.POST.get('db'),request.POST.get('sql'),time_consume,1,result),queue='default') + record_exec_sql.apply_async((request.user.username,request.POST.get('db'), request.POST.get('sql'), time_consume, 1,result), queue='default') else: - record_exec_sql.apply_async((request.user.username,request.POST.get('db'),request.POST.get('sql'),time_consume,0),queue='default') + record_exec_sql.apply_async((request.user.username,request.POST.get('db'), request.POST.get('sql'), time_consume, result[0], 0),queue='default') def __query_user_db_server(self,request=None): if request.user.is_superuser: diff --git a/static/js/database/histroy.js b/static/js/database/histroy.js index a0af0a54..1b58a899 100644 --- a/static/js/database/histroy.js +++ b/static/js/database/histroy.js @@ -152,6 +152,7 @@ $(document).ready(function() { { "data": "exe_sql"}, { "data": "exec_status","defaultContent": ''}, { "data": "exe_time","defaultContent": ''}, + { "data": "exe_effect_row","defaultContent": ''}, { "data": "exe_result","defaultContent": ''}, { "data": "create_time"}, ] diff --git a/static/js/database/query.js b/static/js/database/query.js index 959d723b..f3b427fb 100644 --- a/static/js/database/query.js +++ b/static/js/database/query.js @@ -269,6 +269,7 @@ function makeUserDBQueryHistory(db_id) { { "data": "exe_sql"}, { "data": "exec_status","defaultContent": ''}, { "data": "exe_time","defaultContent": ''}, + { "data": "exe_effect_row","defaultContent": ''}, { "data": "exe_result","defaultContent": ''}, { "data": "create_time"}, ] @@ -298,7 +299,7 @@ function makeUserDBQueryHistory(db_id) { } }, "className": "text-center", - }, + }, { targets: [6], render: function(data, type, row, meta) { @@ -309,13 +310,7 @@ function makeUserDBQueryHistory(db_id) { } }, "className": "text-center", - }, - { - targets: [5], - render: function(data, type, row, meta) { - return row.exe_sql - }, - }, + } ] var buttons = [{ text: '', diff --git a/templates/database/db_histroy.html b/templates/database/db_histroy.html index 404064e9..4fb6cfa3 100644 --- a/templates/database/db_histroy.html +++ b/templates/database/db_histroy.html @@ -80,6 +80,7 @@

数据库列表 Database Assets List

SQL 执行状态 耗时(sec) + 影响行数 执行结果 执行时间 diff --git a/templates/database/db_query.html b/templates/database/db_query.html index e4fc3a33..9352917c 100644 --- a/templates/database/db_query.html +++ b/templates/database/db_query.html @@ -166,6 +166,7 @@

查询结果 SQL Query History

SQL 执行状态 耗时(sec) + 影响行数 执行结果 执行时间 diff --git a/utils/notice/email.py b/utils/notice/email.py index 243ba80c..3ebce7fa 100644 --- a/utils/notice/email.py +++ b/utils/notice/email.py @@ -22,6 +22,7 @@ def send(self,**kwargs): msg['Subject'] = "%s " % kwargs.get('e_sub') msg['From'] = self.e_from if kwargs.get('e_to').find(',') == -1: + e_to = kwargs.get('e_to') msg['To'] = kwargs.get('e_to') else: e_to = kwargs.get('e_to').split(',')