Ignore:
Timestamp:
Oct 25, 2017, 10:55:05 PM (7 years ago)
Author:
chronos
Message:
  • Modified: Use better transaction mechanism for netwatch import and latency measurement.
  • Fixed: Query duration mesurement using outdated microtime result.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Modules/NetworkConfigRouterOS/Generators/NetwatchImport.php

    r841 r852  
    4242    }
    4343
    44     $this->Database->query('BEGIN');
    45 
     44    $Queries = array();
    4645    foreach($Interfaces as $Index => $Interface)
    4746    {
    4847      // Update last online time if still online
    4948      if($Interface['NewOnline'])
    50         $DbResult = $this->Database->update('NetworkInterface', '`Id` = "'.$Interface['Id'].'"',
     49        $Queries[] = $this->Database->GetUpdate('NetworkInterface', '`Id` = "'.$Interface['Id'].'"',
    5150          array('LastOnline' => TimeToMysqlDateTime($StartTime)));
    5251
     
    5453      {
    5554        // Online state changed
    56         $DbResult = $this->Database->query('INSERT INTO `NetworkInterfaceUpDown` (`Interface`,
     55        $Queries[] = 'INSERT INTO `NetworkInterfaceUpDown` (`Interface`,
    5756         `State`, `Time`, `Duration`) VALUES ('.$Interface['Id'].', '.$Interface['NewOnline'].', "'.
    58           TimeToMysqlDateTime($StartTime).'", NULL)');
     57          TimeToMysqlDateTime($StartTime).'", NULL)';
    5958        // Update previous record duration in UpDown table
    60         $this->Database->query('UPDATE `NetworkInterfaceUpDown` AS `TM` SET `Duration` = TIMESTAMPDIFF(SECOND, '.
     59        $Queries[] = 'UPDATE `NetworkInterfaceUpDown` AS `TM` SET `Duration` = TIMESTAMPDIFF(SECOND, '.
    6160          '`TM`.`Time`, (SELECT `Time` FROM (SELECT * FROM `NetworkInterfaceUpDown`) AS `TA` WHERE (`TA`.`Time` > `TM`.`Time`) '.
    6261          'AND (`TA`.`Interface`=`TM`.`Interface`) ORDER BY `TA`.`Time` ASC LIMIT 1)) '.
    63           'WHERE (`TM`.`Duration` IS NULL) AND (`TM`.`Interface` ='.$Interface['Id'].')');
    64         $this->Database->update('NetworkInterface', '`Id` = "'.$Interface['Id'].'"',
     62          'WHERE (`TM`.`Duration` IS NULL) AND (`TM`.`Interface` ='.$Interface['Id'].')';
     63        $Queries[] = $this->Database->GetUpdate('NetworkInterface', '`Id` = "'.$Interface['Id'].'"',
    6564          array('Online' => $Interface['NewOnline']));
    6665      }
    6766    }
     67    $this->Database->Transaction($Queries);
    6868
    6969    // Set offline all interfaces which were not updated as online
     
    8181    }
    8282
     83    $Queries = array();
    8384    // Update device online state
    8485    $DbResult = $this->Database->select('NetworkInterface', '`Device`, SUM(`Online`) AS `SumOnline`', '`Online` = 1 GROUP BY `Device`');
     
    8687    {
    8788      if($Device['SumOnline'] > 0)
    88         $this->Database->update('NetworkDevice', 'Id='.$Device['Device'], array('LastOnline' => TimeToMysqlDateTime($StartTime), 'Online' => 1));
     89        $Queries[] = $this->Database->GetUpdate('NetworkDevice', 'Id='.$Device['Device'], array('LastOnline' => TimeToMysqlDateTime($StartTime), 'Online' => 1));
    8990    }
    90     $this->Database->update('NetworkDevice', '`LastOnline` < "'.TimeToMysqlDateTime($StartTime).'"', array('Online' => 0));
    91 
    92     $this->Database->query('COMMIT');
     91    $Queries[] = $this->Database->GetUpdate('NetworkDevice', '`LastOnline` < "'.TimeToMysqlDateTime($StartTime).'"', array('Online' => 0));
     92    $this->Database->Transaction($Queries);
    9393  }
    9494
Note: See TracChangeset for help on using the changeset viewer.