<?php
namespace SHServ;
use \Fury\Modules\Template\Template;
class DevTools {
protected Array $template_map = [];
protected Array $templates_counter = [];
protected Array $templates_timelog = [];
protected Int $total_uniq_template_parts = 0;
protected Int $total_template_calls = 0;
protected $root_template;
protected String $action_name = "";
protected String $action_type = "";
protected Array $action_params = [];
protected Float $action_execute_time = 0;
protected Array $models = [];
protected Array $sql_queries = [];
protected Float $sql_summary_time = 0;
protected Array $time_logs = [];
public function __construct() {}
public function add_template_to_map($template, $template_name) {
if(!$this -> root_template) {
$this -> root_template = $template;
}
if(!isset($this -> templates_counter[$template_name])) {
$this -> templates_counter[$template_name] = 0;
$this -> total_uniq_template_parts++;
}
if(!isset($this -> templates_timelog[$template_name])) {
$this -> templates_timelog[$template_name] = [
"rendering_start" => 0,
"rendering_time" => 0
];
}
$this -> templates_timelog[$template_name]["rendering_start"] = microtime(true);
$this -> templates_counter[$template_name]++;
$this -> total_template_calls++;
}
public function make_template_map(Array $templates) {
$arr = [];
foreach($templates as $template) {
$arr[$template -> template_name] = [
"calls" => $this -> templates_counter[$template -> template_name],
"rendering_time" => $this -> templates_timelog[$template -> template_name]["rendering_time"],
"childs" => $this -> make_template_map($template -> childs())
];
}
return $arr;
}
public function render_template_done(String $template_name) {
$render_time = microtime(true) - $this -> templates_timelog[$template_name]["rendering_start"];
$this -> templates_timelog[$template_name]["rendering_time"] += $render_time;
}
public function loging_action_call(String $action_name, String $action_type, Array $action_params) {
$this -> action_name = $action_name;
$this -> action_type = $action_type;
$this -> action_params = $action_params;
$this -> action_execute_time = microtime(true);
}
public function loging_action_time() {
$this -> action_execute_time = microtime(true) - $this -> action_execute_time;
}
public function using_model(String $model_name) {
$this -> models[] = $model_name;
}
public function loging_sql_query(String $sql) {
$this -> sql_queries[] = [
"query" => $sql,
"time" => microtime(true)
];
}
public function loging_sql_query_result() {
$last_inx = count($this -> sql_queries) - 1;
$this -> sql_queries[$last_inx]["time"] = microtime(true) - $this -> sql_queries[$last_inx]["time"];
$this -> sql_summary_time += $this -> sql_queries[$last_inx]["time"];
}
public function timelog_start(String $logname, String $title = "Untitled"): Void {
$this -> time_logs[$logname] = [
"title" => $title,
"timestamp" => microtime(true),
];
}
public function timelog_end(String $logname): Bool {
if(!isset($this -> time_logs[$logname])) {
return false;
}
$this -> time_logs[$logname]["timestamp"] = microtime(true) - $this -> time_logs[$logname]["timestamp"];
return true;
}
public function show() {
if($this -> root_template) {
$this -> template_map = $this -> make_template_map([ $this -> root_template ]);
echo (new Template(PROJECT_FOLDER, FCONF["templates_folder"])) -> make("devtools/devtools-panel", [
"template_map" => $this -> template_map,
"total_template_calls" => $this -> total_template_calls,
"total_uniq_template_parts" => $this -> total_uniq_template_parts,
"action_name" => $this -> action_name,
"action_type" => $this -> action_type,
"action_params" => $this -> action_params,
"action_execute_time" => $this -> action_execute_time,
"models" => $this -> models,
"sql_queries" => $this -> sql_queries,
"sql_summary_time" => $this -> sql_summary_time,
"time_logs" => $this -> time_logs,
]);
}
}
}