<?php
include_once('c_kt_card_db.php') ;
class c_page_cab_kt_card_db_term extends c_page_cab_kt_card_db
{
 public $h1='Лог терминала' ;

 function get_cur_page_meta_tags()
 {
   if ($this->rec_personal['pkey']) $this->h1='Лог работы терминала при проверке сотрудника '.$this->rec_personal['obj_name'] ;
 }

 function block_main()
 { $this->page_title() ;
   $rec_terminal=DEVICE()->get_terminal_by_id($this->rec_mo['terminal_id']) ;
   $term_ip=$rec_terminal['ip'] ;
   $log_fname=_DIR_TO_ROOT.'/logs/'.$this->rec_mo['terminal_id'].'_terminal.log' ;
   if (file_exists($log_fname)) unlink($log_fname) ;
   $ts1=fixed_time() ;
   $cmd='/usr/bin/scp root@'.$rec_terminal['ip'].':/var/log/esmo/terminal.log '.$log_fname.'' ;
   exec('bash -c "'.$cmd.'"',$text); // тоже работает но не async
   $ts2=fixed_time() ;
   //sleep(5) ;
   $dt=$ts2-$ts1 ;
   echo 'Время загрузки лога - '.round($dt,3).' сек<br>' ;

   if (file_exists($log_fname)) $this->view_log($log_fname) ;
   else echo 'Не удалось загрузить лог с терминала. Проверьте настройку авторизации по ключам для терминала '.$term_ip.', команда для проверки: '.$cmd.'<br>' ;

 }

 function view_log($log_fname)
  {   $ts1=fixed_time() ;
      echo 'Используем лог '.hide_server_dir($log_fname).'<br>' ;
      $text=file_get_contents($log_fname) ;
      $arr=explode("\n",$text) ;
      echo 'Прочитано '._sizeof($arr).' строк <br>' ;
      // первый проход - разбиваем на сеансы МО
      $t_last=0 ; $seans_start=0 ; $arr33=array() ; $seans_indx=0 ; $arr_mo_id_by_seans_indx=array() ;
      foreach($arr as $line=>$value)
      { //echo $value.'<br>' ;
        //$arr2=explode('- info:',$value) ;
        $arr2=explode(' - ',$value) ;

        $time = date_create($arr2[0]) ;
        if (is_object($time))
        { $h=date_format($time,'H')*60*60*1000000 ;
          $i=date_format($time,'i')*60*1000000 ;
          $s=date_format($time,'s')*1000000 ;
          $u=date_format($time,'u') ;
          $t_now=$h+$i+$s+$u ;
          // $dt - интервал времени в микросекундах
          $dt=($t_last)? $t_now-$t_last:'';

          $dt=$dt/1000 ;
        }
        $comment=trim($arr2[1]) ;
        $comment=trim(str_replace(array('info:','error:'),'',$comment)) ;
        $dt_seans=($seans_start)? $t_now-$seans_start:'' ;
        $dt_seans=$dt_seans/1000 ;

        $t_last=$t_now ;
        if ($comment=='Got hid auth') $seans_indx++ ;
        if ($comment=='Got hid auth') $seans_start=$t_now ;
        $mo_id=0 ;
        if (stripos($comment,'medexam')!==false)
        { if (preg_match_all('/\"medexam\"\:\"(.+?)\"/is',$comment,$matches,PREG_SET_ORDER))
          { $mo_id=$matches[0][1] ;
            $arr_mo_id_by_seans_indx[$seans_indx]=$mo_id ;
          }

        } ;

        $data=array('time_log'=>$time,
                    'dt'=>$dt,
                    'dt_seans'=>$dt_seans,
                    'seans_indx'=>$seans_indx,
                    'mo_id'=>$mo_id,
                    'comment'=>$comment
                    ) ;
        $arr33[$line]=$data ;

        //if ($line>100) break ;

      }
      echo 'Найдено '._sizeof($arr_mo_id_by_seans_indx).' сеанса МО<br>' ;
      //damp_array($arr_mo_id_by_seans_indx) ;

      $recs=array() ;
      foreach($arr33 as $rec) if ($arr_mo_id_by_seans_indx[$rec['seans_indx']]==$this->rec_mo['pkey']) $recs[]=$rec  ;

      $ts2=fixed_time() ;
      $dt=$ts2-$ts1 ;
      echo 'Время обработки лога - '.round($dt,3).' сек<br>' ;
      //echo '_sizeof='._sizeof($recs).'<br>' ;

      // второй проход - выводим таблицу
      if (_sizeof($recs))
      { ?><table class="basic fz_small left full auto"><tr><th>№</th><th>Время</th><th>Время по сеансу</th><th class="left">Длительность операции</th><th>Описание</th></tr><?
        foreach($recs as $i=>$rec)
        {?><tr>
            <td><? echo $i+1?></td>
            <td><?echo date_format($rec['time_log'],'d.m.Y H:i:s.u')?></td>
            <td class="nowrap"><? echo ($i)? '+ '.number_format($rec['dt_seans'],0,'.',' ').' mc':'-'?></td>
            <td class="nowrap"><? echo ($i)? number_format($rec['dt'],0,'.',' ').' mc':'-'?></td>
            <td><?echo $rec['comment']?></td>
          </tr>
        <?
        if ($rec['comment']=='Destroying progress message controller scope') break ;
        }

        ?></table><?
      } else echo 'Данный МО отсутствует в текущем логе терминала<br>' ;

  }



}

?>
