Skip to content

Commit aabeed4

Browse files
committed
feat: randomize combo cronjob called cron
WEB-4156
1 parent 7991a71 commit aabeed4

File tree

3 files changed

+166
-147
lines changed

3 files changed

+166
-147
lines changed

teleservices/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ COPY mail-translation.py overrides.po /var/lib/authentic2/locale/fr/LC_MESSAGES/
4646
COPY run.sh /
4747
COPY hooks /opt/publik/hooks
4848
COPY screenrc /opt/publik/
49+
COPY scripts /opt/publik/scripts
4950

5051
ADD bash-vim.tar.gz /
5152

teleservices/run.sh

Lines changed: 2 additions & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -67,155 +67,10 @@ echo "$prefix Restarting services : rsyslog, cron."
6767
service cron start
6868
echo "$prefix Restarting services : rsyslob, cron done! ✅"
6969

70-
# Monkey patching chrono uwsgi.ini (cron jobs)
71-
cur_brick="chrono"
72-
uwsgi_ini_path="/etc/chrono/uwsgi.ini"
73-
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs)"
74-
declare -A chrono_crons=(
75-
["cancel_events"]="-11 -6"
76-
["send_email_notifications"]="-11 -6"
77-
["update_event_recurrences"]="-11 -6"
78-
["clearsessions"]="4 6"
79-
["send_booking_reminders"]="16 24"
80-
["sync_desks_timeperiod_exceptions"]="23 33"
81-
["anonymize_bookings"]="32 43"
82-
["update_shared_custody_holiday_rules"]="47 53"
83-
["sync_desks_timeperiod_exceptions_from_settings"]="43 59"
84-
)
85-
declare -a chrono_used_minutes=()
86-
for cron_def in "${!chrono_crons[@]}"; do
87-
IFS=' ' read -r -a range <<<"${chrono_crons[$cron_def]}"
88-
while :; do
89-
minute=$((RANDOM % (range[1] - range[0] + 1) + range[0]))
90-
if [[ ! " ${chrono_used_minutes[@]} " =~ " ${minute} " ]]; then
91-
break
92-
fi
93-
done
94-
chrono_used_minutes+=("$minute")
95-
original_line=$(grep "$cron_def" $uwsgi_ini_path)
96-
sed -i "/$cron_def/ s/minute=[^,]*,/minute=$minute,/" $uwsgi_ini_path
97-
modified_line=$(grep "$cron_def" $uwsgi_ini_path)
98-
echo "$cron_def ($cur_brick) · Original line: $original_line"
99-
echo "🔁 $cron_def ($cur_brick) · Modified line: $modified_line"
100-
done
101-
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs) done! ✅"
102-
103-
# Monkey patching authentic2 uwsgi.ini (cron jobs)
104-
cur_brick="authentic2-multitenant"
105-
uwsgi_ini_path="/etc/authentic2-multitenant/authentic2-multitenant-uwsgi.ini"
106-
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs)"
107-
declare -A authentic_crons=(
108-
["clearsessions"]="2 4"
109-
["cleanupauthentic"]="15 22"
110-
["clean-unused-accounts"]="23 43"
111-
["clean-user-exports"]="1 5"
112-
["sync-ldap-users"]="19 27"
113-
["deactivate-orphaned-ldap-users"]="32 56"
114-
)
115-
declare -a authentic_used_minutes=()
116-
for cron_def in "${!authentic_crons[@]}"; do
117-
IFS=' ' read -r -a range <<<"${authentic_crons[$cron_def]}"
118-
while :; do
119-
minute=$((RANDOM % (range[1] - range[0] + 1) + range[0]))
120-
if [[ ! " ${authentic_used_minutes[@]} " =~ " ${minute} " ]]; then
121-
break
122-
fi
123-
done
124-
authentic_used_minutes+=("$minute")
125-
original_line=$(grep "$cron_def" $uwsgi_ini_path)
126-
sed -i "/$cron_def/ s/minute=[^,]*,/minute=$minute,/" $uwsgi_ini_path
127-
modified_line=$(grep "$cron_def" $uwsgi_ini_path)
128-
echo "$cron_def ($cur_brick) · Original line: $original_line"
129-
echo "🔁 $cron_def ($cur_brick) · Modified line: $modified_line"
130-
done
131-
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs) done! ✅"
132-
133-
# Monkey patching combo uwsgi.ini (cron jobs)
134-
cur_brick="combo"
135-
uwsgi_ini_path="/etc/combo/uwsgi.ini"
136-
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs)"
137-
declare -A combo_crons=(
138-
["clear_snapshot_pages"]="34 49"
139-
)
140-
141-
for cron_def in "${!combo_crons[@]}"; do
142-
IFS=' ' read -r -a range <<<"${combo_crons[$cron_def]}"
143-
while :; do
144-
minute=$((RANDOM % (range[1] - range[0] + 1) + range[0]))
145-
if [[ ! " ${combo_used_minutes[@]} " =~ " ${minute} " ]]; then
146-
break
147-
fi
148-
done
149-
combo_used_minutes+=("$minute")
150-
original_line=$(grep "$cron_def" $uwsgi_ini_path)
151-
sed -i "/$cron_def/ s/minute=[^,]*,/minute=$minute,/" $uwsgi_ini_path
152-
modified_line=$(grep "$cron_def" $uwsgi_ini_path)
153-
echo "$cron_def ($cur_brick) · Original line: $original_line"
154-
echo "🔁 $cron_def ($cur_brick) · Modified line: $modified_line"
155-
done
15670

157-
combo_crond_random_8=$((RANDOM % 5 + 5)) # random number between 5 and 9
158-
combo_crond_random_10=$((RANDOM % 15 + 13)) # random number between 13 and 27
159-
combo_crond_file="/etc/cron.d/combo"
160-
combo_crond_original_line1=$(grep "notify_new_remote_invoices" $combo_crond_file)
161-
combo_crond_original_line2=$(grep "lingo-poll-backend" $combo_crond_file)
162-
echo "✨ notify_new_remote_invoices ($cur_brick) · Original line: $combo_crond_original_line1"
163-
echo "✨ lingo-poll-backend ($cur_brick) · Original line: $combo_crond_original_line2"
164-
sed -i -E "/notify_new_remote_invoices/ s/([0-9]+) ([0-9]+)(.*combo-manage tenant_command notify_new_remote_invoices.*)/0 $combo_crond_random_8\3/;
165-
/lingo-poll-backend/ s/(\*\/)[0-9]+(.*)/\*\/$combo_crond_random_10\2/" $combo_crond_file
166-
combo_crond_altered_line1=$(grep "notify_new_remote_invoices" $combo_crond_file)
167-
combo_crond_altered_line2=$(grep "lingo-poll-backend" $combo_crond_file)
168-
echo "🔁 notify_new_remote_invoices ($cur_brick) · Modified line: $combo_crond_altered_line1"
169-
echo "🔁 lingo-poll-backend ($cur_brick) · Modified line: $combo_crond_altered_line2"
170-
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs) done! ✅"
71+
echo "$prefix Launching cron_monkey_patch.sh..."
72+
test -e /opt/publik/scripts/startup/cron_monkey_patch.sh && ( /opt/publik/scripts/startup/cron_monkey_patch.sh && echo " done! ✅" || echo " failed! ❌" ) || echo " skipped! 🚫"
17173

172-
# Monkey patching passerelle uwsgi.ini (cron jobs)
173-
cur_brick="passerelle"
174-
uwsgi_ini_path="/etc/passerelle/uwsgi.ini"
175-
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs)"
176-
declare -A passerelle_crons=(
177-
["cron --all-tenants availability"]="-11 -21"
178-
["cron --all-tenants jobs"]="-11 -21"
179-
["clearsessions"]="11 21"
180-
["cron --all-tenants hourly"]="42 57"
181-
["cron --all-tenants daily"]="25 45"
182-
["cron --all-tenants weekly"]="30 55"
183-
["cron --all-tenants monthly"]="40 57"
184-
)
185-
declare -a passerelle_used_minutes=()
186-
for cron_def in "${!passerelle_crons[@]}"; do
187-
IFS=' ' read -r -a range <<<"${passerelle_crons[$cron_def]}"
188-
while :; do
189-
minute=$((RANDOM % (range[1] - range[0] + 1) + range[0]))
190-
if [[ ! " ${passerelle_used_minutes[@]} " =~ " ${minute} " ]]; then
191-
break
192-
fi
193-
done
194-
195-
passerelle_used_minutes+=("$minute")
196-
original_line=$(grep "$cron_def" $uwsgi_ini_path)
197-
sed -i "/$cron_def/ s~unique-cron = [-0-9]*~unique-cron = $minute~" $uwsgi_ini_path
198-
# echo "DEBUG $original_line"
199-
# sed -i "/$cron_def/ s~unique-cron = (-\d+|\d+)~unique-cron = $minute~" $uwsgi_ini_path
200-
# sed -i "/$cron_def/ s/minute=[^,]*,/minute=$minute,/" $uwsgi_ini_path
201-
modified_line=$(grep "$cron_def" $uwsgi_ini_path)
202-
echo "$cron_def ($cur_brick) · Original line: $original_line"
203-
echo "🔁 $cron_def ($cur_brick) · Modified line: $modified_line"
204-
done
205-
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs) done! ✅"
206-
207-
# Monkey patching hobo (cron.d job)
208-
echo "$prefix $monkey_prefix monkey patching hobo_provision (hobo related cron.d job)"
209-
hobo_agent_random=$((RANDOM % 11 + 40)) # random number between 40 and 50
210-
hobo_agent_file="/etc/cron.d/hobo-agent"
211-
hobo_agent_original_line=$(grep "hobo_provision" $hobo_agent_file)
212-
echo "✨ hobo_provision · Original line: $hobo_agent_original_line"
213-
214-
if sed -i -E "/hobo_provision/ s/([0-9]+)(.*hobo_provision.*)/$hobo_agent_random\2/" $hobo_agent_file; then
215-
echo "Changes applied."
216-
else
217-
echo "Changes not applied."
218-
fi
21974

22075
hobo_agent_altered_line=$(grep "hobo_provision" $hobo_agent_file)
22176
echo "🔁 hobo_provision · Modified line: $hobo_agent_altered_line"
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
#!/bin/bash
2+
3+
prefix="✨ cron_monkey_patch.sh ·"
4+
monkey_prefix="🐒Monkey-patching"
5+
6+
# Monkey patching chrono uwsgi.ini (cron jobs)
7+
cur_brick="chrono"
8+
uwsgi_ini_path="/etc/chrono/uwsgi.ini"
9+
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs)"
10+
declare -A chrono_crons=(
11+
["cancel_events"]="-11 -6"
12+
["send_email_notifications"]="-11 -6"
13+
["update_event_recurrences"]="-11 -6"
14+
["clearsessions"]="4 6"
15+
["send_booking_reminders"]="16 24"
16+
["sync_desks_timeperiod_exceptions"]="23 33"
17+
["anonymize_bookings"]="32 43"
18+
["update_shared_custody_holiday_rules"]="47 53"
19+
["sync_desks_timeperiod_exceptions_from_settings"]="43 59"
20+
)
21+
declare -a chrono_used_minutes=()
22+
for cron_def in "${!chrono_crons[@]}"; do
23+
IFS=' ' read -r -a range <<<"${chrono_crons[$cron_def]}"
24+
while :; do
25+
minute=$((RANDOM % (range[1] - range[0] + 1) + range[0]))
26+
if [[ ! " ${chrono_used_minutes[@]} " =~ " ${minute} " ]]; then
27+
break
28+
fi
29+
done
30+
chrono_used_minutes+=("$minute")
31+
original_line=$(grep "$cron_def" $uwsgi_ini_path)
32+
sed -i "/$cron_def/ s/minute=[^,]*,/minute=$minute,/" $uwsgi_ini_path
33+
modified_line=$(grep "$cron_def" $uwsgi_ini_path)
34+
echo "$cron_def ($cur_brick) · Original line: $original_line"
35+
echo "🔁 $cron_def ($cur_brick) · Modified line: $modified_line"
36+
done
37+
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs) done! ✅"
38+
39+
# Monkey patching authentic2 uwsgi.ini (cron jobs)
40+
cur_brick="authentic2-multitenant"
41+
uwsgi_ini_path="/etc/authentic2-multitenant/authentic2-multitenant-uwsgi.ini"
42+
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs)"
43+
declare -A authentic_crons=(
44+
["clearsessions"]="2 4"
45+
["cleanupauthentic"]="15 22"
46+
["clean-unused-accounts"]="23 43"
47+
["clean-user-exports"]="1 5"
48+
["sync-ldap-users"]="19 27"
49+
["deactivate-orphaned-ldap-users"]="32 56"
50+
)
51+
declare -a authentic_used_minutes=()
52+
for cron_def in "${!authentic_crons[@]}"; do
53+
IFS=' ' read -r -a range <<<"${authentic_crons[$cron_def]}"
54+
while :; do
55+
minute=$((RANDOM % (range[1] - range[0] + 1) + range[0]))
56+
if [[ ! " ${authentic_used_minutes[@]} " =~ " ${minute} " ]]; then
57+
break
58+
fi
59+
done
60+
authentic_used_minutes+=("$minute")
61+
original_line=$(grep "$cron_def" $uwsgi_ini_path)
62+
sed -i "/$cron_def/ s/minute=[^,]*,/minute=$minute,/" $uwsgi_ini_path
63+
modified_line=$(grep "$cron_def" $uwsgi_ini_path)
64+
echo "$cron_def ($cur_brick) · Original line: $original_line"
65+
echo "🔁 $cron_def ($cur_brick) · Modified line: $modified_line"
66+
done
67+
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs) done! ✅"
68+
69+
# Monkey patching combo uwsgi.ini (cron jobs)
70+
cur_brick="combo"
71+
uwsgi_ini_path="/etc/combo/uwsgi.ini"
72+
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs)"
73+
declare -A combo_crons=(
74+
["clear_snapshot_pages"]="34 49"
75+
)
76+
77+
for cron_def in "${!combo_crons[@]}"; do
78+
IFS=' ' read -r -a range <<<"${combo_crons[$cron_def]}"
79+
while :; do
80+
minute=$((RANDOM % (range[1] - range[0] + 1) + range[0]))
81+
if [[ ! " ${combo_used_minutes[@]} " =~ " ${minute} " ]]; then
82+
break
83+
fi
84+
done
85+
combo_used_minutes+=("$minute")
86+
original_line=$(grep "$cron_def" $uwsgi_ini_path)
87+
sed -i "/$cron_def/ s/minute=[^,]*,/minute=$minute,/" $uwsgi_ini_path
88+
modified_line=$(grep "$cron_def" $uwsgi_ini_path)
89+
echo "$cron_def ($cur_brick) · Original line: $original_line"
90+
echo "🔁 $cron_def ($cur_brick) · Modified line: $modified_line"
91+
done
92+
93+
# WEB-4156: Randomize the minute of the cron job "tenant_command cron"
94+
minute=$((RANDOM % 59 + 1))
95+
original_line=$(grep "combo-manage tenant_command cron" $uwsgi_ini_path)
96+
sed -i "/combo-manage tenant_command cron/ s/minute=[^,]*,/minute=$minute,/" $uwsgi_ini_path
97+
modified_line=$(grep "combo-manage tenant_command cron" $uwsgi_ini_path)
98+
echo "$cron_def ($cur_brick) · Original line: $original_line"
99+
echo "🔁 $cron_def ($cur_brick) · Modified line: $modified_line"
100+
101+
102+
combo_crond_random_8=$((RANDOM % 5 + 5)) # random number between 5 and 9
103+
combo_crond_random_10=$((RANDOM % 15 + 13)) # random number between 13 and 27
104+
combo_crond_file="/etc/cron.d/combo"
105+
combo_crond_original_line1=$(grep "notify_new_remote_invoices" $combo_crond_file)
106+
combo_crond_original_line2=$(grep "lingo-poll-backend" $combo_crond_file)
107+
echo "✨ notify_new_remote_invoices ($cur_brick) · Original line: $combo_crond_original_line1"
108+
echo "✨ lingo-poll-backend ($cur_brick) · Original line: $combo_crond_original_line2"
109+
sed -i -E "/notify_new_remote_invoices/ s/([0-9]+) ([0-9]+)(.*combo-manage tenant_command notify_new_remote_invoices.*)/0 $combo_crond_random_8\3/;
110+
/lingo-poll-backend/ s/(\*\/)[0-9]+(.*)/\*\/$combo_crond_random_10\2/" $combo_crond_file
111+
combo_crond_altered_line1=$(grep "notify_new_remote_invoices" $combo_crond_file)
112+
combo_crond_altered_line2=$(grep "lingo-poll-backend" $combo_crond_file)
113+
echo "🔁 notify_new_remote_invoices ($cur_brick) · Modified line: $combo_crond_altered_line1"
114+
echo "🔁 lingo-poll-backend ($cur_brick) · Modified line: $combo_crond_altered_line2"
115+
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs) done! ✅"
116+
117+
# Monkey patching passerelle uwsgi.ini (cron jobs)
118+
cur_brick="passerelle"
119+
uwsgi_ini_path="/etc/passerelle/uwsgi.ini"
120+
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs)"
121+
declare -A passerelle_crons=(
122+
["cron --all-tenants availability"]="-11 -21"
123+
["cron --all-tenants jobs"]="-11 -21"
124+
["clearsessions"]="11 21"
125+
["cron --all-tenants hourly"]="42 57"
126+
["cron --all-tenants daily"]="25 45"
127+
["cron --all-tenants weekly"]="30 55"
128+
["cron --all-tenants monthly"]="40 57"
129+
)
130+
declare -a passerelle_used_minutes=()
131+
for cron_def in "${!passerelle_crons[@]}"; do
132+
IFS=' ' read -r -a range <<<"${passerelle_crons[$cron_def]}"
133+
while :; do
134+
minute=$((RANDOM % (range[1] - range[0] + 1) + range[0]))
135+
if [[ ! " ${passerelle_used_minutes[@]} " =~ " ${minute} " ]]; then
136+
break
137+
fi
138+
done
139+
140+
passerelle_used_minutes+=("$minute")
141+
original_line=$(grep "$cron_def" $uwsgi_ini_path)
142+
sed -i "/$cron_def/ s~unique-cron = [-0-9]*~unique-cron = $minute~" $uwsgi_ini_path
143+
# echo "DEBUG $original_line"
144+
# sed -i "/$cron_def/ s~unique-cron = (-\d+|\d+)~unique-cron = $minute~" $uwsgi_ini_path
145+
# sed -i "/$cron_def/ s/minute=[^,]*,/minute=$minute,/" $uwsgi_ini_path
146+
modified_line=$(grep "$cron_def" $uwsgi_ini_path)
147+
echo "$cron_def ($cur_brick) · Original line: $original_line"
148+
echo "🔁 $cron_def ($cur_brick) · Modified line: $modified_line"
149+
done
150+
echo "$prefix $monkey_prefix $cur_brick $uwsgi_ini_path (cron jobs) done! ✅"
151+
152+
# Monkey patching hobo (cron.d job)
153+
echo "$prefix $monkey_prefix monkey patching hobo_provision (hobo related cron.d job)"
154+
hobo_agent_random=$((RANDOM % 11 + 40)) # random number between 40 and 50
155+
hobo_agent_file="/etc/cron.d/hobo-agent"
156+
hobo_agent_original_line=$(grep "hobo_provision" $hobo_agent_file)
157+
echo "✨ hobo_provision · Original line: $hobo_agent_original_line"
158+
159+
if sed -i -E "/hobo_provision/ s/([0-9]+)(.*hobo_provision.*)/$hobo_agent_random\2/" $hobo_agent_file; then
160+
echo "Changes applied."
161+
else
162+
echo "Changes not applied."
163+
fi

0 commit comments

Comments
 (0)