AlternC/lib/Alternc/Diagnostic/Service/Mysql.php

168 lines
5.5 KiB
PHP

<?php
/**
* Lists databases
* Lists users
*/
class Alternc_Diagnostic_Service_Mysql
extends Alternc_Diagnostic_Service_Abstract
implements Alternc_Diagnostic_Service_Interface {
public $name = "mysql";
protected $dbList;
protected $usersList;
protected $serversList;
const SECTION_DB_LIST = "dbs_list";
const SECTION_USER_LIST = "users_list";
const SECTION_SERVERS_LIST = "servers_list";
const SECTION_STAT_SIZE = "stat_size";
const SECTION_CHECK_ACCESS = "check_access";
/**
*
* @inherit
*/
function run() {
$this->dbList = $this->getDbList();
$this->usersList = $this->getUsersList();
$this->serversList = $this->getServersList();
// Writes the mysql db list
$this->writeSectionData(self::SECTION_DB_LIST, $this->dbList);
// Writes the mysql user list
$this->writeSectionData(self::SECTION_USER_LIST, $this->usersList);
// Writes the mysql servers list
$this->writeSectionData(self::SECTION_SERVERS_LIST, $this->serversList);
// Writes the mysql size stats
$this->writeSectionData(self::SECTION_STAT_SIZE, $this->getSizeStats());
// Writes the mysql access check
$this->writeSectionData(self::SECTION_CHECK_ACCESS, $this->getCheckAccess());
return $this->data;
}
/**
* Returns a db_name -> dbInfo array
*
* @return array
*/
function getDbList() {
$returnArray = array();
$this->db->query("SELECT login,pass,db, bck_mode, bck_dir FROM db ORDER BY db;");
if ($this->db->num_rows()) {
while ($this->db->next_record()) {
$db = $this->db->f("db");
list($dbu,$dbn) = split_mysql_database_name($db);
$returnArray[$db] = array(
"user" => $dbu,
"bck_mode" => $this->db->f("bck_mode"),
"bck_dir" => $this->db->f("bck_dir"),
"login" => $this->db->f("login"),
"pass" => $this->db->f("pass")
);
}
}
return $returnArray;
}
/**
* Returns a db_user_name -> dbUserInfo array
*
* @return array
*/
function getUsersList() {
$returnArray = array();
$this->db->query("SELECT name, password, enable FROM dbusers ORDER BY name;");
if ($this->db->num_rows()) {
while ($this->db->next_record()) {
$returnArray[$this->db->f("name")] = array(
"enable" => $this->db->f("enable"),
"password" => $this->db->f("password")
);
}
}
return $returnArray;
}
/**
* Returns a server_name -> serverInfo array
*
* @return array
*/
function getServersList() {
$returnArray = array();
$this->db->query("SELECT name, host, login, password FROM db_servers ORDER BY host;");
if ($this->db->num_rows()) {
while ($this->db->next_record()) {
$returnArray[$this->db->f("name")] = array(
"host" => $this->db->f("host"),
"login" => $this->db->f("login"),
"password" => $this->db->f("password")
);
}
}
return $returnArray;
}
/**
* Returns a db_name -> db_size array
*
* @return array
*/
function getSizeStats(){
$returnArray = array();
global $L_MYSQL_LOGIN, $L_MYSQL_HOST, $L_MYSQL_PWD;
$db = new DB_Sql();
$db->Host = $L_MYSQL_HOST;
$db->User = $L_MYSQL_LOGIN;
$db->Password = $L_MYSQL_PWD;
$db->Database = "mysql";
foreach ($this->dbList as $dbname => $dbInfo) {
$db->query("SHOW TABLE STATUS FROM `$dbname`;");
$size = 0;
while ($db->next_record()) {
$size += $db->f('Data_length') + $db->f('Index_length');
if ( $db->f('Engine') != 'InnoDB') $size += $db->f('Data_free');
}
$returnArray[$dbname] = $size;
}
return $returnArray;
}
/**
* Returns a user_name -> has_access array
*
* @return array
*/
function getCheckAccess(){
$returnArray = array();
global $L_MYSQL_LOGIN, $L_MYSQL_HOST, $L_MYSQL_PWD;
$db = new DB_Sql();
$db->Host = $L_MYSQL_HOST;
$db->User = $L_MYSQL_LOGIN;
$db->Password = $L_MYSQL_PWD;
$db->Database = "mysql";
foreach ($this->usersList as $user => $userInfo) {
$has_access = false;
$password = $userInfo["password"];
$db->query("SELECT FROM user where user='".$user."' and password=PASSWORD('".$password."') ORDER BY host;");
if ($this->db->num_rows()) {
$has_access = true;
}
$returnArray[$user] = $has_access;
}
return $returnArray;
}
}