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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
#!/usr/bin/env python
import os
from string import Template
CRONS = {}
COMMON = {
'MANAGE': '/data/virtualenvs/zamboni/bin/python manage.py',
}
CRONS['preview'] = {
'ZAMBONI': '/data/amo_python/src/preview/zamboni',
'REMORA': 'cd /data/amo/www/addons.mozilla.org-preview/bin',
'Z_CRON': 'cd $ZAMBONI; $MANAGE cron',
}
CRONS['prod'] = {
'ZAMBONI': '/data/amo_python/src/prod/zamboni',
'REMORA': 'apache cd /data/amo/www/addons.mozilla.org-remora/bin',
'Z_CRON': 'apache cd $ZAMBONI; $MANAGE cron',
}
# Update each dict with the values from common.
for key, dict_ in CRONS.items():
dict_.update(COMMON)
# Do any interpolation inside the keys.
for dict_ in CRONS.values():
for key, val in dict_.items():
dict_[key] = Template(val).substitute(dict_)
cron = """\
#
# !!AUTO-GENERATED!! Edit scripts/crontab/make-crons.py instead.
#
MAILTO=amo-developers@mozilla.org
HOME = /tmp
# Every minute!
* * * * * $Z_CRON fast_current_version
* * * * * $Z_CRON migrate_collection_users
# Every 30 minutes.
*/30 * * * * $Z_CRON update_addons_current_version
#once per hour
5 * * * * $Z_CRON update_collections_subscribers
10 * * * * $REMORA; php -f maintenance.php blog
15 * * * * $REMORA; php -f update-search-views.php
20 * * * * $Z_CRON addon_last_updated
25 * * * * $Z_CRON update_collections_votes
30 * * * * $REMORA; php -f maintenance.php l10n_stats
35 * * * * $REMORA; php -f maintenance.php l10n_rss
40 * * * * $Z_CRON fetch_ryf_blog
45 * * * * $Z_CRON update_addon_appsupport
#every 3 hours
20 */3 * * * $REMORA; php -f compatibility_report.php
20 */3 * * * $REMORA; /usr/bin/python26 maintenance.py collection_addon_count
#twice per day
25 1,13 * * * $REMORA; /usr/bin/python26 import-personas.py
25 3,15 * * * $Z_CRON update_addons_collections_downloads
25 4,16 * * * $Z_CRON update_collections_total
#once per day
30 1 * * * $Z_CRON update_user_ratings
30 2 * * * $Z_CRON addon_reviews_ratings
30 3 * * * $MANAGE cleanup
30 4 * * * $REMORA; php -f maintenance.php gc
30 5 * * * $REMORA; php -f maintenance.php expired_resetcode
30 6 * * * $REMORA; php -f maintenance.php category_totals
30 7 * * * $REMORA; php -f maintenance.php collection_subscribers
30 8 * * * $REMORA; /usr/bin/python26 maintenance.py personas_adu
30 9 * * * $REMORA; /usr/bin/python26 maintenance.py share_count_totals
30 10 * * * $REMORA; /usr/bin/python26 build-recommendations.py addons
30 16 * * * $Z_CRON collection_meta
#Once per day after 2100 PST (after metrics is done)
35 21 * * * $Z_CRON update_addon_download_totals
40 21 * * * $REMORA; /usr/bin/python26 maintenance.py weekly
35 22 * * * $Z_CRON update_global_totals
40 22 * * * $Z_CRON update_addon_average_daily_users
# Once per week
45 23 * * 4 $REMORA; php -f maintenance.php unconfirmed
MAILTO=root
"""
def main():
for key, vals in CRONS.items():
path = os.path.join(os.path.dirname(__file__), key)
open(path, 'w').write(Template(cron).substitute(vals))
if __name__ == '__main__':
main()
|