Browse Source

create script Script for automatic cleaning of logs and call records 05.01.2021:14.50

master 3 years ago
commit
868ed5212f
2 changed files with 208 additions and 0 deletions
  1. 0 0
      README.md
  2. 208 0
      clear_db_asterisk.sh

+ 0 - 0
README.md


+ 208 - 0
clear_db_asterisk.sh

@@ -0,0 +1,208 @@
1
+#!/bin/bash
2
+# script clear asterisk database calls (mysql/mariadb)
3
+# for Debian OS Linux - version 9,10
4
+# athor Koshuba V.O. - (c) 2021
5
+# license GPL 2.0
6
+# email master@qbpro.ru
7
+
8
+## - connect data
9
+db_host="localhost";                                                           # host mysql
10
+db_name="cdr";                                                                 # name database
11
+db_login="admindb";                                                            # login for database
12
+db_pass="passdb";                                                              # pass for login
13
+
14
+## - tools for script
15
+get_tools=( "mysql" "mysqlcheck" "mysqldump" "pigz" "locale" );                #tools for script
16
+
17
+## - admin values
18
+email="admin@mydomen.ru";                                                      # mail address for notification
19
+
20
+## - control manual values
21
+type="month";                                                                  # time interval (SECOND,MINUTE,HOUR,DAY,MONTH,YEAR)
22
+num="3";                                                                       # saze (the number 3 months)
23
+records="/home/calls";                                                         # call recording directory
24
+typerec="mp3";                                                                 # file type records (mp3 & wav)
25
+arh_path="/home/backup/arh";                                                   # archive of previous calls and database
26
+sw_backup="1";                                                                 # create or not create backup 1-yes,0-no
27
+
28
+## - script values
29
+set_lang="0";                                                                  # locale (ru & en )
30
+flock="/tmp/cleardb_asterisk.lock";
31
+log="/var/log/clear_asterisk-db.log";                                          # temporary log file
32
+cdate="$(date +%c)";                                                           # current date for log
33
+msg_dat=(
34
+     '"Cleanup of the database and call records before the specified period was successful!" "Чистка базы данных и записей звонков до указанного периода выполнена успешно!"'
35
+     '"The script stopped working due to:" "Остановлена работа скрипта по причине:"'
36
+     '"create full backup database and calls before a given period" "создана резервная копия всей базы и записей звонков до заданного периода"'
37
+     '"An error occurred while creating a backup, the cleaning process was stopped." "Ошибка при создании резервной копии, процесс чистки остановлен."'
38
+     '"Found lock file:/tmp/cleardb_asterisk.lock!" "Найден файл блокировки:/tmp/cleardb_asterisk.lock!"'
39
+     '"not found:" "файл не найден:"'
40
+     '"found ok:" "файл найден:"'
41
+     '"process mysqldump failed executed!" "процесс mysqldump не выполнен!"'
42
+     '"no call recording files to save in the database were found!" "файлы записей звонков для сохранения в базе данных не найдены!"'
43
+     '"not found for delete:" "файл для удаления не найден:"'
44
+     '"delete ok:" "файл удален успешно:"'
45
+     '"no call recording files to delete in the database were found!" "файлы записей звонков для удаления в базе данных не найдены!"'
46
+);                                                                             # messages array
47
+report=();                                                                     # reports array
48
+
49
+
50
+#<Fn_get-tools>
51
+function getTools() {
52
+for ((itools=0; itools != ${#get_tools[@]}; itools++))
53
+ do
54
+eval get_${get_tools[$itools]}=$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}');
55
+list_tools[${#list_tools[@]}]="$(whereis -b ${get_tools[$itools]}|awk '/^'${get_tools[$itools]}':/{print $2}')";
56
+done
57
+}
58
+
59
+#<Fn_get-lang>
60
+function langMsg() {
61
+if [[ ! $($get_locale|grep 'LANG='|sed 's/\LANG=//g'|grep 'ru_RU.UTF-8'|wc -m) -eq 0 ]];
62
+    then
63
+        set_lang="0";
64
+    else
65
+        set_lang="1";
66
+fi
67
+for ((ilang=0; ilang != ${#msg_dat[@]}; ilang++))
68
+ do
69
+    eval tmsg="(" $(echo -e ${msg_dat[$ilang]}) ")"; 
70
+    msg[$ilang]=${tmsg[$set_lang]};
71
+done
72
+}
73
+
74
+#<Fn_preTest>
75
+function preTest() {
76
+if [ ! -f $log ];
77
+    then
78
+     touch $log
79
+    else
80
+    :>$log;
81
+fi
82
+if [ ! -f $flock ]
83
+    then 
84
+        echo "$cdate">$flock;
85
+    else
86
+        report=();
87
+        report[${#report[@]}]="${msg[1]}";
88
+        report[${#report[@]}]="${msg[4]}";
89
+        smsg;
90
+	exit;
91
+fi
92
+sqlt="use $db_name; select filename FROM cdr WHERE cdr.calldate <= DATE_SUB(NOW(),interval $num $type) and cdr.filename !='none';";
93
+eval fdata="(" $(sudo $get_mysql -h$db_host -u$db_login -p$db_pass  -e "$(echo -e $sqlt)"|grep -v filename) ")"; 
94
+#"
95
+}
96
+
97
+#<Fn_bak data>
98
+function bakData() {
99
+if [ $sw_backup = "1" ];
100
+    then
101
+	if [ ! -d $arh_path ];
102
+	    then
103
+		sudo mkdir -p $arh_path/db
104
+    		sudo mkdir -p $arh_path/calls
105
+	    else
106
+		if [ ! -d $arh_path/db ];
107
+		    then
108
+		    sudo mkdir -p $arh_path/db;
109
+		fi
110
+		if [ ! -d $arh_path/calls ];
111
+		    then
112
+		    sudo mkdir -p $arh_path/calls;
113
+		fi
114
+	fi
115
+	## clear old files
116
+	sudo find $arh_path/calls -maxdepth 1 -type 'f' -name "*.$typerec" -exec rm {} \;
117
+        sudo find $arh_path/db -maxdepth 1 -type 'f' -name "*.gz" -exec rm {} \;
118
+        ## begin backup data
119
+	if sudo $get_mysqldump -h$db_host -u$db_login -p$db_pass $db_name | sudo pigz -c9 > $arh_path/db/$db_name"_"$(date +%d-%m-%y).sql.gz;
120
+	 then
121
+	    report=();
122
+    	    report[${#report[@]}]="$cdate clear_asterisk-db.sh: backup database - ok!";
123
+    	    smsg;
124
+	    if [ ${#fdata[@]} != "0" ];
125
+		then
126
+		    for ((dbinx=0; dbinx != ${#fdata[@]}; dbinx++))
127
+			do
128
+			    if [ -f $records/${fdata[$dbinx]} ];
129
+    				then
130
+				echo "${msg[6]}:${fdata[$dbinx]}">>$log;
131
+				sudo cp -f $records/${fdata[$dbinx]} $arh_path/calls/${fdata[$dbinx]};
132
+    			    else
133
+				echo "${msg[5]}:${fdata[$dbinx]}">>$log;
134
+			    fi
135
+		    done
136
+		else
137
+		    report=();
138
+        	    report[${#report[@]}]="$cdate clear_asterisk-db.sh:${msg[8]}";
139
+        	    smsg;
140
+		fi
141
+         else
142
+		report=();
143
+        	report[${#report[@]}]="$cdate clear_asterisk-db.sh:${msg[1]} - ${msg[7]}";
144
+        	smsg;
145
+        	exit;
146
+    	fi
147
+fi
148
+clrData;
149
+}
150
+
151
+function clrData() {
152
+sqlt="use $db_name; DELETE FROM cdr WHERE cdr.calldate <= DATE_SUB(NOW(),interval $num $type); OPTIMIZE TABLE cdr;";
153
+sudo $get_mysql -h$db_host -u$db_login -p$db_pass  -e "$(echo -e $sqlt)";
154
+
155
+if [ ${#fdata[@]} != "0" ];
156
+		then
157
+		    for ((dbinx=0; dbinx != ${#fdata[@]}; dbinx++))
158
+			do
159
+			    if [ -f $records/${fdata[$dbinx]} ];
160
+    				then
161
+				echo "${msg[10]}:${fdata[$dbinx]}">>$log;
162
+				sudo rm -f $records/${fdata[$dbinx]};
163
+    			    else
164
+				echo "${msg[9]}:${fdata[$dbinx]}">>$log;
165
+			    fi
166
+		    done
167
+		else
168
+		    report=();
169
+        	    report[${#report[@]}]="$cdate clear_asterisk-db.sh:${msg[11]}";
170
+        	    smsg;
171
+fi
172
+lockOff;
173
+}
174
+
175
+
176
+function smsg() {
177
+if [ ${#report[@]} != "0" ];
178
+    then
179
+     for ((rpt_index=0; rpt_index != ${#report[@]}; rpt_index++))
180
+      do
181
+	if [[ "${report[$rpt_index]}" != "" ]];
182
+         then
183
+         echo -e "${report[$rpt_index]}">>$log;
184
+         fi
185
+     done
186
+fi
187
+}
188
+
189
+## -@F function check lock file
190
+function lockOff() {
191
+if  [ -f $flock ];
192
+    then
193
+    sudo rm -f $flock;
194
+fi
195
+report=();
196
+report[${#report[@]}]="$cdate clear_asterisk-db.sh:${msg[0]}";
197
+smsg;
198
+sudo cat $log |mail -s "asterisk clear database & records" $email
199
+sudo systemctl restart asterisk;
200
+exit;
201
+}
202
+
203
+langMsg;
204
+getTools;
205
+preTest;
206
+bakData;
207
+
208
+exit;