Ver Fonte

#5406 AI Agents revamp: agents cron run

Aleksandr Trofimov há 6 meses atrás
pai
commit
85ff1498bf

+ 5 - 0
inc/classes/BxDolAI.php

@@ -426,6 +426,11 @@ class BxDolAI extends BxDolFactory implements iBxDolSingleton
         return $this->_oDb->getAgentsByProfileId($iProfileId);
     }
 
+    public function getAgentsByTriggerType($sTrigger)
+    {
+        return $this->_oDb->getAgentsByTriggerType($sTrigger);
+    }
+
     public function callAutomator($sType, $aParams = [])
     {
         $sMethod = '_callAutomator' . bx_gen_method_name($sType);

+ 9 - 4
inc/classes/BxDolAIQuery.php

@@ -891,14 +891,19 @@ class BxDolAIQuery extends BxDolDb
         return $oDb->query($sQuery, ['status' => $sStatus, 'id' => $iId]);
     }
 
-    public function getAgentsByAlertUnitAndAction($sUnit, $sAction)
+    public function getAgentsByAlertUnitAndAction($sUnit, $sAction, $bActiveOnly = true)
     {
-        return $this->getAll("SELECT * FROM `sys_agents_agents` WHERE `alert_unit` = :unit AND `alert_action` = :action", ['unit' => $sUnit, 'action' => $sAction]);
+        return $this->getAll("SELECT * FROM `sys_agents_agents` WHERE `alert_unit` = :unit AND `alert_action` = :action AND `active` = :active", ['unit' => $sUnit, 'action' => $sAction, 'active' => $bActiveOnly ? 1 : 0]);
     }
 
-    public function getAgentsByProfileId($iProfileId)
+    public function getAgentsByProfileId($iProfileId, $bActiveOnly = true)
     {
-        return $this->getAll("SELECT * FROM `sys_agents_agents` WHERE `profile_id` = :profile", ['profile' => $iProfileId]);
+        return $this->getAll("SELECT * FROM `sys_agents_agents` WHERE `profile_id` = :profile AND `active` = :active", ['profile' => $iProfileId, 'active' => $bActiveOnly ? 1 : 0]);
+    }
+
+    public function getAgentsByTriggerType($sTrigger, $bActiveOnly = true)
+    {
+        return $this->getAll("SELECT * FROM `sys_agents_agents` WHERE `trigger` = :trigger AND `active` = :active", ['trigger' => $sTrigger, 'active' => $bActiveOnly ? 1 : 0]);
     }
 
     public function updateAgentField($iId, $sField, $sValue)

+ 1 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -4166,6 +4166,7 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_txt_account_cannot_delete"><![CDATA[Cannot delete the only Operator account]]></string>
     <string name="_sys_txt_account_deletion_scheduled"><![CDATA[Account deletion was scheduled and would be done in a few minutes.]]></string>
     
+    <string name="_sys_txt_agent_inactive"><![CDATA[Agent isn't activated]]></string>
     <string name="_sys_txt_captcha_not_available"><![CDATA[CAPTCHA not available]]></string>
     <string name="_sys_txt_categories_button_caption_add"><![CDATA[Add]]></string>
     <string name="_sys_txt_categories_button_caption_addnew"><![CDATA[Create own category]]></string>

+ 1 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -4100,6 +4100,7 @@
     <string name="_sys_txt_account_cannot_delete"><![CDATA[Невозможно удалить единственную учетную запись оператора.]]></string>
     <string name="_sys_txt_account_deletion_scheduled"><![CDATA[Удаление аккаунта запланировано и будет выполнено через несколько минут.]]></string>
 
+    <string name="_sys_txt_agent_inactive"><![CDATA[Агент не активирован]]></string>
     <string name="_sys_txt_captcha_not_available"><![CDATA[CAPTCHA недоступна]]></string>
     <string name="_sys_txt_change_image"><![CDATA[Изменить картинку]]></string>
     <string name="_sys_txt_cmt_loading"><![CDATA[Загрузка...]]></string>

+ 7 - 2
periodic/cron.php

@@ -159,10 +159,15 @@ foreach($aJobs as $aRow) {
             runJob($aRow);
 }
 
-// run automators (schedulers)
-bx_import('BxDolAI');
+// run agents (schedulers)
 $oAi = BxDolAI::getInstance();
+$aAgents = $oAi->getAgentsByTriggerType('scheduler');
+foreach($aAgents as $aAgent) {
+    if(checkCronJob($aAgent['scheduler_cron'], $aDate))
+        $oAi->callAgent('scheduler', $aAgent);
+}
 
+// run automators (schedulers)
 $aAutomators = $oAi->getAutomatorsScheduler();
 foreach($aAutomators as $aAutomator) {
     if(checkCronJob($aAutomator['params']['scheduler_time'], $aDate))

+ 4 - 0
studio/template/scripts/BxBaseStudioAgentsAgents.php

@@ -35,6 +35,10 @@ class BxBaseStudioAgentsAgents extends BxDolStudioAgentsAgents
             echoJson(['msg' => _t('_sys_txt_error_occured')]);
             return;
         }
+        if (!$aAgent['active']) {
+            echoJson(['msg' => _t('_sys_txt_agent_inactive')]);
+            return;
+        }
 
         $oAi = BxDolAI::getInstance();
         $sResponse = $oAi->callAgent('manual', $aAgent);