Config()->get('scan', 'parallel', 256); if ($parallel <= 0) { $this->fail("The 'parallel' option must be set to at least 1."); } $scheduler = new Scheduler(); $defaultSchedule = $this->Config()->get('jobs', 'default_schedule'); $db = $this->getDb(); foreach ($this->Config('jobs') as $name => $jobDescription) { $schedule = $jobDescription->get('schedule', $defaultSchedule); if (! $schedule) { Logger::debug("The job '%s' is not scheduled.", $name); continue; } $job = new Job($name, $db, $jobDescription, SniHook::getAll(), $parallel); $scheduler->add($name, $schedule, function () use ($job, $name, $db) { if (! $db->ping()) { Logger::error('Lost connection to database and failed to re-connect. Skipping this job run.'); return; } $finishedTargets = $job->run(); if ($finishedTargets === null) { Logger::warning("The job '%s' does not have any targets.", $name); } else { Logger::info( "Scanned %s target%s in job '%s'.\n", $finishedTargets, $finishedTargets != 1 ? 's' : '', $name ); $verified = CertificateUtils::verifyCertificates($db); Logger::info("Checked %d certificate chain%s.", $verified, $verified !== 1 ? 's' : ''); } }); } $scheduler->run(); } }