0) { $debug_backtrace .= addslashes("function " . $net2ftp_result_original["debug_backtrace"][$i]["function"] . " (" . $net2ftp_result_original["debug_backtrace"][$i]["file"] . " on line " . $net2ftp_result_original["debug_backtrace"][$i]["line"] . ")\n"); for ($j=0; $j sqlquery1)
$sqlquery1"); $nrofrows1 = mysql_num_rows($result1); if ($nrofrows1 == 0) { $logStatus = 1; } elseif ($nrofrows1 == 1) { $resultRow1 = mysql_fetch_row($result1); $logStatus = $resultRow1[0]; } else { setErrorVars(false, __("Table net2ftp_log_status contains duplicate entries."), debug_backtrace(), __FILE__, __LINE__); return false; } // Return $logStatus return $logStatus; } // End getLogStatus // ** ** // ** ** // ************************************************************************************** // ************************************************************************************** // ************************************************************************************** // ************************************************************************************** // ** ** // ** ** function putLogStatus($logStatus) { // -------------- // This function writes the log rotation status to the database. // -------------- // ------------------------------------------------------------------------- // Global variables // ------------------------------------------------------------------------- global $net2ftp_globals, $net2ftp_settings, $net2ftp_result; // ------------------------------------------------------------------------- // Initial checks // ------------------------------------------------------------------------- // Verify if a database is used. If not: don't continue. if ($net2ftp_settings["use_database"] != "yes") { return true; } // ------------------------------------------------------------------------- // Determine current month and last month // ------------------------------------------------------------------------- $currentmonth = date("Ym"); // e.g. 201207 $lastmonth = date("Ym", mktime(0, 0, 0, date("m")-1, date("d"), date("Y"))); $datetime = mytime(); // ------------------------------------------------------------------------- // Connect to the database // ------------------------------------------------------------------------- $mydb = connect2db(); if ($net2ftp_result["success"] == false) { return false; } // ------------------------------------------------------------------------- // Put log rotation status // ------------------------------------------------------------------------- $sqlquery1 = "SELECT status, changelog FROM net2ftp_log_status WHERE month = '$currentmonth';"; $result1 = mysql_query("$sqlquery1"); $nrofrows1 = mysql_num_rows($result1); if ($nrofrows1 == 1) { $resultRow1 = mysql_fetch_row($result1); $logStatus_old = $resultRow1[0]; $changelog_old = $resultRow1[1]; $changelog_new = $changelog_old . "From $logStatus_old to $logStatus on $datetime. "; $sqlquery2 = "UPDATE net2ftp_log_status SET status = '" . $logStatus . "', changelog = '" . $changelog_new . "' WHERE month = '$currentmonth';"; $result2 = mysql_query("$sqlquery2"); $nrofrows2 = mysql_affected_rows($mydb); } // Don't check on the UPDATE nr of rows, because when the values in the variables and in the table are the same, // the $nrofrows2 is set to 0. elseif ($nrofrows1 == 0) { $changelog_new = "Set to $logStatus on $datetime. "; $sqlquery3 = "INSERT INTO net2ftp_log_status VALUES('$currentmonth', '" . $logStatus . "', '" . $changelog_new . "');"; $result3 = mysql_query("$sqlquery3"); $nrofrows3 = mysql_affected_rows($mydb); if ($nrofrows3 != 1) { setErrorVars(false, __("Table net2ftp_log_status could not be updated."), debug_backtrace(), __FILE__, __LINE__); return false; } } else { setErrorVars(false, __("Table net2ftp_log_status contains duplicate entries."), debug_backtrace(), __FILE__, __LINE__); return false; } // ------------------------------------------------------------------------- // Return true // ------------------------------------------------------------------------- return true; } // End putLogStatus // ** ** // ** ** // ************************************************************************************** // ************************************************************************************** // ************************************************************************************** // ************************************************************************************** // ** ** // ** ** function emptyLogs($datefrom, $dateto) { // -------------- // This function deletes the log records for the dates between $datefrom // and $dateto. // The global variable $net2ftp_output["emptyLogs"] is filled with result messages. // The function returns true on success, false on failure. // -------------- // ------------------------------------------------------------------------- // Global variables // ------------------------------------------------------------------------- global $net2ftp_globals, $net2ftp_result, $net2ftp_output; $toreturn = true; // ------------------------------------------------------------------------- // Connect to the database // ------------------------------------------------------------------------- $mydb = connect2db(); if ($net2ftp_result["success"] == false) { return false; } $tables[1] = "net2ftp_log_access"; $tables[2] = "net2ftp_log_error"; $tables[3] = "net2ftp_log_consumption_ftpserver"; $tables[4] = "net2ftp_log_consumption_ipaddress"; // ------------------------------------------------------------------------- // Execute the queries // ------------------------------------------------------------------------- for ($i=1; $i<=sizeof($tables); $i++) { $sqlquery_empty = "DELETE FROM $tables[$i] WHERE date BETWEEN '$datefrom' AND '$dateto';"; $result_empty[$i] = mysql_query("$sqlquery_empty"); $sqlquery_optimize = "OPTIMIZE TABLE `" . $tables[$i] . "`;"; $result_optimize[$i] = mysql_query("$sqlquery_optimize"); if ($result_empty[$i] == true) { $net2ftp_output["emptyLogs"][] = __("The table %1\$s was emptied successfully.", $tables[$i]); } else { $toreturn = false; $net2ftp_output["emptyLogs"][] = __("The table %1\$s could not be emptied.", $tables[$i]); } if ($result_optimize[$i] == true) { $net2ftp_output["emptyLogs"][] = __("The table %1\$s was optimized successfully.", $tables[$i]); } else { $toreturn = false; $net2ftp_output["emptyLogs"][] = __("The table %1\$s could not be optimized.", $tables[$i]); } } // end for return $toreturn; } // end emptyLogs() // ** ** // ** ** // ************************************************************************************** // ************************************************************************************** // ************************************************************************************** // ************************************************************************************** // ** ** // ** ** function rotateLogs() { // -------------- // Rotate the tables // net2ftp_log_access = active table // net2ftp_log_access_YYYYMM = archive table with information of month MM and year YYYY // net2ftp_log_access_template = template table (empty table) // // To avoid that the log rotation actions would be executed multiple times at // the end of the period, a "log rotation status" is used: // 0 = no rotation needed // 1 = step 1 not yet started (renaming active tables to archived tables) // 2 = step 1 in progress // 3 = step 2 not yet started (copying template tables to the active tables) // 4 = step 2 in progress // 5 = step 3 not yet started (dropping oldest archive tables) // 6 = step 3 in progress // -------------- // ------------------------------------------------------------------------- // Global variables // ------------------------------------------------------------------------- global $net2ftp_globals, $net2ftp_settings, $net2ftp_result, $net2ftp_output; $toreturn = true; // ------------------------------------------------------------------------- // Verify if a database is used. If not: don't continue. // ------------------------------------------------------------------------- if ($net2ftp_settings["use_database"] != "yes") { return true; } // ------------------------------------------------------------------------- // Check if the setting is within the allowed range; if not, set it to 12 months // ------------------------------------------------------------------------- if (!($net2ftp_settings["log_length_months"] > 1 && $net2ftp_settings["log_length_months"] < 99)) { $net2ftp_settings["log_length_months"] = 12; } // ------------------------------------------------------------------------- // Current month, next month, previous month // ------------------------------------------------------------------------- $currentmonth = date("Ym"); // e.g. 201207 $lastmonth = date("Ym", mktime(0, 0, 0, date("m")-1, date("d"), date("Y"))); $nextmonth = date("Ym", mktime(0, 0, 0, date("m")+1, date("d"), date("Y"))); $dropmonth = date("Ym", mktime(0, 0, 0, date("m")-$net2ftp_settings["log_length_months"]-1, date("d"), date("Y"))); // ------------------------------------------------------------------------- // Connect to the database // ------------------------------------------------------------------------- $mydb = connect2db(); if ($net2ftp_result["success"] == false) { return false; } // ------------------------------------------------------------------------- // Get the log rotation status // ------------------------------------------------------------------------- $logStatus = getLogStatus(); if ($net2ftp_result["success"] == false) { return false; } // No log rotation needed if ($logStatus === 0) { return true; } // ------------------------------------------------------------------------- // Table names and SQL queries to create the tables // ------------------------------------------------------------------------- $tables[1]["name"] = "net2ftp_log_access"; $tables[2]["name"] = "net2ftp_log_error"; $tables[3]["name"] = "net2ftp_log_consumption_ftpserver"; $tables[4]["name"] = "net2ftp_log_consumption_ipaddress"; // ------------------------------------------------------------------------- // step 1 of rotation: rename active tables to archived tables // ------------------------------------------------------------------------- if ($logStatus == 1) { // Set the log status to indicate this step is in progress putLogStatus(2); if ($net2ftp_result["success"] == false) { return false; } // Execute the step for ($i=1; $i<=sizeof($tables); $i++) { $table = $tables[$i]["name"]; // Example: net2ftp_log_access $table_archive = $table . "_" . $lastmonth; // Example: net2ftp_log_access_201206 $table_archive_drop = $table . "_" . $dropmonth; // Example: net2ftp_log_access_201106 $sqlquery_rename = "RENAME TABLE $table TO $table_archive"; $result_rename[$i] = mysql_query("$sqlquery_rename"); if ($result_rename[$i] == true) { $net2ftp_output["rotateLogs"][] = __("The log tables were renamed successfully."); } else { $toreturn = false; $net2ftp_output["rotateLogs"][] = __("The log tables could not be renamed."); } } // end for // Set the log status to indicate this step is in done and the next can start putLogStatus(3); if ($net2ftp_result["success"] == false) { return false; } } // ------------------------------------------------------------------------- // step 2 of rotation: copy template tables to the active // ------------------------------------------------------------------------- elseif ($logStatus == 3) { // Set the log status to indicate this step is in progress putLogStatus(4); if ($net2ftp_result["success"] == false) { return false; } // Execute the step for ($i=1; $i<=sizeof($tables); $i++) { $table = $tables[$i]["name"]; // Example: net2ftp_log_access $table_archive = $table . "_" . $lastmonth; // Example: net2ftp_log_access_201206 $table_archive_drop = $table . "_" . $dropmonth; // Example: net2ftp_log_access_201106 $sqlquery_copy = "CREATE TABLE $table LIKE $table_archive"; $result_copy[$i] = mysql_query("$sqlquery_copy"); if ($result_copy[$i] == true) { $net2ftp_output["rotateLogs"][] = __("The log tables were copied successfully."); } else { $toreturn = false; $net2ftp_output["rotateLogs"][] = __("The log tables could not be copied."); } } // end for // Set the log status to indicate this step is in done and the next can start putLogStatus(5); if ($net2ftp_result["success"] == false) { return false; } } // ------------------------------------------------------------------------- // step 3 of rotation: drop oldest archive tables // ------------------------------------------------------------------------- elseif ($logStatus == 5) { // Set the log status to indicate this step is in progress putLogStatus(6); if ($net2ftp_result["success"] == false) { return false; } // Execute the step for ($i=1; $i<=sizeof($tables); $i++) { $table = $tables[$i]["name"]; // Example: net2ftp_log_access $table_archive = $table . "_" . $lastmonth; // Example: net2ftp_log_access_201206 $table_archive_drop = $table . "_" . $dropmonth; // Example: net2ftp_log_access_201106 $sqlquery_drop = "DROP TABLE IF EXISTS $table_archive_drop;"; $result_drop[$i] = mysql_query("$sqlquery_drop"); if ($result_drop[$i] == true) { $net2ftp_output["rotateLogs"][] = __("The oldest log table was dropped successfully."); } else { $toreturn = false; $net2ftp_output["rotateLogs"][] = __("The oldest log table could not be dropped."); } } // end for // Set the log status to indicate this step is in done and the rotation is over putLogStatus(0); if ($net2ftp_result["success"] == false) { return false; } } return $toreturn; } // end rotateLogs() // ** ** // ** ** // ************************************************************************************** // ************************************************************************************** ?>