168 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			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;
 | |
|         
 | |
|     }
 | |
|     
 | |
| 
 | |
| } |