private function _send() { $model = new SmsQueue(); $messages = $model->getToSend(); $loadBalancer = new Logic_LoadBalancer(); $data = array(); while ($current = $messages->current()) { $data[$current->ws_package_id]['queue'] = $current; $data[$current->ws_package_id]['messages'][$current->phone_number] = $current->message; $messages->next(); } foreach ($data as $d) { $package = $d['queue']->findParentRow('WsPackageSms'); $serviceSet = $package->findParentRow('WsServiceSet'); $serviceGroup = $serviceSet->findParentRow('WsServiceSmsGroup'); $service = $loadBalancer->addServiceGroup($serviceGroup); $logic = new Logic_Sms($service->getService()); $status = $logic->package(null, $d['messages']); if (isset($status->packageId) && !empty($status->packageId)) { $d['queue']->setFromArray(array('send' => true))->save(); $packageModel = new SmsPackage(); $packageModel->updatePackageId($status->packageId, $d['queue']->ws_package_id); } } }
/** * Realizuje wysyłkę wiadomości w pakiecie * @param GearmanJob $job */ public function sendpackage(GearmanJob $job) { $params = json_decode($job->workload()); list($mode, $packageDataId, $packageId) = $params; $package = new Logic_Package($mode); $wsPackage = new WsPackage(); $wsPackageRow = $wsPackage->findOne($packageId); $package->updatePackageStatus($packageId, WsPackageStatus::STATUS_STARTED); $wsServiceSetRow = $wsPackageRow->findParentRow('WsServiceSet'); $rawData = $package->getRawDataToSend($packageDataId); $client = Logic_Client::getInstanceByUser($package->getLastPackageStatus($packageId)->created_by); $package->updatePackageDataStatus($packageDataId, array('id_status' => WsPackageStatus::STATUS_STARTED)); $service; switch ($mode) { case Logic_Package::SMS_MODE: $loadBalancer = $client->getLoadBalancer(Wsclient::GROUP_SMS, $wsServiceSetRow->ws_service_group_id); $hasErrors = false; $service = $loadBalancer->getService(); do { if (null === $service) { $package->updatePackageDataStatus($packageDataId, array('id_status' => WsPackageStatus::STATUS_ERROR)); return $job->sendException("Unable to get service! Check backup service!"); } $sms = new Logic_Sms($service, $wsPackageRow->ip, $wsServiceSetRow->id); try { if ($wsPackageRow->getLastStatus()->id_status == WsPackageStatus::STATUS_STARTED) { $response = $sms->package($rawData, $packageId); $package->updatePackageDataStatus($packageDataId, array('id_status' => WsPackageStatus::STATUS_SENT, 'external_package_id' => $response->packageId, 'ws_service_id' => $service->id)); $package->confirmPackageSend($wsPackageRow); } break; } catch (Exception $exc) { $hasErrors = true; $package->updatePackageDataStatus($packageDataId, array('id_status' => WsPackageStatus::STATUS_ERROR)); $service = $loadBalancer->getService(); sleep(1); } } while (true === $hasErrors || !(true === is_object($response) && true === property_exists($response, 'packageId'))); break; } unset($client); }
protected function checkservicesAction() { $dictionary = new Base_Dictionary(); // $distStatuses = $dictionary->setSource('nagios_status',array("entry in ('WARNING', 'CRITICAL')", 'ghost = false'))->getDictionary(); $distStatuses = $dictionary->setSource('nagios_status', array('ghost = false'))->getDictionary(); $statusKeys = array_flip($distStatuses); $model = new NagiosQueue(); $select = $model->select()->setIntegrityCheck(false)->from(array('lnq' => 'nagios_queue'), array('id'), 'log')->where('lnq.ghost = ?', 'false')->where('lnq.actual_type in (?)', $statusKeys); $rowSet = $model->fetchAll($select)->toArray(); $config = Zend_Registry::get('config'); $lastStep = array_pop(array_keys($config['nagios']['step'])); foreach ($rowSet as $row) { $checkerVal = array(); $currentVal = array(); $current = $model->findOne($row['id']); $services = $current->getDependentServices(); if (!empty($services)) { foreach ($services as $serviceRow) { $sc = new ServiceChecker(); $scRow = $sc->getRow($serviceRow->id, $current->actual_type); try { $service = new Logic_Service($serviceRow); $sms = new Logic_Sms($service->getServiceRow(), $config['nagios']['ip']); $sms->text($this->opts->phone, 'test sms'); $error = false; } catch (Exception $exc) { $error = true; } if ($current->actual_type == $statusKeys['WARNING']) { if ($error) { $currentVal['last_occurence'] = date('c'); $currentVal['occurence_count'] = $current->occurence_count + 1; $checkerVal['actual_type'] = $statusKeys['WARNING']; if ($scRow->step >= 3) { $currentVal['actual_type'] = $statusKeys['CRITICAL']; $checkerVal['actual_type'] = $statusKeys['CRITICAL']; } if (time() >= strtotime($current->last_occurence) + $config['nagios']['step'][$scRow->step]) { $checkerVal['step'] = $scRow->step < $lastStep ? $scRow->step + 1 : $scRow->step; } } else { if ($current->actual_type == $scRow->actual_type || empty($scRow->actual_type)) { $checkerVal['actual_type'] = $statusKeys['OK']; $checkerVal['step'] = 1; } if (time() >= strtotime($current->last_occurence) + $config['nagios']['step'][$scRow->step]) { $checkerVal['step'] = $scRow->step + 1; if ($values['step'] == $lastStep) { $currentVal['actual_type'] = $statusKeys['OK']; $checkerVal['ghost'] = 'true'; } } } } elseif ($current->actual_type == $statusKeys['CRITICAL']) { if (strtotime($current->last_occurence) + $config['nagios']['step'][$scRow->step] >= time()) { if ($error) { $currentVal['last_occurence'] = date('c'); $currentVal['occurence_count'] = $current->occurence_count + 1; $checkerVal['step'] = $scRow->step > $lastStep ? $scRow->step + 1 : $scRow->step; } else { $checkerVal['actual_type'] = $statusKeys['WARNING']; $checkerVal['step'] = 1; $currentVal['actual_type'] = $statusKeys['WARNING']; } } } if (!empty($currentVal)) { $current->setFromArray($currentVal); $current->save(); } if (!empty($checkerVal)) { $scRow->setFromArray($checkerVal); $scRow->save(); } } } } }
public function checkstatusAction() { $request = $this->getRequest(); $id = $this->_helper->IdConvert->hexToStr($request->getParam('id')); $data = array(); if (!empty($id)) { try { $model = new SmsStorageStatus(); $lastStatus = $model->getSmsBySmsStorage($id, true); if (isset($lastStatus[0])) { if ($lastStatus[0]['status_dict'] < 4 || $lastStatus[0]['status_dict'] == 8 || $lastStatus[0]['status_dict'] == 9) { $http = new Zend_Controller_Request_Http(); $ip = $http->getServer('SERVER_ADDR'); $serviceModel = new WsServiceSms(); $service = $serviceModel->getService($lastStatus[0]['ws_service_sms_id']); $sms = new Logic_Sms($service, $ip); if ($lastStatus[0]['ws_package_sms_id'] === NULL) { $sms->info($lastStatus[0]['smsid']); } else { $sms->packageinfo($lastStatus[0]['smsid']); } } } $data = $model->getSmsBySmsStorage($id); $paginator = new Base_Paginator(new Base_Paginator_Adapter_Array($data, array('RowClass' => 'Row_SmsStorageStatus'))); $this->view->paginator = $paginator; if ($lastStatus[0]['ws_package_sms_id'] === NULL) { $this->view->headers = array('smsid', 'status_dict', 'messagePriority', 'idProt', 'conectorId', 'encoding', 'smsType', 'validTo', 'delivNotifRequest', 'sendDate', 'lastStatusChange', 'created_at'); } else { $this->view->headers = array('smsid', 'status_dict', 'numberOfMessages', 'numberOfMessagesLeftToSent', 'created_at'); } } catch (Logic_Service_Exception $ex) { $this->_helper->redirector('index'); $this->_helper->messenger('error', 'Nie udało się pobrać statusu'); return; } } else { $this->_helper->messenger('error', 'Brak ID!'); $this->_helper->redirector('index'); return; } }
/** * Pobranie inforacji o ilości rekordów w paczece * @param Row_WsPackageStatusJoinWsPackageSms $package * */ public function getPackageDataInfo(Row_WsPackageStatusJoinWsPackageSms &$package) { $sendMessages = 0; if ($this->_mode == self::SMS_MODE) { $packageData = $package->findDependentRowset('WsPackageData'); $packageDataError = $package->findDependentRowset('WsPackageErrors'); $packageInfo['errors'] = count(json_decode($packageDataError->current()->errors)); $http = new Zend_Controller_Request_Http(); $ip = $http->getServer('SERVER_ADDR'); foreach ($packageData as $data) { $json = json_decode($data->tags); if ($data->external_package_id && $data->ws_service_id) { $service = $data->findParentRow('WsServiceSms'); $logicSms = new Logic_Sms($service, $ip); $info = $logicSms->packageinfo($data->external_package_id); $sendMessages += $info->numberOfMessages - $info->numberOfMessagesLeftToSent; } } $package->allMessages = $package->allMessages != '' ? $package->allMessages : 0; $package->sendMessages = $sendMessages; $package->errors = $package->errors != '' ? $package->errors : 0; $package->leftToSend = $package->allMessages - $sendMessages; } }