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