1313 $ memory_limit = "{none set} " ;
1414}
1515set_time_limit (0 );
16- error_reporting (0 );
1716
1817function shutdown ($ mysqlcon = NULL ,$ cfg ,$ loglevel ,$ reason ,$ nodestroypid = TRUE ) {
1918 if ($ nodestroypid === TRUE ) {
@@ -33,26 +32,13 @@ function enter_logfile($cfg,$loglevel,$logtext,$norotate = false) {
3332 if ($ loglevel !=9 && $ loglevel > $ cfg ['logs_debug_level ' ]) return ;
3433 $ file = $ cfg ['logs_path ' ].'ranksystem.log ' ;
3534 switch ($ loglevel ) {
36- case 1 :
37- $ loglevel = " CRITICAL " ;
38- break ;
39- case 2 :
40- $ loglevel = " ERROR " ;
41- break ;
42- case 3 :
43- $ loglevel = " WARNING " ;
44- break ;
45- case 4 :
46- $ loglevel = " NOTICE " ;
47- break ;
48- case 5 :
49- $ loglevel = " INFO " ;
50- break ;
51- case 6 :
52- $ loglevel = " DEBUG " ;
53- break ;
54- default :
55- $ loglevel = " NONE " ;
35+ case 1 : $ loglevel = " CRITICAL " ; break ;
36+ case 2 : $ loglevel = " ERROR " ; break ;
37+ case 3 : $ loglevel = " WARNING " ; break ;
38+ case 4 : $ loglevel = " NOTICE " ; break ;
39+ case 5 : $ loglevel = " INFO " ; break ;
40+ case 6 : $ loglevel = " DEBUG " ; break ;
41+ default :$ loglevel = " NONE " ;
5642 }
5743 $ loghandle = fopen ($ file , 'a ' );
5844 fwrite ($ loghandle , DateTime::createFromFormat ('U.u ' , number_format (microtime (true ), 6 , '. ' , '' ))->setTimeZone (new DateTimeZone ($ cfg ['logs_timezone ' ]))->format ("Y-m-d H:i:s.u " ).$ loglevel .$ logtext ."\n" );
@@ -103,6 +89,8 @@ function enter_logfile($cfg,$loglevel,$logtext,$norotate = false) {
10389require_once (substr (__DIR__ ,0 ,-4 ).'jobs/get_avatars.php ' );
10490require_once (substr (__DIR__ ,0 ,-4 ).'jobs/update_groups.php ' );
10591require_once (substr (__DIR__ ,0 ,-4 ).'jobs/calc_serverstats.php ' );
92+ require_once (substr (__DIR__ ,0 ,-4 ).'jobs/server_usage.php ' );
93+ require_once (substr (__DIR__ ,0 ,-4 ).'jobs/calc_user_snapshot.php ' );
10694require_once (substr (__DIR__ ,0 ,-4 ).'jobs/calc_userstats.php ' );
10795require_once (substr (__DIR__ ,0 ,-4 ).'jobs/clean.php ' );
10896require_once (substr (__DIR__ ,0 ,-4 ).'jobs/check_db.php ' );
@@ -221,8 +209,8 @@ function run_bot() {
221209 enter_logfile ($ cfg ,2 ," Error due getting TS3 server version - " .$ e ->getCode ().': ' .$ e ->getMessage ());
222210 }
223211
224- if (version_compare ($ ts3version ['version ' ],'3.6 .9 ' ,'=< ' )) {
225- enter_logfile ($ cfg ,3 ," Your TS3 server is outdated, please update it.. also to be ready for TS5 ! " );
212+ if (version_compare ($ ts3version ['version ' ],'3.11 .9 ' ,'<= ' )) {
213+ enter_logfile ($ cfg ,3 ," Your TS3 server is outdated, please update it! " );
226214 }
227215
228216 enter_logfile ($ cfg ,9 ," Select virtual server... " );
@@ -304,7 +292,7 @@ function run_bot() {
304292 $ loglevel = "6 - DEBUG " ;
305293 break ;
306294 default :
307- $ loglevel = "UNKOWN " ;
295+ $ loglevel = "UNKNOWN " ;
308296 }
309297 enter_logfile ($ cfg ,9 ," Log Level: " .$ loglevel );
310298 enter_logfile ($ cfg ,6 ," Serverside config 'max_execution_time' (PHP.ini): " .$ max_execution_time ." sec. " );
@@ -348,11 +336,12 @@ function run_bot() {
348336
349337 $ serverinfo = $ ts3server ->serverInfo ();
350338 $ select_arr = array ();
351- $ sqlexec2 .= update_groups ($ ts3server ,$ mysqlcon ,$ lang ,$ cfg ,$ dbname ,$ serverinfo ,$ select_arr ,1 );
339+ $ db_cache = array ();
340+ $ sqlexec2 .= update_groups ($ ts3server ,$ mysqlcon ,$ lang ,$ cfg ,$ dbname ,$ serverinfo ,$ db_cache ,1 );
352341 if ($ mysqlcon ->exec ($ sqlexec2 ) === false ) {
353342 enter_logfile ($ cfg ,2 ,"Executing SQL commands failed: " .print_r ($ mysqlcon ->errorInfo (), true ));
354343 }
355- unset($ sqlexec2 ,$ select_arr ,$ groupslist ,$ serverinfo ,$ ts3version );
344+ unset($ sqlexec2 ,$ select_arr ,$ db_cache , $ groupslist ,$ serverinfo ,$ ts3version );
356345 $ errcnf = 0 ;
357346 enter_logfile ($ cfg ,4 ," Downloading of servergroups finished. Recheck the config. " );
358347
@@ -402,115 +391,144 @@ function run_bot() {
402391 }
403392 }
404393 }
405-
394+
406395 if ($ cfg ['webinterface_fresh_installation ' ] == 1 ) {
407396 if ($ mysqlcon ->exec ("UPDATE ` $ dbname`.`cfg_params` SET `value`=0 WHERE `param`='webinterface_fresh_installation' " ) === false ) {
408397 enter_logfile ($ cfg ,2 ,"Executing SQL commands failed: " .print_r ($ mysqlcon ->errorInfo (), true ));
409398 }
410399 }
411-
400+
412401 unset($ groupslist ,$ errcnf ,$ checkgroups ,$ lastupdate ,$ updcld ,$ loglevel ,$ whoami ,$ ts3host ,$ max_execution_time ,$ memory_limit ,$ memory_limit );
413402 enter_logfile ($ cfg ,9 ,"Config check [done] " );
414403
415404 enter_logfile ($ cfg ,9 ,"Bot starts now his work! " );
416405 $ looptime = $ cfg ['temp_count_laps ' ] = $ cfg ['temp_whole_laptime ' ] = $ cfg ['temp_count_laptime ' ] = 0 ; $ cfg ['temp_last_laptime ' ] = '' ;
417406 usleep (3000000 );
418407
408+ if (($ get_db_data = $ mysqlcon ->query ("SELECT * FROM ` $ dbname`.`user`; SELECT MAX(`timestamp`) AS `timestamp` FROM ` $ dbname`.`server_usage`; SELECT * FROM ` $ dbname`.`job_check`; SELECT * FROM ` $ dbname`.`groups`; SELECT * FROM ` $ dbname`.`addon_assign_groups`; SELECT * FROM ` $ dbname`.`admin_addtime`; " )) === false ) {
409+ shutdown ($ mysqlcon ,$ cfg ,1 ,"Select on DB failed: " .print_r ($ mysqlcon ->errorInfo (), true ));
410+ }
411+
412+ $ count_select = 0 ;
413+ $ db_cache = array ();
414+ while ($ single_select = $ get_db_data ) {
415+ $ fetched_array = $ single_select ->fetchAll (PDO ::FETCH_UNIQUE |PDO ::FETCH_ASSOC );
416+ $ count_select ++;
417+
418+ switch ($ count_select ) {
419+ case 1 :
420+ $ db_cache ['all_user ' ] = $ fetched_array ;
421+ break ;
422+ case 2 :
423+ $ db_cache ['max_timestamp_server_usage ' ] = $ fetched_array ;
424+ break ;
425+ case 3 :
426+ $ db_cache ['job_check ' ] = $ fetched_array ;
427+ break ;
428+ case 4 :
429+ $ db_cache ['groups ' ] = $ fetched_array ;
430+ break ;
431+ case 5 :
432+ $ db_cache ['addon_assign_groups ' ] = $ fetched_array ;
433+ break ;
434+ case 6 :
435+ $ db_cache ['admin_addtime ' ] = $ fetched_array ;
436+ break 2 ;
437+ }
438+ $ get_db_data ->nextRowset ();
439+ }
440+ unset($ get_db_data ,$ fetched_array ,$ single_select );
441+
442+ $ addons_config = load_addons_config ($ mysqlcon ,$ lang ,$ cfg ,$ dbname );
443+
419444 while (1 ) {
420445 $ sqlexec = '' ;
421446 $ starttime = microtime (true );
422-
423- if (($ get_db_data = $ mysqlcon ->query ("SELECT * FROM ` $ dbname`.`user`; SELECT `version`, COUNT(`version`) AS `count` FROM ` $ dbname`.`user` GROUP BY `version` ORDER BY `count` DESC; SELECT MAX(`timestamp`) AS `timestamp` FROM ` $ dbname`.`server_usage`; SELECT * FROM ` $ dbname`.`job_check`; SELECT `uuid` FROM ` $ dbname`.`stats_user`; SELECT * FROM ` $ dbname`.`groups`; SELECT * FROM ` $ dbname`.`addon_assign_groups`; SELECT * FROM ` $ dbname`.`admin_addtime`; " )) === false ) {
424- shutdown ($ mysqlcon ,$ cfg ,1 ,"Select on DB failed: " .print_r ($ mysqlcon ->errorInfo (), true ));
425- }
426447
427- $ count_select = 0 ;
428- $ select_arr = array ();
429- while ($ single_select = $ get_db_data ) {
430- $ fetched_array = $ single_select ->fetchAll (PDO ::FETCH_UNIQUE |PDO ::FETCH_ASSOC );
431- $ count_select ++;
448+ unset($ db_cache ['job_check ' ]);
449+ if (($ db_cache ['job_check ' ] = $ mysqlcon ->query ("SELECT * FROM ` $ dbname`.`job_check` " )->fetchAll (PDO ::FETCH_UNIQUE |PDO ::FETCH_ASSOC )) === false ) {
450+ enter_logfile ($ cfg ,3 ," Select on DB failed for job check: " .print_r ($ mysqlcon ->errorInfo (), true ));
451+ }
452+
453+ if ($ db_cache ['job_check ' ]['reload_trigger ' ]['timestamp ' ] == 1 ) {
454+ unset($ db_cache ['addon_assign_groups ' ],$ db_cache ['admin_addtime ' ]);
455+ if (($ get_db_data = $ mysqlcon ->query ("SELECT * FROM ` $ dbname`.`addon_assign_groups`; SELECT * FROM ` $ dbname`.`admin_addtime`; " )) === false ) {
456+ shutdown ($ mysqlcon ,$ cfg ,1 ,"Select on DB failed: " .print_r ($ mysqlcon ->errorInfo (), true ));
457+ }
432458
433- switch ($ count_select ) {
434- case 1 :
435- $ select_arr ['all_user ' ] = $ fetched_array ;
436- break ;
437- case 2 :
438- $ select_arr ['count_version_user ' ] = $ fetched_array ;
439- break ;
440- case 3 :
441- $ select_arr ['max_timestamp_server_usage ' ] = $ fetched_array ;
442- break ;
443- case 4 :
444- $ select_arr ['job_check ' ] = $ fetched_array ;
445- break ;
446- case 5 :
447- $ select_arr ['uuid_stats_user ' ] = $ fetched_array ;
448- break ;
449- case 6 :
450- $ select_arr ['groups ' ] = $ fetched_array ;
451- break ;
452- case 7 :
453- $ select_arr ['addon_assign_groups ' ] = $ fetched_array ;
454- break ;
455- case 8 :
456- $ select_arr ['admin_addtime ' ] = $ fetched_array ;
457- break 2 ;
459+ $ count_select = 0 ;
460+ while ($ single_select = $ get_db_data ) {
461+ $ fetched_array = $ single_select ->fetchAll (PDO ::FETCH_UNIQUE |PDO ::FETCH_ASSOC );
462+ $ count_select ++;
463+
464+ switch ($ count_select ) {
465+ case 1 :
466+ $ db_cache ['addon_assign_groups ' ] = $ fetched_array ;
467+ break ;
468+ case 2 :
469+ $ db_cache ['admin_addtime ' ] = $ fetched_array ;
470+ break 2 ;
471+ }
472+ $ get_db_data ->nextRowset ();
458473 }
459- $ get_db_data ->nextRowset ();
474+ unset($ get_db_data ,$ fetched_array ,$ single_select ,$ count_select );
475+ $ db_cache ['job_check ' ]['reload_trigger ' ]['timestamp ' ] = 0 ;
476+ $ sqlexec .= "UPDATE ` $ dbname`.`job_check` SET `timestamp`=0 WHERE `job_name`='reload_trigger'; \n" ;
460477 }
461- unset( $ get_db_data , $ fetched_array , $ single_select );
462- enter_logfile ($ cfg ,6 ,"SQL select needs: " .(number_format (round ((microtime (true ) - $ starttime ), 5 ),5 )));
478+
479+ enter_logfile ($ cfg ,6 ,"SQL Select needs: " .(number_format (round ((microtime (true ) - $ starttime ), 5 ),5 )));
463480
464481 check_shutdown ($ cfg );
465- $ addons_config = load_addons_config ( $ mysqlcon , $ lang , $ cfg , $ dbname );
482+
466483 $ ts3server ->clientListReset ();
467- usleep ($ cfg ['teamspeak_query_command_delay ' ]);
468- $ allclients = $ ts3server ->clientList ();
484+ $ allclients = $ ts3server ->clientListtsn ("-uid -groups -times -info -country " );
469485 usleep ($ cfg ['teamspeak_query_command_delay ' ]);
470486 $ ts3server ->serverInfoReset ();
471- usleep ($ cfg ['teamspeak_query_command_delay ' ]);
472487 $ serverinfo = $ ts3server ->serverInfo ();
473- $ sqlexec .= calc_user ($ ts3server ,$ mysqlcon ,$ lang ,$ cfg ,$ dbname ,$ allclients ,$ phpcommand ,$ select_arr );
474- get_avatars ($ ts3server ,$ cfg );
475- $ sqlexec .= clean ($ ts3server ,$ mysqlcon ,$ lang ,$ cfg ,$ dbname ,$ select_arr );
476- $ sqlexec .= calc_serverstats ($ ts3server ,$ mysqlcon ,$ cfg ,$ dbname ,$ dbtype ,$ serverinfo ,$ select_arr ,$ phpcommand ,$ lang );
477- $ sqlexec .= calc_userstats ($ ts3server ,$ mysqlcon ,$ cfg ,$ dbname ,$ select_arr );
478- $ sqlexec .= update_groups ($ ts3server ,$ mysqlcon ,$ lang ,$ cfg ,$ dbname ,$ serverinfo ,$ select_arr );
488+ usleep ($ cfg ['teamspeak_query_command_delay ' ]);
489+
490+ $ sqlexec .= calc_user ($ ts3server ,$ mysqlcon ,$ lang ,$ cfg ,$ dbname ,$ allclients ,$ phpcommand ,$ db_cache );
491+ $ sqlexec .= calc_userstats ($ ts3server ,$ mysqlcon ,$ cfg ,$ dbname ,$ db_cache );
492+ $ sqlexec .= get_avatars ($ ts3server ,$ cfg ,$ dbname ,$ db_cache );
493+ $ sqlexec .= clean ($ ts3server ,$ mysqlcon ,$ lang ,$ cfg ,$ dbname ,$ db_cache );
494+ $ sqlexec .= calc_serverstats ($ ts3server ,$ mysqlcon ,$ cfg ,$ dbname ,$ dbtype ,$ serverinfo ,$ db_cache ,$ phpcommand ,$ lang );
495+ $ sqlexec .= server_usage ($ mysqlcon ,$ cfg ,$ dbname ,$ serverinfo ,$ db_cache );
496+ $ sqlexec .= calc_user_snapshot ($ cfg ,$ dbname ,$ db_cache );
497+ $ sqlexec .= update_groups ($ ts3server ,$ mysqlcon ,$ lang ,$ cfg ,$ dbname ,$ serverinfo ,$ db_cache );
479498
480499 if ($ addons_config ['assign_groups_active ' ]['value ' ] == '1 ' ) {
481- if ($ cfg ['temp_addon_assign_groups ' ] == "disabled " ) {
482- enter_logfile ($ cfg ,5 ,"Loading new addon... " );
483- enter_logfile ($ cfg ,5 ," Addon: 'assign_groups' [ON] " );
484- if (!function_exists ('addon_assign_groups ' )) {
485- include (substr (__DIR__ ,0 ,-4 ).'jobs/addon_assign_groups.php ' );
486- }
487- $ cfg ['temp_addon_assign_groups ' ] = "enabled " ;
488- enter_logfile ($ cfg ,5 ,"Loading new addon [done] " );
489- }
490- $ sqlexec .= addon_assign_groups ($ addons_config ,$ ts3server ,$ cfg ,$ dbname ,$ allclients ,$ select_arr );
491- } elseif ($ cfg ['temp_addon_assign_groups ' ] == "enabled " ) {
492- enter_logfile ($ cfg ,5 ,"Disable addon... " );
493- enter_logfile ($ cfg ,5 ," Addon: 'assign_groups' [OFF] " );
494- $ cfg ['temp_addon_assign_groups ' ] = "disabled " ;
495- enter_logfile ($ cfg ,5 ,"Disable addon [done] " );
500+ $ sqlexec .= addon_assign_groups ($ addons_config ,$ ts3server ,$ cfg ,$ dbname ,$ allclients ,$ db_cache );
496501 }
497-
502+
498503 $ startsql = microtime (true );
499- if ($ mysqlcon ->exec ($ sqlexec ) === false ) {
500- enter_logfile ($ cfg ,2 ,"Executing SQL commands failed: " .print_r ($ mysqlcon ->errorInfo (), true ));
501- }
502- enter_logfile ($ cfg ,6 ,"SQL exections needs: " .(number_format (round ((microtime (true ) - $ startsql ), 5 ),5 )));
503504 if ($ cfg ['logs_debug_level ' ] > 5 ) {
505+ $ sqlexec = substr ($ sqlexec , 0 , -1 );
506+ $ sqlarr = explode ("; \n" , $ sqlexec );
507+ foreach ($ sqlarr as $ singlesql ) {
508+ if (strpos ($ singlesql , 'UPDATE ' ) !== false || strpos ($ singlesql , 'INSERT ' ) !== false || strpos ($ singlesql , 'DELETE ' ) !== false || strpos ($ singlesql , 'SET ' ) !== false ) {
509+ if ($ mysqlcon ->exec ($ singlesql ) === false ) {
510+ enter_logfile ($ cfg ,4 ,"Executing SQL: " .$ singlesql );
511+ enter_logfile ($ cfg ,2 ,"Executing SQL commands failed: " .print_r ($ mysqlcon ->errorInfo (), true ));
512+ }
513+ } elseif (strpos ($ singlesql , ' ' ) === false ) {
514+ enter_logfile ($ cfg ,2 ,"Command not recognized as SQL: " .$ singlesql );
515+ }
516+ }
504517 $ sqlfile = $ cfg ['logs_path ' ].'temp_sql_dump.sql ' ;
505518 $ sqldump = fopen ($ sqlfile , 'wa+ ' );
506- fwrite ($ sqldump , DateTime::createFromFormat ('U.u ' , number_format (microtime (true ), 6 , '. ' , '' ))->setTimeZone (new DateTimeZone ($ cfg ['logs_timezone ' ]))->format ("Y-m-d H:i:s.u " ).' SQL: ' . $ sqlexec . " \n" );
519+ fwrite ($ sqldump , DateTime::createFromFormat ('U.u ' , number_format (microtime (true ), 6 , '. ' , '' ))->setTimeZone (new DateTimeZone ($ cfg ['logs_timezone ' ]))->format ("Y-m-d H:i:s.u " )." SQL: \n". $ sqlexec );
507520 fclose ($ sqldump );
521+ } else {
522+ if ($ mysqlcon ->exec ($ sqlexec ) === false ) {
523+ enter_logfile ($ cfg ,2 ,"Executing SQL commands failed: " .print_r ($ mysqlcon ->errorInfo (), true ));
524+ }
508525 }
526+ enter_logfile ($ cfg ,6 ,"SQL executions needs: " .(number_format (round ((microtime (true ) - $ startsql ), 5 ),5 )));
509527
510- reset_rs ($ ts3server ,$ mysqlcon ,$ lang ,$ cfg ,$ dbname ,$ select_arr );
528+ reset_rs ($ ts3server ,$ mysqlcon ,$ lang ,$ cfg ,$ dbname ,$ db_cache );
511529
512530 unset($ sqlexec ,$ select_arr ,$ sqldump );
513-
531+
514532 $ looptime = microtime (true ) - $ starttime ;
515533 $ cfg ['temp_whole_laptime ' ] = $ cfg ['temp_whole_laptime ' ] + $ looptime ;
516534 $ cfg ['temp_count_laptime ' ]++;
0 commit comments