#!/usr/bin/php

<?php 
  $arduino_is_live 
true;
  
$arduino_channels = array('239.250.0.3'// Культура
                            
'239.250.0.4'// НТВ
                            
'239.250.0.5'// Питер 5 Канал
                           
...   // чтобы сократить код, здесь я убрал перечисление каналов
                            
'239.250.7.8'// Женский Мир HD
                            
'239.250.7.9'// HD Life
                            
'239.250.8.1'); // Наш Футбол

  
mysql_connect("localhost","tv_user","tv_pass") or die(mysql_error());
  
mysql_select_db("tv_db");

  
$total_failed 0;
  
$fh fopen("/home/ibz/iptv.watchdog/mc_iptv.config","r");
  
$i=0;
  if(
$fh)
  {
     while (!
feof($fh))
     {
       
$buffer fgets($fh4096);
       
$buffer trim($buffer);
       list(
$arg1$arg2$fta$arg3$arg4) = split("[ ]+",$buffer,5);
       if(
$fta==1)
       {
         if( isset(
$cnt_prog[$arg2]) )
         {
           
$cnt_prog[$arg2]++;
         }
         else
         {
           
$cnt_prog[$arg2]=1;
         }
       }
       if(
$arg2!="0")
       {
         echo 
"/home/ibz/iptv.watchdog/test.sh $arg1 $arg2 $arg3 $arg4\n";
// здесь начинается блок для моей arduino. Выбираются все сбойнувшие каналы, добавляется текущий проверяемый канал, потом все кодируется и отправляются на ethernet shield
         
if($arduino_is_live)
         {
           
$sql "select ip from chan_stat where last_state&lt;&gt;0 ";
           
$result=mysql_query($sql);

           
$arduino_msg "IbZ ";
           if(
mysql_num_rows($result)&gt;0)
           {
             while(
$row=mysql_fetch_array($result))
             {
               
$arduino_ip $row["ip"];
               if(
$arduino_idx array_search($arduino_ip,$arduino_channels))
               {
                 
$arduino_msg .= pack("C*"$arduino_idx+1);
               }
             }
           }
           if(
$arduino_idx array_search($arg1,$arduino_channels))
           {
             
$arduino_msg .= pack("C*"$arduino_idx+1);
           }
           
$arduino_msg .= pack("C*"0);

           
$fp=fsockopen("tcp://10.121.17.220"3333$errno$errstr3);
           if(
$fp)
           {
             
fwrite($fp$arduino_msg);
             
fclose($fp);
           }
           else
           {
             
$arduino_is_live false;
           }
         }
// оканчание блока для ардуины
         
system("/home/ibz/iptv.watchdog/test.sh \"$arg1\" \"$arg2\" \"$arg3\" \"$arg4\"",$rc);
         print 
"retcode = $rc\n\n";
         if(
$rc==1)
         {
            
$total_failed++;
            if( isset(
$cnt_fail[$arg2]) )
            {
              
$cnt_fail[$arg2]++;
            }
            else
            {
              
$cnt_fail[$arg2]=1;
            }
         }
       }
     }
  };
  
fclose($fh);


  
$fh fopen("/home/ibz/iptv.watchdog/watchdogger.log","a");
  foreach(
$cnt_fail as $rec_id =&gt$failed)
  {
    
fwrite($fh,"$failed of ".$cnt_prog[$rec_id]." failed on 192.168.0.$rec_id !!!\n");
    if(
$cnt_prog[$rec_id]==0)
    {
      if(
$failed&gt;0)
      {
        if((
$rec_id&gt;=230)&amp;&amp;($rec_id&lt;=242))
        {
          
fwrite($fh,"need to reboot PBI 192.168.0.$rec_id !!!\n");
          
system("echo \"\\nreboot PBI 192.168.0.$rec_id:\\n\" &gt;&gt; /home/ibz/iptv.watchdog/reboot.log");
          
system("/usr/bin/snmpset -v1 -c private 192.168.0.$rec_id 1.3.6.1.4.1.1070.3.1.1.23.0 i 1 2&gt;&gt;/home/ibz/iptv.watchdog/reboot.log 1&gt;&gt;/home/ibz/iptv.watchdog/reboot.log");
        }
        else
        {
          
fwrite($fh,"need to reboot 192.168.0.$rec_id !!!\n");
          
system("echo \"\\nreboot 192.168.0.$rec_id:\\n\" &gt;&gt; /home/ibz/iptv.watchdog/reboot.log");
          
system("echo -e \"enable adi\\n\\n\\nCamRst\\nCamPmtRst\\nRESET_UNIT\\n\" | nc -i 2 -q 2 -w 2 192.168.0.$rec_id 23 2&gt;&gt;/home/ibz/iptv.watchdog/reboot.log 1&gt;&gt;/home/ibz/iptv.watchdog/reboot.log");
        }
      }
    }
    else if(
$failed/$cnt_prog[$rec_id]&gt;=0.5)
    {
      if((
$rec_id&gt;=230)&amp;&amp;($rec_id&lt;=242))
      {
        
fwrite($fh,"need to reboot PBI 192.168.0.$rec_id !!!\n");
        
system("echo \"\\nreboot PBI 192.168.0.$rec_id:\\n\" &gt;&gt; /home/ibz/iptv.watchdog/reboot.log");
        
system("/usr/bin/snmpset -v1 -c private 192.168.0.$rec_id 1.3.6.1.4.1.1070.3.1.1.23.0 i 1 2&gt;&gt;/home/ibz/iptv.watchdog/reboot.log 1&gt;&gt;/home/ibz/iptv.watchdog/reboot.log");
      }
      else
      {
        
fwrite($fh,"need to reboot 192.168.0.$rec_id !!!\n");
        
system("echo \"\\nreboot 192.168.0.$rec_id:\\n\" &gt;&gt; /home/ibz/iptv.watchdog/reboot.log");
        
system("echo -e \"enable adi\\n\\n\\nCamRst\\nCamPmtRst\\nRESET_UNIT\\n\" | nc -i 2 -q 2 -w 2 192.168.0.$rec_id 23 2&gt;&gt;/home/ibz/iptv.watchdog/reboot.log 1&gt;&gt;/home/ibz/iptv.watchdog/reboot.log");
      }
    }
  }
  
fclose($fh);
?>