Calcul des tailles des données utilisateurs après debianisation et separation des BDD alternc / BDD users

Première ébauche, idéalement il faudrait tout réécrire proprement (voir ticket #1487)
This commit is contained in:
Axel ROGER 2013-04-18 13:09:08 +00:00
parent 8e5205e46e
commit 31d077e328
2 changed files with 95 additions and 41 deletions

View File

@ -42,23 +42,41 @@ class DB_users extends DB_Sql {
*/ */
function DB_users() { function DB_users() {
global $cuid, $db, $err; global $cuid, $db, $err;
$db->query("select db_servers.* from db_servers, membres where membres.uid=$cuid and membres.db_server_id=db_servers.id;");
if (!$db->next_record()) { // Check if function got args
$err->raise('db_user', _("There are no databases in db_servers for this user. Please contact your administrator.")); $num=func_num_args();
die();
switch($num) {
case 5 :
# Create the object
$this->HumanHostname = func_get_arg(0);
$this->Host = func_get_arg(1);
$this->User = func_get_arg(2);
$this->Password = func_get_arg(3);
$this->Client = func_get_arg(4);
$this->Database = "mysql"; # We have to define a dabatase when we connect, and the database must exists.
break;
default :
$db->query("select db_servers.* from db_servers, membres where membres.uid=$cuid and membres.db_server_id=db_servers.id;");
if (!$db->next_record()) {
$err->raise('db_user', _("There are no databases in db_servers for this user. Please contact your administrator."));
die();
}
# Create the object
$this->HumanHostname = $db->f('name');
$this->Host = $db->f('host');
$this->User = $db->f('login');
$this->Password = $db->f('password');
$this->Client = $db->f('client');
$this->Database = "mysql"; # We have to define a dabatase when we connect, and the database must exist.
break;
} }
# Create the object
$this->HumanHostname = $db->f('name');
$this->Host = $db->f('host');
$this->User = $db->f('login');
$this->Password = $db->f('password');
$this->Client = $db->f('client');
$this->Database = "mysql"; # We have to define a dabatase when we connect, and the database must exist.
} }
} }
@ -1079,6 +1097,34 @@ class m_mysql {
} }
} }
/* ----------------------------------------------------------------- */
/**
* Return the size of each databases in a SQL Host given in parameter
* @param $db_name the human name of the host
* @param $db_host the host hosting the SQL databases
* @param $db_login the login to access the SQL db
* @param $db_password the password to access the SQL db
* @param $db_client the client to access the SQL db
* @return an array associating the name of the databases to their sizes : array(dbname=>size)
*/
function get_dbus_size($db_name,$db_host,$db_login,$db_password,$db_client) {
global $db,$err;
$err->log("mysql","get_dbus_size",$db_host);
$this->dbus=new DB_users($db_name,$db_host,$db_login,$db_password,$db_client);
$this->dbus->query("show databases;");
$res=array();
$d=array();
while($this->dbus->next_record()) {
$dbname=$this->dbus->f("Database");
$c=mysql_query("SHOW TABLE STATUS FROM $dbname;");
$size=0;
while ($d=mysql_fetch_array($c)) {
$size+=$d["Data_length"]+$d["Index_length"];
}
$res["$dbname"]="$size";
}
return $res;
}
} /* Class m_mysql */ } /* Class m_mysql */

View File

@ -5,42 +5,50 @@ require_once("/usr/share/alternc/panel/class/config_nochk.php");
// On déverrouile le bureau AlternC :) // On déverrouile le bureau AlternC :)
@alternc_shutdown(); @alternc_shutdown();
echo "---------------------------\n Generating size-cache for web accounts\n\n"; global $db;
echo "\n---------------------------\n Generating size-cache for web accounts\n\n";
$r=mysql_query("SELECT uid,login FROM membres;"); $r=mysql_query("SELECT uid,login FROM membres;");
while ($c=mysql_fetch_array($r)) { while ($c=mysql_fetch_array($r)) {
echo $c["login"]; flush(); echo $c["login"]; flush();
$size=exec("sudo /usr/lib/alternc/du.pl ".ALTERNC_HTML."/".substr($c["login"],0,1)."/".$c["login"]); $size=exec("sudo /usr/lib/alternc/du.pl ".ALTERNC_HTML."/".substr($c["login"],0,1)."/".$c["login"]);
mysql_query("REPLACE INTO size_web SET uid='".$c["uid"]."',size='$size';"); $db->query("REPLACE INTO size_web SET uid='".$c["uid"]."',size='$size';");
echo " done ($size KB) \n"; flush(); echo " done ($size KB) \n"; flush();
} }
echo "---------------------------\n Generating size-cache for MySQL databases\n\n"; echo "\n---------------------------\n Generating size-cache for MySQL databases\n\n";
$r=mysql_query("SELECT uid,db FROM db;"); // We get all hosts on which sql users' DB are
while ($c=mysql_fetch_array($r)) { $r=mysql_query("select * from db_servers;");
echo $c["uid"]."/".$c["db"]; flush(); $tab=array();
$s=mysql_query('SHOW TABLE STATUS FROM `'.$c["db"].'`');
$size=0;
while ($d=mysql_fetch_array($s)) {
$size+=$d["Data_length"]+$d["Index_length"];
}
// $size/=1024;
mysql_query("REPLACE INTO size_db SET db='".$c["db"]."',size='$size';");
echo " done ($size B) \n"; flush();
}
echo "---------------------------\n Generating size-cache for web accounts\n\n";
$r=@mysql_query("SELECT uid, name FROM mailman;");
if ($r) {
while ($c=mysql_fetch_array($r)) { while ($c=mysql_fetch_array($r)) {
echo $c["uid"]."/".$c["name"]; flush(); $tab=$mysql->get_dbus_size($c["name"],$c["host"],$c["login"],$c["password"],$c["client"]);
$size1=exec("sudo /usr/lib/alternc/du.pl /var/lib/mailman/lists/".$c["name"]); echo "++ Processing ".$c["name"]." ++\n";
$size2=exec("sudo /usr/lib/alternc/du.pl /var/lib/mailman/archives/private/".$c["name"]); foreach ($tab as $dbname=>$size) {
$size3=exec("sudo /usr/lib/alternc/du.pl /var/lib/mailman/archives/private/".$c["name"].".mbox"); $db->query("REPLACE INTO size_db SET db='".$dbname."',size='$size';");
$size=(intval($size1)+intval($size2)+intval($size3)); echo " $dbname done ($size B) \n"; flush();
mysql_query("REPLACE INTO size_mailman SET uid='".$c["uid"]."',list='".$c["name"]."', size='$size';"); }
echo " done ($size KB) \n"; flush(); echo "\n";
} }
}
echo "---------------------------\n Generating size-cache for mailman\n\n";
if ($db->query("SELECT uid, name FROM mailman;")) {
$c=array();
$d=array();
if($db->num_rows()){
while ($db->next_record()) {
$cc[]=array("uid" => $db->f("uid"), "name" => $db->f("name"));
}
foreach ($cc as $c){
echo $c["uid"]."/".$c["name"]; flush();
$size1=exec("sudo /usr/lib/alternc/du.pl /var/lib/mailman/lists/".$c["name"]);
$size2=exec("sudo /usr/lib/alternc/du.pl /var/lib/mailman/archives/private/".$c["name"]);
$size3=exec("sudo /usr/lib/alternc/du.pl /var/lib/mailman/archives/private/".$c["name"].".mbox");
$size=(intval($size1)+intval($size2)+intval($size3));
$db->query("REPLACE INTO size_mailman SET uid='".$c["uid"]."',list='".$c["name"]."', size='$size';");
echo " done ($size KB) \n"; flush();
}
}
}
// On relocke le bureau pour éviter un msg d'erreur. // On relocke le bureau pour éviter un msg d'erreur.
@sem_acquire( $alternc_sem ); @sem_acquire( $alternc_sem );