123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <?php
- /**
- * Log selected action in database with ip, datetime and optional logged user.
- * @author valentin carruesco
- * @category Core
- * @license copyright
- */
- class Log extends Entity
- {
- public $id,$label,$category,$ip;
- protected $fields =
- array(
- 'id' => 'key',
- 'label' => 'longstring',
- 'category' => 'string',
- 'ip' => 'string',
- );
- public function label(){
- return preg_replace_callback('|^\[([^\]]*)\](.*)|i', function($matches){
- return '<span class="badge badge-info">'.$matches[1].'</span>'.$matches[2];
- }, $this->label);
- }
- public static function put($label,$category = 'Général') {
- global $myUser;
- $log = new self();
- $log->label = $label;
- $log->category = $category;
- $log->ip = ip();
- $log->save();
- }
- //Compare deux instances d'une même entité et log
- //les differences entre les deux dans un format JSON
- public static function compare($old,$new = null,$metafunction=null){
- global $myUser;
-
- $log = new self();
- $log->label = array();
- if(!isset($new) || !isset($old->id) || $old->id==0){
- $log->label['action'] = 'create';
- $log->label['fields'] = is_object($new) ? $new->toArray(): $old->toArray();
- }else if (!$new){
- $log->label['action'] = 'delete';
- $log->label['fields'] = $old->toArray();
- }elseif (is_object($new)){
- $log->label['action'] = 'update';
- $log->label['fields'] = Entity::compare($old,$new);
- }
-
- $log->label['entity'] = $old->tableName();
-
-
- $log->category = $log->label['entity'].'::compare';
- $log->ip = ip();
- if(isset($metafunction))
- $metafunction($log);
-
- $log->label = json_encode($log->label);
- $log->save();
- }
- public static function clear($delay = 1){
- $treshold = time() - ($delay * 86400);
- self::delete(array('created:<'=>$treshold));
- }
-
- //Fonction permettant un benchmark simple et précis.
- public static function benchmark($title = ""){
- global $lastBench;
- $start = microtime(true);
- $benfile = __DIR__.SLASH.'..'.SLASH.'benchmark.debug.log';
- $bt = debug_backtrace();
- $newBench = array(
- 'time' => microtime(true),
- 'file' => str_replace(__ROOT__,'',$bt[0]['file']),
- 'line' => $bt[0]['line'],
- );
- $label = '';
- if(!isset($lastBench)){
- $label .= PHP_EOL.PHP_EOL.'['.($title=="" ? "BENCHMARK" : $title ).'] - Début requete > benchmark : '. number_format(microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"],4).' ms'.PHP_EOL;
- $label .= PHP_EOL."\t".'=> '.$newBench['file'].PHP_EOL.PHP_EOL;
-
- }else{
- if($lastBench['file']!= $newBench['file']) $label .= PHP_EOL."\t".'=> '.$newBench['file'].PHP_EOL;
- $time = $newBench['time'] - $lastBench['time'];
- $title.= ' L.'.$lastBench['line'].' > L.'.$newBench['line'].' '.$title;
- if($time>0.500) $title.=' <!> LENTEUR !!';
- $label .= "\t\t".number_format($time,4).' ms | '.$title.PHP_EOL;
- }
- file_put_contents($benfile, $label,FILE_APPEND);
- //on enleve au benchmark le temps d'execution de la fonciton de benchmark elle meme
- $newBench['time'] = $newBench['time'] - ( microtime(true) - $start);
- $lastBench = $newBench;
- }
-
-
- }
|