Files
accounting_dev_v2/application/controllers/Dbmonitor.php
T
2026-09-11 16:03:00 +07:00

7 lines
1.6 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Dbmonitor extends CI_Controller
{
public function run(){if(!$this->input->is_cli_request())show_404();$start=microtime(true);$this->db->reconnect();$connection=(microtime(true)-$start)*1000;$start=microtime(true);$this->db->query('SELECT 1')->row();$query=(microtime(true)-$start)*1000;$statusRows=$this->db->query("SHOW GLOBAL STATUS WHERE Variable_name IN('Threads_connected','Threads_running','Slow_queries')")->result();$status=array();foreach($statusRows as$r)$status[$r->Variable_name]=(int)$r->Value;$size=(float)$this->db->query("SELECT COALESCE(SUM(data_length+index_length)/1024/1024,0) size_mb FROM information_schema.tables WHERE table_schema=DATABASE()")->row()->size_mb;$health=$connection>500||$query>500?'critical':($connection>150||$query>150?'warning':'healthy');$message='Connection '.round($connection,2).' ms; query '.round($query,2).' ms';$this->db->insert('database_health_metrics',array('checked_at'=>date('Y-m-d H:i:s'),'connection_ms'=>$connection,'query_ms'=>$query,'threads_connected'=>$status['Threads_connected']??null,'threads_running'=>$status['Threads_running']??null,'slow_queries'=>$status['Slow_queries']??null,'db_size_mb'=>$size,'status'=>$health,'message'=>$message));echo json_encode(array('status'=>$health,'connection_ms'=>round($connection,3),'query_ms'=>round($query,3),'db_size_mb'=>round($size,2),'threads_connected'=>$status['Threads_connected']??null,'threads_running'=>$status['Threads_running']??null,'slow_queries'=>$status['Slow_queries']??null),JSON_PRETTY_PRINT).PHP_EOL;}
}