diff --git a/db_functions.php b/db_functions.php index 611705c..ab50072 100644 --- a/db_functions.php +++ b/db_functions.php @@ -25,90 +25,90 @@ class Db { + private static function connect() + { + $cb_mysql = mysqli_connect( + 'p:' . Config::$cb_mysql_host, + Config::$cb_mysql_user, + Config::$cb_mysql_pass, + Config::$cb_mysql_db, + Config::$cb_mysql_port + ); + if (!$cb_mysql) { + Metrics::increment('bot_mysql_cb_connection_failures_total'); + die('cb mysql error: ' . mysqli_connect_error()); + } + mysqli_select_db($cb_mysql, Config::$cb_mysql_db); + return $cb_mysql; + } + + private static function runQuery($cb_mysql, string $identifier, string $context, string $sql) + { + global $logger; + try { + return mysqli_query($cb_mysql, $sql); + } catch (mysqli_sql_exception $e) { + $logger->error("$identifier query returned an error for $context: " . $e->getMessage()); + Metrics::increment('bot_mysql_cb_query_failures_total', [$identifier]); + return false; + } + } + // Returns the edit id for the vandalism public static function detectedVandalism($user, $title, $heuristic, $reason, $url, $old_rev_id, $rev_id) { - global $logger; - checkMySQL(); + $cb_mysql = self::connect(); $query = 'INSERT INTO `vandalism` ' . '(`id`,`user`,`article`,`heuristic`,`reason`,`diff`,`old_id`,`new_id`,`reverted`) ' . 'VALUES ' . - '(NULL,\'' . mysqli_real_escape_string(Globals::$cb_mysql, $user) . '\',' . - '\'' . mysqli_real_escape_string(Globals::$cb_mysql, $title) . '\',' . - '\'' . mysqli_real_escape_string(Globals::$cb_mysql, $heuristic) . '\',' . - '\'' . mysqli_real_escape_string(Globals::$cb_mysql, $reason) . '\',' . - '\'' . mysqli_real_escape_string(Globals::$cb_mysql, $url) . '\',' . - '\'' . mysqli_real_escape_string(Globals::$cb_mysql, $old_rev_id) . '\',' . - '\'' . mysqli_real_escape_string(Globals::$cb_mysql, $rev_id) . '\',0)'; - try { - if (!mysqli_query(Globals::$cb_mysql, $query)) { - Metrics::increment('bot_mysql_cb_query_failures_total', ['vandalism_insert']); - } - } catch (mysqli_sql_exception $e) { - $logger->error("vandalism insert query returned an error for " . $title . ": " . $e->getMessage()); - Metrics::increment('bot_mysql_cb_query_failures_total', ['vandalism_insert']); - } + '(NULL,\'' . mysqli_real_escape_string($cb_mysql, $user) . '\',' . + '\'' . mysqli_real_escape_string($cb_mysql, $title) . '\',' . + '\'' . mysqli_real_escape_string($cb_mysql, $heuristic) . '\',' . + '\'' . mysqli_real_escape_string($cb_mysql, $reason) . '\',' . + '\'' . mysqli_real_escape_string($cb_mysql, $url) . '\',' . + '\'' . mysqli_real_escape_string($cb_mysql, $old_rev_id) . '\',' . + '\'' . mysqli_real_escape_string($cb_mysql, $rev_id) . '\',0)'; + self::runQuery($cb_mysql, 'vandalism_insert', $title, $query); - return mysqli_insert_id(Globals::$cb_mysql); + $edit_id = mysqli_insert_id($cb_mysql); + mysqli_close($cb_mysql); + return $edit_id; } // Returns nothing public static function vandalismReverted($edit_id) { - global $logger; - checkMySQL(); - try { - if ( - !mysqli_query( - Globals::$cb_mysql, - 'UPDATE `vandalism` SET `reverted` = 1 WHERE `id` = \'' . - mysqli_real_escape_string(Globals::$cb_mysql, $edit_id) . '\'' - ) - ) { - Metrics::increment('bot_mysql_cb_query_failures_total', ['vandalism_update_reverted']); - } - } catch (mysqli_sql_exception $e) { - $logger->error("vandalism update (reverted) query returned an error for " . $edit_id . - ": " . $e->getMessage()); - Metrics::increment('bot_mysql_cb_query_failures_total', ['vandalism_update_reverted']); - } + $cb_mysql = self::connect(); + self::runQuery( + $cb_mysql, + 'vandalism_update_reverted', + $edit_id, + 'UPDATE `vandalism` SET `reverted` = 1 WHERE `id` = \'' . + mysqli_real_escape_string($cb_mysql, $edit_id) . '\'' + ); + mysqli_close($cb_mysql); } // Returns nothing public static function vandalismRevertBeaten($edit_id, $title, $user, $diff) { - global $logger; - checkMySQL(); - try { - if ( - !mysqli_query( - Globals::$cb_mysql, - 'UPDATE `vandalism` SET `reverted` = 0 WHERE `id` = \'' . - mysqli_real_escape_string(Globals::$cb_mysql, $edit_id) . '\'' - ) - ) { - Metrics::increment('bot_mysql_cb_query_failures_total', ['vandalism_update_beaten']); - } - } catch (mysqli_sql_exception $e) { - $logger->error("vandalism update (beaten) query returned an error for " . $edit_id . - ": " . $e->getMessage()); - Metrics::increment('bot_mysql_cb_query_failures_total', ['vandalism_update_beaten']); - } - try { - if ( - !mysqli_query( - Globals::$cb_mysql, - 'INSERT INTO `beaten` (`id`,`article`,`diff`,`user`) VALUES (NULL,\'' . - mysqli_real_escape_string(Globals::$cb_mysql, $title) . '\',\'' . - mysqli_real_escape_string(Globals::$cb_mysql, $diff) . '\',\'' . - mysqli_real_escape_string(Globals::$cb_mysql, $user) . '\')' - ) - ) { - Metrics::increment('bot_mysql_cb_query_failures_total', ['beaten_insert']); - } - } catch (mysqli_sql_exception $e) { - $logger->error("beaten insert query returned an error for " . $title . ": " . $e->getMessage()); - Metrics::increment('bot_mysql_cb_query_failures_total', ['beaten_insert']); - } + $cb_mysql = self::connect(); + self::runQuery( + $cb_mysql, + 'vandalism_update_beaten', + $edit_id, + 'UPDATE `vandalism` SET `reverted` = 0 WHERE `id` = \'' . + mysqli_real_escape_string($cb_mysql, $edit_id) . '\'' + ); + self::runQuery( + $cb_mysql, + 'beaten_insert', + $title, + 'INSERT INTO `beaten` (`id`,`article`,`diff`,`user`) VALUES (NULL,\'' . + mysqli_real_escape_string($cb_mysql, $title) . '\',\'' . + mysqli_real_escape_string($cb_mysql, $diff) . '\',\'' . + mysqli_real_escape_string($cb_mysql, $user) . '\')' + ); + mysqli_close($cb_mysql); } } diff --git a/globals.php b/globals.php index 59ba0dc..908af79 100644 --- a/globals.php +++ b/globals.php @@ -27,7 +27,6 @@ class Globals public static $tfas; public static $tfa; public static $aoptin; - public static $cb_mysql; public static $run; public static $wl = []; public static $optin; diff --git a/mysql_functions.php b/mysql_functions.php index 023c5c9..24fb78c 100644 --- a/mysql_functions.php +++ b/mysql_functions.php @@ -22,33 +22,6 @@ * You should have received a copy of the GNU General Public License * along with ClueBot NG. If not, see . */ -function is_mysql_alive($con) -{ - try { - return @mysqli_query($con, 'SELECT LAST_INSERT_ID()'); - } catch (mysqli_sql_exception $e) { - return false; - } -} - -function checkMySQL() -{ - if (!Globals::$cb_mysql || !is_mysql_alive(Globals::$cb_mysql)) { - Globals::$cb_mysql = mysqli_connect( - 'p:' . Config::$cb_mysql_host, - Config::$cb_mysql_user, - Config::$cb_mysql_pass, - Config::$cb_mysql_db, - Config::$cb_mysql_port - ); - if (!Globals::$cb_mysql) { - Metrics::increment('bot_mysql_cb_connection_failures_total'); - die('cb mysql error: ' . mysqli_connect_error()); - } - mysqli_select_db(Globals::$cb_mysql, Config::$cb_mysql_db); - } -} - function connect_to_mysql($exclude_users = []) { global $logger;