/** * @see Command */ protected function execute(InputInterface $input, OutputInterface $output) { $em = $this->getContainer()->get('doctrine')->getManager(); $kernelarchive = "https://www.kernel.org/pub/linux/kernel/"; $newversion = false; $src = $this->getSource($kernelarchive); $matches = array(); preg_match_all("`\\<a href=\"(v[0-9]+\\.[^\"]+)\\/\"\\>([^\\<]+)\\<\\/a\\>`", $src, $matches); foreach ($matches[1] as $vers1) { $url = $kernelarchive . "" . $vers1 . "/"; $src2 = $this->getSource($url); $matches2 = array(); preg_match_all("`\\<a href=\"linux-([0-9\\.]+)\\.tar\\.sign\"\\>([^\\<]+)\\<\\/a\\>`", $src2, $matches2); foreach ($matches2[1] as $var) { $version = preg_replace("`^([^\\.-]+)\\.([^\\.-]+\\.?[^\\.-]*).*\$`i", "\$1.\$2", trim($var)); $version = trim($version); $obj = $em->getRepository('SywFrontMainBundle:Kernels')->findOneBy(array('name' => $version)); if (false === isset($obj) || false === is_object($obj) || $obj == null) { unset($kernel); $kernel = new Kernels(); $kernel->setName($version); $kernel->setMachinesNum(0); $em->persist($kernel); $em->flush(); } } } }
/** * @Route("/v1/machines/{machine_id}", name="api_update_machine") * @Method({"PATCH", "PUT"}) * @Rest\View() */ public function updateAction(Request $request, $machine_id) { $aResponse = array(); $machine_updatekey = $request->headers->get('x-lico-machine-updatekey'); if (false === isset($machine_updatekey) || trim($machine_updatekey) == "" || false === preg_match("`^([a-zA-Z0-9]+)\$`", $machine_updatekey)) { $response = new JsonResponse($aResponse); $response->setStatusCode(400); } else { $machine = $this->get('doctrine')->getRepository('SywFrontMainBundle:Machines')->findOneBy(array('id' => $machine_id, 'updateKey' => $machine_updatekey)); if (false === isset($machine) || false === is_object($machine) || $machine == null) { $response = new JsonResponse($aResponse); $response->setStatusCode(404); } else { $em = $this->getDoctrine()->getManager(); $hostname = $request->request->get('hostname'); if (true === isset($hostname) && trim($hostname) != "") { $machine->setHostname($hostname); } $obj = null; $var = $request->request->get('country'); if (true === isset($var) && trim($var) != "") { $obj = $this->get('doctrine')->getRepository('SywFrontMainBundle:Countries')->findOneBy(array('code' => strtolower($var))); if (true === isset($obj) && true === is_object($obj) && $obj != null) { $machine->setCountry($obj); } } $online = $request->request->get('online'); if (true === isset($online) && trim($online) != "") { $machine->setOnline($online); } $obj = null; $var = $request->request->get('class'); if (true === isset($var) && trim($var) != "") { $obj = $this->get('doctrine')->getRepository('SywFrontMainBundle:Classes')->findOneBy(array('name' => $var)); if (true === isset($obj) && true === is_object($obj) && $obj != null) { $machine->setClass($obj); } } $obj = null; $var = $request->request->get('distribution'); if (true === isset($var) && trim($var) != "") { $obj = $this->get('doctrine')->getRepository('SywFrontMainBundle:Distributions')->findOneBy(array('name' => $var)); if (true === isset($obj) && true === is_object($obj) && $obj != null) { $machine->setDistribution($obj); } } $distversion = $request->request->get('distversion'); if (true === isset($distversion) && trim($distversion) != "") { $machine->setDistversion($distversion); } $obj = null; $var = $request->request->get('architecture'); if (true === isset($var) && trim($var) != "") { if (false !== stripos($var, "arm") && false !== stripos($var, "64")) { $newarch = "arm64"; } elseif (false !== stripos($var, "raspberry")) { $newarch = "arm"; } elseif (false !== stripos($var, "arm")) { $newarch = "arm"; } elseif (false !== stripos($var, "amd") && false !== stripos($var, "64")) { $newarch = "amd64"; } elseif (false !== stripos($var, "x86") && false !== stripos($var, "64")) { $newarch = "x86_64"; } elseif (false !== stripos($var, "x86")) { $newarch = "x86"; } elseif (preg_match("`[xi]+-?[2-7]+86`i", $var)) { $newarch = "i" . preg_replace("`.*[xi]+-?([2-7]+86).*`i", "\$1", $var); } elseif (false !== stripos($var, "power") && false !== stripos($var, "64")) { $newarch = "ppc64"; } elseif (false !== stripos($var, "intel core")) { $newarch = "i686"; } elseif (false !== stripos($var, "power")) { $newarch = "ppc"; } elseif (false !== stripos($var, "mips") && false !== stripos($var, "64")) { $newarch = "mips64"; } elseif (false !== stripos($var, "mips")) { $newarch = "mips"; } elseif (false !== stripos($var, "sparc") && false !== stripos($var, "64")) { $newarch = "sparc64"; } elseif (false !== stripos($var, "sparc")) { $newarch = "sparc"; } elseif (false !== stripos($var, "sun")) { $newarch = "sparc"; } elseif (false !== stripos($var, "risc") && false !== stripos($var, "64")) { $newarch = "risc64"; } elseif (false !== stripos($var, "risc")) { $newarch = "risc"; } elseif (false !== stripos($var, "alpha") && false !== stripos($var, "64")) { $newarch = "alpha64"; } elseif (false !== stripos($var, "alpha")) { $newarch = "alpha"; } else { $newarch = "unknown"; } $obj = $this->get('doctrine')->getRepository('SywFrontMainBundle:Architectures')->findOneBy(array('name' => $newarch)); if (true === isset($obj) && true === is_object($obj) && $obj != null) { $machine->setArchitecture($obj); } } $obj = null; $var = $request->request->get('kernel'); if (true === isset($var) && trim($var) != "") { # trim the given kernel to major version, ie: 3.13.2 $version = preg_replace("`^([^\\.-]+)\\.([^\\.-]+\\.?[^\\.-]*).*\$`i", "\$1.\$2", trim($var)); $version = trim($version); $obj = $this->get('doctrine')->getRepository('SywFrontMainBundle:Kernels')->findOneBy(array('name' => $version)); if (true === isset($obj) && true === is_object($obj) && $obj != null) { $machine->setKernel($obj); } else { $kernel = new Kernels(); $kernel->setName($version); $kernel->setMachinesNum(1); $em->persist($kernel); $machine->setKernel($kernel); } } $obj = null; $var = $request->request->get('cpu'); if (true === isset($var) && trim($var) != "") { $obj = $this->get('doctrine')->getRepository('SywFrontMainBundle:Cpus')->findOneBy(array('name' => $var)); if (true === isset($obj) && true === is_object($obj) && $obj != null) { $machine->setCpu($obj); } } $obj = null; $var = $request->request->get('purpose'); if (true === isset($var) && trim($var) != "") { $obj = $this->get('doctrine')->getRepository('SywFrontMainBundle:Purposes')->findOneBy(array('name' => $var)); if (true === isset($obj) && true === is_object($obj) && $obj != null) { $machine->setPurpose($obj); } } $cores = $request->request->get('cores'); if (true === isset($cores) && trim($cores) != "") { $machine->setCores($cores); } $flags = $request->request->get('flags'); if (true === isset($flags) && trim($flags) != "") { $machine->setFlags($flags); } $diskspace = $request->request->get('diskspace'); if (true === isset($diskspace) && trim($diskspace) != "") { $machine->setDiskspace($diskspace); } $diskspaceFree = $request->request->get('diskspaceFree'); if (true === isset($diskspaceFree) && trim($diskspaceFree) != "") { $machine->setDiskspaceFree($diskspaceFree); } $memory = $request->request->get('memory'); if (true === isset($memory) && trim($memory) != "") { $machine->setMemory($memory); } $memoryFree = $request->request->get('memoryFree'); if (true === isset($memoryFree) && trim($memoryFree) != "") { $machine->setMemoryFree($memoryFree); } $swap = $request->request->get('swap'); if (true === isset($swap) && trim($swap) != "") { $machine->setSwap($swap); } $swapFree = $request->request->get('swapFree'); if (true === isset($swapFree) && trim($swapFree) != "") { $machine->setSwapFree($swapFree); } $mailer = $request->request->get('mailer'); if (true === isset($mailer) && trim($mailer) != "") { $machine->setMailer($mailer); } $network = $request->request->get('network'); if (true === isset($network) && trim($network) != "") { $machine->setNetwork($network); } $accounts = $request->request->get('accounts'); if (true === isset($accounts) && trim($accounts) != "") { $machine->setAccounts($accounts); } $uptime = $request->request->get('uptime'); if (true === isset($uptime) && trim($uptime) != "") { /** * Todo: reformat and convert the sent uptime to a simple amounts of seconds (integer) */ // 00:01:42 01:14:43 12345678 up 2 days, 3:20 up 2:26 $uptime = trim($uptime); $secs = 0; $days = 0; $hours = 0; $minutes = 0; $seconds = 0; if (preg_match("`^([0-9]{2}):([0-9]{2}):?([0-9]{2})?\$`", $uptime)) { $hours = preg_replace("`^([0-9]{2}):([0-9]{2}):?([0-9]{2})?\$`", "\$1", $uptime); $minutes = preg_replace("`^([0-9]{2}):([0-9]{2}):?([0-9]{2})?\$`", "\$2", $uptime); $seconds = preg_replace("`^([0-9]{2}):([0-9]{2}):?([0-9]{2})?\$`", "\$3", $uptime); $secs += intval($hours) * 60 * 60; $secs += intval($minutes) * 60; if (true === isset($seconds) && intval($seconds) >= 1) { $secs += intval($seconds); } } else { if (true === is_numeric($uptime) && intval($uptime) >= 1) { $secs = $uptime; } else { if (stripos($uptime, "day") >= 1) { if (preg_match("`.*up\\s+([0-9]+)\\s+day.*`", $uptime)) { $days = preg_replace("`.*up\\s+([0-9]+)\\s+day.*`", "\$1", $uptime); } else { if (preg_match("`^([0-9]+)\\s+day.*`", $uptime)) { $days = preg_replace("`^([0-9]+)\\s+day.*`", "\$1", $uptime); } } if (stripos($uptime, ",") && preg_match("`[0-9]:[0-9]`", $uptime)) { $split = explode(",", $uptime); $time = trim($split); $hours = preg_replace("`^([0-9]{2}):([0-9]{2}):?([0-9]{2})?\$`", "\$1", $time); $minutes = preg_replace("`^([0-9]{2}):([0-9]{2}):?([0-9]{2})?\$`", "\$2", $time); $seconds = preg_replace("`^([0-9]{2}):([0-9]{2}):?([0-9]{2})?\$`", "\$3", $time); } if (true === isset($days) && intval($days) >= 1) { $secs += intval($days) * 24 * 60 * 60; } if (true === isset($hours) && intval($hours) >= 1) { $secs += intval($hours) * 60 * 60; } if (true === isset($minutes) && intval($minutes) >= 1) { $secs += intval($minutes) * 60; } if (true === isset($seconds) && intval($seconds) >= 1) { $secs += intval($seconds); } } else { if (stripos($uptime, "up") >= 1) { $uptime = str_replace("up", "", $uptime); $uptime = trim($uptime); $hours = preg_replace("`^([0-9]{2}):([0-9]{2}):?([0-9]{2})?\$`", "\$1", $uptime); $minutes = preg_replace("`^([0-9]{2}):([0-9]{2}):?([0-9]{2})?\$`", "\$2", $uptime); $seconds = preg_replace("`^([0-9]{2}):([0-9]{2}):?([0-9]{2})?\$`", "\$3", $uptime); $secs += intval($hours) * 60 * 60; $secs += intval($minutes) * 60; if (true === isset($seconds) && intval($seconds) >= 1) { $secs += intval($seconds); } } } } } $machine->setUptime($secs); } $loadavg = $request->request->get('loadavg'); if (true === isset($loadavg) && trim($loadavg) != "") { $machine->setLoadAvg($loadavg); } $machine->setModifiedAt(new \DateTime()); $em->persist($machine); $em->flush(); $apiaccess = $this->get('doctrine')->getRepository('SywFrontApiBundle:ApiAccess')->findOneBy(array('user' => $machine->getUser())); $apiaccess->setLastAccess(new \DateTime()); $em->persist($apiaccess); $em->flush(); $aResponse = array(); $response = new JsonResponse($aResponse); $response->setStatusCode(204); } } return $response; }
/** * @see Command */ protected function execute(InputInterface $input, OutputInterface $output) { $item = $input->getArgument('item'); $lico = $this->getContainer()->get('doctrine.dbal.lico_connection'); $licotest = $this->getContainer()->get('doctrine')->getManager(); $licotestdb = $this->getContainer()->get('doctrine.dbal.default_connection'); $db = $this->getContainer()->get('doctrine')->getManager(); $em = $this->getContainer()->get('doctrine')->getManager(); $importlogfile = "import.correct.kernelversions"; if ($item == "start") { @exec("php app/console syw:correct:kernelversions continue >>" . $importlogfile . ".log 2>&1 3>&1 4>&1 &"); exit(0); } else { if ($item == "continue") { if (true === file_exists($importlogfile . '.db')) { $fp = fopen($importlogfile . '.db', "r"); $data = fread($fp, 1024); fclose($fp); $fp = null; unset($fp); $dataar = explode(" ", trim($data)); $start = intval(trim($dataar[0])); $counter = intval(trim($dataar[1])); } else { $nums = $licotestdb->fetchAll('SELECT COUNT(id) AS num FROM kernels'); $numusers = $nums[0]['num']; $start = 0; // $numusers; $counter = 0; } $itemsperloop = 200; $z = 0; $a = $start; unset($rows); $kernels = $db->getRepository('SywFrontMainBundle:Kernels')->findBy(array(), array('id' => 'ASC'), $itemsperloop, $a); foreach ($kernels as $kernel) { $counter++; $machines = null; unset($machines); $machines = $kernel->getMachines(); $var = $kernel->getName(); if (preg_match("`^[^\\.]{2,}\\..*`", trim($var)) || preg_match("`^[05-9]{1,}\\..*`", trim($var)) || preg_match("`^[1-4]{1}\\.[^\\.]{4,}\\..*`", trim($var)) || preg_match("`^[1-4]{1}\\.[^\\.]{1,}\\.[^\\.-]{4,}.*`", trim($var))) { echo "> setting kernel " . $var . " (" . $kernel->getId() . ") to XXXXXXXXXXXXXXXXXXXX\n"; $kernel->setName("XXXXXXXXXXXXXXXXXXXX"); $kernel->setMachinesNum(-999999999); // $em->flush(); foreach ($machines as $machine) { $machine->setKernel(null); // $em->flush(); } } else { # trim the given kernel to major version, ie: 3.13.2 $version = preg_replace("`^([^\\.-]+)\\.([^\\.-]+\\.?[^\\.-]*).*\$`i", "\$1.\$2", trim($var)); $version = trim($version); echo "=======================================================================\n"; echo "> old: " . $var . " | new " . $version . "\n"; if (preg_match("`^0\\.`", $version)) { echo "> setting kernel " . $var . " (" . $kernel->getId() . ") to XXXXXXXXXXXXXXXXXXXX\n"; $kernel->setName("XXXXXXXXXXXXXXXXXXXX"); $kernel->setMachinesNum(-999999999); // $em->flush(); foreach ($machines as $machine) { $machine->setKernel(null); // $em->flush(); } continue; } if (trim($var) != $version && $var != "XXXXXXXXXXXXXXXXXXXX") { $obj = $em->getRepository('SywFrontMainBundle:Kernels')->findOneBy(array('name' => $version)); if (true === isset($obj) && true === is_object($obj) && $obj != null) { foreach ($machines as $machine) { $machine->setKernel($obj); // $em->flush(); } echo "> " . $obj->getName() . " found, setting kernel " . $var . " (" . $kernel->getId() . ") to XXXXXXXXXXXXXXXXXXXX\n"; $obj->setMachinesNum(sizeof($obj->getMachines())); $kernel->setName("XXXXXXXXXXXXXXXXXXXX"); $kernel->setMachinesNum(-999999999); // $em->flush(); } else { echo "> Creating new kernel version " . $version . "\n"; $newkernel = new Kernels(); $newkernel->setName($version); $em->persist($newkernel); foreach ($machines as $machine) { $machine->setKernel($newkernel); // $em->flush(); } $newkernel->setMachinesNum(sizeof($newkernel->getMachines())); // $em->flush(); } } } $em->flush(); gc_collect_cycles(); } $db->clear(); $db->close(); $licotest->clear(); $licotest->close(); $licotestdb->close(); $lico->close(); $licotest = null; unset($licotest); $licotestdb = null; unset($licotestdb); $lico = null; unset($lico); file_put_contents($importlogfile . '.db', $a + $itemsperloop . " " . $counter); @exec("php app/console syw:correct:kernelversions start >>" . $importlogfile . ".log 2>&1 3>&1 4>&1 &"); exit(0); } } }