initParams(); $this->setHostingId($this->getWhmcsParamByKey("serviceid")); if ($this->isDone()) { return true; } elseif ($this->isTaskRunning()) { //sleep $this->sleep(5); return false; } $this->clean(); $snapshot = new Snapshot(); $snapshot->setApi($this->api()); $snapshot->setPath($this->vm()->getPath() . "/snapshot"); $snapshot->setAttributes([ "name" => $this->getSnapshotJob()->name."_".$this->model->id, "description" => $this->snapshotJob->description, ]); if (!is_null($this->snapshotJob->vmstate ) && $this->vm() instanceof Kvm) { $snapshot->setVmstate($this->snapshotJob->vmstate ); } $taskId = $snapshot->create(); //save task id $this->putModelDataAndSave(["taskId" => $taskId, "node" => $this->vm()->getNode()]); //sleep $this->sleep(5); return false; } /** * @return SnapshotJob */ private function getSnapshotJob(){ return $this->snapshotJob = SnapshotJob::findOrFail($this->getModelData()['snapshotJobId']); } private function clean(){ $limit = $this->getWhmcsConfigOption(ConfigurableOption::SNAPSHOTS, $this->configuration()->getSnapshotMaxFiles()); if($limit=="-1"){ return; } if(!$limit || !is_numeric($limit)){ throw new \InvalidArgumentException("Snapshot limit cannot be empty"); } $snapshotRepository = new SnapshotRepository(); $snapshotRepository->setApi($this->api()); $snapshotRepository->findByVm($this->vm()); $snapshotRepository->ignoreCurrent(true); if($snapshotRepository->count() < $limit){ return; } $toDelete = (int) $snapshotRepository->count() - $limit; foreach ($snapshotRepository->sortBySnaptime()->fetch() as $entity) { if($toDelete <=0){ break; } $entity->delete(); $toDelete --; } } }