<?php

if(isset($_SERVER['REMOTE_ADDR'])) die();
include('../../global.php');
include('../routerboard.php');
$Path = array('tool', 'netwatch');

$DbResult3 = $Database->query('SELECT * FROM `NetworkSubnet` WHERE `Member` = 0');
while($Subnet = $DbResult3->fetch_assoc())
{
  echo($Subnet['AddressRange'].'/'.$Subnet['Mask'].' on router '.$Subnet['DHCP']."\n");
  $Routerboard = new Routerboard();
  $Routerboard->UserName = $Config['MainRouter']['UserName'];
  $Routerboard->Timeout = $Config['MainRouter']['ConnectTimeout'];
  $Routerboard->HostName = $Subnet['DHCP'];
  $List = $Routerboard->ListGetPrint($Path, array('host', 'status'));
  foreach($List as $Properties)
  {
    if(IsAddressInSubnet($Properties['host'], $Subnet['AddressRange'], $Subnet['Mask']))
    {
      //echo($Properties['host'].', ');
      if($Properties['status'] == 'up')
      {
        $Online = 1;
        $Values = array('Online' => $Online, 'LastOnline' => 'NOW()');
        //echo($Properties['host']." up\n");
      } else 
      {
        $Online = 0;
        $Values = array('Online' => $Online);
        //echo($Properties['host']." down\n");
      }

      $DbResult = $Database->update('NetworkInterface', 'LocalIP = "'.$Properties['host'].'"', $Values);
      if($Online == 1)
      {
        $DbResult = $Database->select('NetworkInterface', 'Id', 'LocalIP = "'.$Properties['host'].'"');
        $DbRow = $DbResult->fetch_assoc();
        $InterfaceId = $DbRow['Id'];
        $DbResult2 = $Database->select('NetworkInterfaceStat', '*', '(NetworkInterface="'.$InterfaceId.'") AND (Time = DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))');
        if($DbResult2->num_rows == 0) $Database->query('REPLACE INTO NetworkInterfaceStat (NetworkInterface, Time) VALUES ("'.$InterfaceId.'", DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))');          
        $Database->query('UPDATE NetworkInterfaceStat SET PingCount = PingCount + 1 WHERE (NetworkInterface="'.$InterfaceId.'") AND (Time = DATE_FORMAT(NOW(), "%Y-%m-%d %H:00:00"))');
        
      }
    }
  }
}

// Update device online state
$DbResult = $Database->select('NetworkDevice', 'Id', 'Used=1');
while($Device = $DbResult->fetch_assoc())
{
  $DbResult2 = $Database->select('NetworkInterface', 'SUM(Online)', 'Device='.$Device['Id']);
  $DbRow = $DbResult2->fetch_array();
  if($DbRow['SUM(Online)'] > 0) $Online = 1; else $Online = 0;  
  $Database->update('NetworkDevice', 'Id='.$Device['Id'], array('Online' => $Online));
  if($Online == 1) $Database->update('NetworkDevice', 'Id='.$Device['Id'], array('LastOnline' => 'NOW()'));
}

?>
