Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
I
ils-common-video
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
提交
议题看板
打开侧边栏
OpsTeam
ils-common-video
Commits
a8dbe4f1
提交
a8dbe4f1
authored
7月 06, 2021
作者:
zw.wang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: [tasks] 新增定时任务查询昨日录制情况
上级
30b4da73
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
78 行增加
和
21 行删除
+78
-21
mysql.py
isc_video_record/db/mysql.py
+19
-0
tasks.py
isc_video_record/tasks.py
+59
-21
没有找到文件。
isc_video_record/db/mysql.py
浏览文件 @
a8dbe4f1
...
...
@@ -250,3 +250,22 @@ def get_last_video_info(cursor, conn, db_table, camera_code):
'''
.
format
(
db_table
)
cursor
.
execute
(
sql
,
[
camera_code
])
return
cursor
.
fetchone
()
@query
(
cursor_dict
=
True
)
def
get_complete_event_by_time
(
cursor
,
conn
,
db_table
,
start_time
,
end_time
):
sql
=
'''
select id as video_id,
`device_code`,
`create_time`,
`start_time`,
`end_time`,
`update_time`,
`video_url`
from {}
where `status`= 1
and `update_time`>
%
s
and `update_time`<
%
s
'''
.
format
(
db_table
)
cursor
.
execute
(
sql
,
[
start_time
,
end_time
])
return
cursor
.
fetchall
()
isc_video_record/tasks.py
浏览文件 @
a8dbe4f1
...
...
@@ -43,14 +43,23 @@ retry_text = """
++===
\n
"""
daily_text
=
""" ## {}日报, 共{}路摄像头
daily_text
=
""" ## {}-{}汇总如下:
\n
### 共{}路摄像头, 其中{}路离线
\n
### 移动侦测事件:
\n
● 总视频时长为: {}
\n
● 录制完成时长: {}
\n
●
目前
录制完成时长: {}
\n
● 稍后重试时长: {}
\n
● 多次失败时长: {}
\n
● 暂未处理时长: {}
\n
[摄像头视频时长详情]({})
[摄像头视频时长详情]({})
\n
---
\n
### 录制详情:
\n
● 进程时间累计耗时: {}
\n
● 完成视频总时长: {}
\n
● 完成视频分布日期:
\n
> {}
"""
...
...
@@ -61,10 +70,10 @@ class Tasks:
schedulers
=
BlockingScheduler
({
'apscheduler.timezone'
:
TIMEZONE
})
schedulers
.
add_job
(
self
.
run_monit
er
_online
,
'interval'
,
minutes
=
3
,
seconds
=
10
)
schedulers
.
add_job
(
self
.
run_monit
er
_hour
,
'cron'
,
minute
=
'0,30'
)
schedulers
.
add_job
(
self
.
run_monit
oring
_online
,
'interval'
,
minutes
=
3
,
seconds
=
10
)
schedulers
.
add_job
(
self
.
run_monit
oring
_hour
,
'cron'
,
minute
=
'0,30'
)
schedulers
.
add_job
(
self
.
clean_expired
,
'cron'
,
hour
=
4
,
minute
=
30
)
schedulers
.
add_job
(
self
.
run_monit
er
_daily
,
'cron'
,
hour
=
9
,
minute
=
30
)
schedulers
.
add_job
(
self
.
run_monit
oring
_daily
,
'cron'
,
hour
=
9
,
minute
=
30
)
schedulers
.
start
()
@staticmethod
...
...
@@ -98,7 +107,7 @@ class Tasks:
log
.
info
(
'删除失效日期在
%
s之前的视频文件共
%
s时长'
,
expired_time
,
get_time_str
(
video_duration
))
@staticmethod
def
run_monit
er
_online
():
def
run_monit
oring
_online
():
measure_points
=
[]
for
camera
in
get_camera_info
():
online_info
=
api_helper
.
get_camera_online
(
camera
[
'device_code'
])
...
...
@@ -129,7 +138,7 @@ class Tasks:
pipe
.
close
()
@staticmethod
def
run_monit
er
_hour
():
def
run_monit
oring
_hour
():
"""
定时检查视频推流服务情况,并发送钉钉报警
"""
...
...
@@ -192,20 +201,20 @@ class Tasks:
),
mobiles
)
@staticmethod
def
run_monit
er
_daily
():
def
run_monit
oring
_daily
():
"""
监控日报
"""
headers
=
[
'区域路径'
,
'摄像头序列号'
,
'摄像头名称'
,
'IndexCode'
,
'总时长'
,
'完成'
,
'失败'
,
'未处理'
,
'未知'
,
'在线时长'
,
'离线时长'
,
'存储'
'总时长'
,
'完成'
,
'失败'
,
'未处理'
,
'未知'
,
'在线时长'
,
'离线时长'
,
'存储'
,
'标签'
]
columns
=
[
'region_path_name'
,
'device_code'
,
'camera_name'
,
'point_index_code'
,
'total'
,
'done'
,
'failed'
,
'untreated'
,
'unknown'
,
'online_duration'
,
'offline_duration'
,
'db_table'
'online_duration'
,
'offline_duration'
,
'db_table'
,
'status'
]
query_str
=
'''
...
...
@@ -222,6 +231,7 @@ class Tasks:
start_time
=
end_time
-
timedelta
(
days
=
1
)
file_name
=
'isc-daily-{}.xlsx'
.
format
(
end_time_cst
.
strftime
(
'
%
Y
%
m
%
d'
))
camera_count
=
0
offline_camera_count
=
0
daily_untreated_duration
=
0
daily_total_duration
=
daily_done_duration
=
0
...
...
@@ -265,6 +275,16 @@ class Tasks:
camera
[
'online_duration'
]
=
get_time_str
(
online_seconds
)
camera
[
'offline_duration'
]
=
get_time_str
(
offline_seconds
)
if
offline_seconds
>
23
*
3600
:
status
=
'离线'
offline_camera_count
+=
1
elif
done
>=
total
-
5
:
status
=
'录制完整'
elif
total
>
10
and
done
==
0
:
status
=
'录制失败'
else
:
status
=
'稍后重试'
camera
[
'status'
]
=
status
results
.
append
(
camera
)
daily_total_duration
+=
total
...
...
@@ -282,23 +302,41 @@ class Tasks:
send_markdown
(
'isc-daily'
,
daily_text
.
format
(
end_time_cst
.
strftime
(
'
%
Y-
%
m-
%
d'
),
camera_count
,
(
end_time_cst
-
timedelta
(
days
=
1
))
.
strftime
(
'
%
Y
%
m
%
d'
),
end_time_cst
.
strftime
(
'
%
Y
%
m
%
d'
),
camera_count
,
offline_camera_count
,
get_time_str
(
daily_total_duration
),
get_time_str
(
daily_done_duration
),
get_time_str
(
daily_retry_duration
),
get_time_str
(
daily_failed_duration
),
get_time_str
(
daily_untreated_duration
),
url
get_time_str
(
daily_done_duration
),
get_time_str
(
daily_retry_duration
),
get_time_str
(
daily_failed_duration
),
get_time_str
(
daily_untreated_duration
),
url
,
*
Tasks
.
get_consuming_detail
(
start_time
,
end_time
)
)
)
@staticmethod
def
get_consuming_detail
(
start_time
,
end_time
):
time_consuming
=
0
total_duration
=
0
group_by_date
=
{}
for
inx
in
range
(
8
):
db_table
=
'`common_video_1`.`video_data_motion_{}`'
.
format
(
inx
)
videos
=
mysql
.
get_complete_event_by_time
(
db_table
,
start_time
,
end_time
)
for
video
in
videos
:
video_date
=
video
[
'start_time'
]
.
strftime
(
'
%
Y-
%
m-
%
d'
)
video_duration
=
(
video
[
'end_time'
]
-
video
[
'start_time'
])
.
total_seconds
()
time_consuming
+=
(
video
[
'update_time'
]
-
video
[
'create_time'
])
.
total_seconds
()
total_duration
+=
video_duration
group_by_date
[
video_date
]
=
group_by_date
.
get
(
video_date
,
0
)
+
video_duration
return
(
get_time_str
(
time_consuming
),
get_time_str
(
total_duration
),
'
\n\n
> '
.
join
([
'{}: {}'
.
format
(
k
,
get_time_str
(
v
))
for
k
,
v
in
group_by_date
.
items
()]))
if
__name__
==
'__main__'
:
from
intelab_python_sdk.logger
import
log_init
log_init
(
__name__
,
False
)
t
=
Tasks
()
# t.start()
# t.run_moniter_hour()
# t.run_moniter_online()
t
.
clean_expired
()
# t.run_monitoring_hour()
# t.run_monitoring_online()
# t.clean_expired()
t
.
run_monitoring_daily
()
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论