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 @@