コード例 #1
0
ファイル: send_message_cmd.php プロジェクト: knatorski/SMS
 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);
         }
     }
 }
コード例 #2
0
ファイル: Send.php プロジェクト: knatorski/SMS
 /**
  * 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);
 }
コード例 #3
0
ファイル: SmsApiNagiosCheck.php プロジェクト: knatorski/SMS
 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();
                 }
             }
         }
     }
 }
コード例 #4
0
 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;
     }
 }
コード例 #5
0
ファイル: Package.php プロジェクト: knatorski/SMS
 /**
  * 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;
     }
 }