-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcron.py
70 lines (53 loc) · 1.87 KB
/
cron.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#coding:utf-8
#TODO 将cron分为若干个cron文件
import logging
from datetime import datetime,timedelta
#from time import mktime
from rq import Connection, Queue
from redis import Redis
import model as m
import task
import config
redis_conn = Redis()
queue = Queue('cron',connection=redis_conn)
def cron_sync_feed():
#TODO 考虑是否必要只取有用的字段。
db = m.Session()
feeds = db.query(m.Feed).filter_by(active=True).all()
for feed in feeds:
logging.info('cron_sync_feed:id->%s slug->%s ' %(str(feed.id), feed.slug))
queue.enqueue(task.sync_feed,feed.slug)
db.close()
def cron_fetch_image():
db = m.Session()
entries = db.query(m.Entry).filter_by(hidden=False, got_img=False).all()
for entry in entries:
if not entry.feed.fetch_image:
continue
logging.info('cron_fetch_image:entry id->%s ' %(str(entry.id)))
queue.enqueue(task.fetch_img, entry.feed.slug, entry.id)
db.close()
def cron_push():
db = m.Session()
users = db.query(m.User).filter_by(active=True).all()
for user in users:
#if user.login_timestamp + timedelta(days=config.expire_time) \
# < datetime.now():
#TODO send mail to let user know.
# continue
now = datetime.now()
if user.push_timestamp + timedelta(hours=12) > now:
continue
if now.hour < (user.push_timing * 2) or\
now.hour >= (user.push_timing * 2 +2) :
continue
logging.info('cron_push: id-> %s email->%s' %(str(user.id), user.email))
queue.enqueue(task.push, user.id)
db.close()
if __name__ == '__main__':
logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', level=logging.INFO)
now = datetime.now()
if now.minute >= 30:
cron_sync_feed()
cron_fetch_image()
cron_push()