Skip to content

Commit

Permalink
[Add+Update] 新增基于HTML发邮件提醒+修改Application 放一些定时任务 ,可能会导致阻塞, 放到了crontab…
Browse files Browse the repository at this point in the history
…_app
  • Loading branch information
杨红飞 committed Mar 21, 2019
1 parent f625cc4 commit fbe26f5
Show file tree
Hide file tree
Showing 16 changed files with 489 additions and 45 deletions.
52 changes: 51 additions & 1 deletion README.md
@@ -1,5 +1,7 @@
### 运维工具

> 注释: 还没完全完善,正在赶写~~~
#### 部署文档

**创建数据库**
Expand All @@ -18,6 +20,7 @@ python3 db_sync.py
```
# sh run.sh
python3 startup.py --service=tools --port=8040
python3 startup.py --service=cron_jobs --port=8050
```

#### Prometheus Alert报警
Expand Down Expand Up @@ -196,7 +199,7 @@ http://172.16.0.101:8040/v1/tools/project/
- GET

```
http://172.16.0.101:8040/v1/tools/event_record/
http://172.16.0.101:8040/v1/tools/event/
```

- POST
Expand Down Expand Up @@ -230,7 +233,37 @@ http://172.16.0.101:8040/v1/tools/event_record/
}
```

#### 付费管理

- GET

```
http://172.16.0.101:8040/v1/tools/paid/
```

- POST
```
{
"paid_name": "VPN 线路续费",
"paid_start_time": "2019-03-10",
"paid_end_time": "2019-03-21",
"reminder_day": 3
}
```


- PATCH
```
{
"id": 1,
"paid_name": "VPN 线路续费update",
"paid_start_time": "2019-03-10",
"paid_end_time": "2019-03-21",
"reminder_day": 3
}
```

### 表结构

Expand Down Expand Up @@ -305,4 +338,21 @@ keyword:关键字,也就是AlertName,进行关联用户,然后进行报警
| create_at | datetime | NO | | NULL | |
| update_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+------------------+--------------+------+-----+-------------------+-----------------------------+
```

- 付费管理
```
+-----------------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+-------------------+-----------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| paid_name | varchar(100) | NO | | NULL | |
| paid_start_time | datetime | NO | | NULL | |
| paid_end_time | datetime | NO | | NULL | |
| reminder_day | int(11) | YES | | NULL | |
| reminder_names | varchar(200) | NO | | NULL | |
| create_at | datetime | NO | | NULL | |
| update_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-----------------+--------------+------+-----+-------------------+-----------------------------+
```
13 changes: 8 additions & 5 deletions biz/application.py
Expand Up @@ -11,8 +11,9 @@
from biz.handlers.send_handler import alert_urls
from biz.handlers.fault_mg_handler import fault_urls
from biz.handlers.project_mg_handler import project_urls
from biz.handlers.event_record_handler import event_record_urls
from biz.write_redis import tail_data
from biz.handlers.event_mg_handler import event_urls
from biz.handlers.paid_mg_handler import paid_urls
# from biz.tail_data import tail_data


class Application(myApplication):
Expand All @@ -21,9 +22,11 @@ def __init__(self, **settings):
urls.extend(alert_urls)
urls.extend(fault_urls)
urls.extend(project_urls)
urls.extend(event_record_urls)
tailed_callback = tornado.ioloop.PeriodicCallback(tail_data, 3600000)
tailed_callback.start()
urls.extend(event_urls)
urls.extend(paid_urls)
# Application 放一些定时任务 ,可能会导致阻塞, 放到了crontab_app里面,单独起
# tailed_callback = tornado.ioloop.PeriodicCallback(tail_data, 3600000) # 一小时执行一次
# tailed_callback.start()
super(Application, self).__init__(urls, **settings)


Expand Down
23 changes: 23 additions & 0 deletions biz/crontab_app.py
@@ -0,0 +1,23 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/3/21 19:52
# @Author : Fred Yangxiaofei
# @File : crontab_app.py
# @Role : Application 放一些定时任务 ,可能会导致阻塞


import tornado
from websdk.application import Application as myApplication
from biz.tail_data import tail_data


class Application(myApplication):
def __init__(self, **settings):
urls = []
tailed_callback = tornado.ioloop.PeriodicCallback(tail_data, 21600000) # 6小时执行一次
tailed_callback.start()
super(Application, self).__init__(urls, **settings)


if __name__ == '__main__':
pass
27 changes: 27 additions & 0 deletions biz/get_userinfo.py
@@ -0,0 +1,27 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/3/21 15:10
# @Author : Fred Yangxiaofei
# @File : get_userinfo.py
# @Role : 获取CODO平台用户详细信息


from libs.redis_connect import redis_conn
from websdk.consts import const


def get_user_info():
"""
从现有redis里面获取用户信息,如:Email,SMS等
:return:
"""
# 集合
data_set = redis_conn.smembers(const.USERS_INFO)
# 集合转list
userdata = list(data_set)
# PS:这里codo后端会把数据主动写redis里面,假数据类型:user_data:['{"nickname:杨红飞", "email": "test@domain.cn", "tel": "10000000001"}','{"nickname:杨红飞02", "email": "test02@domain.cn", "tel": "10000000002"}']
return userdata


if __name__ == '__main__':
get_user_info()
Binary file modified biz/handlers/__pycache__/send_handler.cpython-36.pyc
Binary file not shown.
Expand Up @@ -2,7 +2,7 @@
# -*- coding: utf-8 -*-
# @Time : 2019/3/20 19:19
# @Author : Fred Yangxiaofei
# @File : event_record_handler.py
# @File : event_mg_handler.py
# @Role : 事件记录路由


Expand Down Expand Up @@ -89,6 +89,6 @@ def patch(self, *args, **kwargs):
self.write(dict(code=0, msg='更新成功'))


event_record_urls = [
(r"/v1/tools/event_record/", EventRecordHandler),
event_urls = [
(r"/v1/tools/event/", EventRecordHandler),
]
93 changes: 93 additions & 0 deletions biz/handlers/paid_mg_handler.py
@@ -0,0 +1,93 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/3/21 11:13
# @Author : Fred Yangxiaofei
# @File : paid_mg_handler.py
# @Role : 付费管理路由


import tornado.web
import json
from libs.database import model_to_dict
from models.paid_mg import PaidMG
from websdk.db_context import DBContext
from websdk.utils import SendSms, SendMail
from websdk.consts import const
from websdk.tools import convert
from websdk.configs import configs


class PaidMGHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
key = self.get_argument('key', default=None, strip=True)
value = self.get_argument('value', default=None, strip=True)
paid_list = []
with DBContext('w') as session:
if key and value:
paid_data = session.query(PaidMG).filter_by(**{key: value}).all()
else:
paid_data = session.query(PaidMG).all()

for data in paid_data:
data_dict = model_to_dict(data)
data_dict['paid_start_time'] = str(data_dict['paid_start_time'])
data_dict['paid_end_time'] = str(data_dict['paid_end_time'])
data_dict['create_at'] = str(data_dict['create_at'])
data_dict['update_at'] = str(data_dict['update_at'])
paid_list.append(data_dict)
return self.write(dict(code=0, msg='获取成功', data=paid_list))

def post(self, *args, **kwargs):
data = json.loads(self.request.body.decode("utf-8"))
paid_name = data.get('paid_name', None)
paid_start_time = data.get('paid_start_time', None)
paid_end_time = data.get('paid_end_time', None)
reminder_day = data.get('reminder_day', None)
nicknames = data.get('nicknames', None)

if not paid_name or not paid_start_time or not paid_end_time or not reminder_day or not nicknames:
return self.write(dict(code=-2, msg='关键参数不能为空'))

with DBContext('w', None, True) as session:
session.add(
PaidMG(paid_name=paid_name, paid_start_time=paid_start_time, paid_end_time=paid_end_time,
reminder_day=reminder_day, nicknames=nicknames))

self.write(dict(code=0, msg='添加成功'))

def delete(self, *args, **kwargs):
data = json.loads(self.request.body.decode("utf-8"))
paid_id = data.get('id')
if not paid_id:
return self.write(dict(code=-2, msg='关键参数不能为空'))

with DBContext('w', None, True) as session:
session.query(PaidMG).filter(PaidMG.id == paid_id).delete(synchronize_session=False)

self.write(dict(code=0, msg='删除成功'))

def patch(self, *args, **kwargs):
data = json.loads(self.request.body.decode("utf-8"))
paid_id = data.get('id')
paid_name = data.get('paid_name', None)
paid_start_time = data.get('paid_start_time', None)
paid_end_time = data.get('paid_end_time', None)
reminder_day = data.get('reminder_day', None)
nicknames = data.get('nicknames', None)

update_info = {
"paid_name": paid_name,
"paid_start_time": paid_start_time,
"paid_end_time": paid_end_time,
"reminder_day": reminder_day,
"nicknames": nicknames
}
with DBContext('w', None, True) as session:
session.query(PaidMG).filter(PaidMG.id == paid_id).update(update_info)

self.write(dict(code=0, msg='更新成功'))


paid_urls = [
(r"/v1/tools/paid/", PaidMGHandler)
]
4 changes: 2 additions & 2 deletions biz/handlers/send_handler.py
Expand Up @@ -8,14 +8,14 @@

import tornado.web
import json
from libs.database import db_session, model_to_dict
from libs.database import model_to_dict
from models.alert import PrometheusAlert
from websdk.utils import SendSms, SendMail
from websdk.consts import const
from websdk.tools import convert
from websdk.configs import configs
from websdk.db_context import DBContext
from biz.write_redis import redis_conn
from biz.promethues_write_redis import redis_conn


class AlterHanlder(tornado.web.RequestHandler):
Expand Down

0 comments on commit fbe26f5

Please sign in to comment.