ZoneChecker.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace MGModule\DNSManager2\mgLibs\custom\task;
  3. use MGModule\DNSManager2 as main;
  4. use MGModule\DNSManager2\models\custom\globalsetting\GlobalSettingEnum;
  5. use MGModule\DNSManager2\mgLibs\custom\manager\GlobalSettingHelper;
  6. use MGModule\DNSManager2\mgLibs\custom\helpers\TimeDiffHelper;
  7. use \MGModule\DNSManager2\mgLibs\custom\task\TaskTypeCodesCodes;
  8. class Synchronization extends TaskAbstract
  9. {
  10. protected $abort_after_repeats = array('main' => 0);
  11. protected $taskTypeCode = TaskTypeCodesCodes::ZONECHECKER;
  12. public function mainDescription()
  13. {
  14. return 'Zone Checker';
  15. }
  16. //TODO: do czego to służy? kopia synchronizatora
  17. public function main($params) {
  18. $diff = TimeDiffHelper::diff(GlobalSettingHelper::getSetting(GlobalSettingEnum::CRON_SYNC_LAST_RUN)?:'1991-12-19');
  19. $cron_sync_run_each = GlobalSettingHelper::getSetting(GlobalSettingEnum::CRON_SYNC_RUN_EACH?:5);
  20. if(!$this->isReadyToRun( $cron_sync_run_each )) {
  21. return true;
  22. }
  23. $last_id = GlobalSettingHelper::getSetting(GlobalSettingEnum::CRON_SYNC_LAST_ID)?:0;
  24. $zones_per_run = GlobalSettingHelper::getSetting(GlobalSettingEnum::CRON_SYNC_ZONES_PER_RUN);
  25. $zones_per_run<1?$zones_per_run=1:'';
  26. $rep = $this->getZonesRepoWithIDGreaterThan($last_id,$zones_per_run);
  27. $count_filtered = $rep->count();
  28. foreach($rep->get() as $zone) {
  29. try {
  30. $server = $zone->getServer();
  31. $nameservers = $server->getNameservers();
  32. $ns_records = $zone->getModule()->getRecords('NS');
  33. foreach($nameservers as $nameserver) {
  34. if(!empty($nameserver->name) || !empty($nameserver->ip)) {
  35. $value = empty($nameserver->name)?$nameserver->ip:$nameserver->name;
  36. foreach($ns_records as $record) {
  37. if($record->rdata->__toString() == $value)
  38. continue 2;
  39. }
  40. $zone->getModule()->terminateZone();
  41. }
  42. }
  43. } catch (\Exception $e) {
  44. }
  45. }
  46. if($count_filtered < $zones_per_run)
  47. $last_id = 0;
  48. GlobalSettingHelper::setSetting(GlobalSettingEnum::CRON_SYNC_LAST_ID, $last_id);
  49. }
  50. private function getZonesRepoWithIDGreaterThan($id, $zones_per_run) {
  51. $rep = new main\models\custom\zone\Repository();
  52. $rep->setFilter(0, array(
  53. 'customQuery' => 'id > :last_id ',
  54. 'params' => array('last_id' => $id)
  55. ));
  56. $rep->limit($zones_per_run);
  57. return $rep;
  58. }
  59. }