Пример #1
0
 public function actionCreateByCmd($task_cmd_id)
 {
     if (Yii::$app->request->post()) {
         ///提交新建任务
         #var_dump(Yii::$app->request->post()); exit ;
         $dcmd_task = new DcmdTask();
         $post_task = Yii::$app->request->post()['DcmdTask'];
         $dcmd_task->task_name = Yii::$app->request->post()['task_cmd_prv'] . '-' . $post_task['task_name'];
         $dcmd_task->task_cmd = $post_task['task_cmd'];
         $dcmd_task->depend_task_id = 0;
         $dcmd_task->depend_task_name = "NULL";
         $dcmd_task->app_id = $post_task['app_id'];
         $dcmd_app = DcmdApp::findOne($post_task['app_id']);
         $dcmd_task->app_name = $dcmd_app->app_name;
         $dcmd_task->svr_id = $post_task['svr_id'];
         $dcmd_svr = DcmdService::findOne($post_task['svr_id']);
         $dcmd_task->svr_name = $dcmd_svr->svr_name;
         /// $post_task['svr_name'];
         $dcmd_task->svr_path = $dcmd_svr->svr_path;
         ///$post_task['svr_path'];
         $dcmd_task->node_multi_pool = $dcmd_svr->node_multi_pool;
         $dcmd_task->err_msg = ' ';
         $dcmd_task->tag = $post_task['tag'];
         $dcmd_task->update_env = $post_task['update_env'];
         $dcmd_task->update_tag = $post_task['update_tag'];
         $dcmd_task->state = 0;
         $dcmd_task->freeze = 0;
         $dcmd_task->valid = 1;
         $dcmd_task->pause = 0;
         $dcmd_task->concurrent_rate = $post_task['concurrent_rate'];
         $dcmd_task->timeout = $post_task['timeout'];
         $dcmd_task->auto = $post_task['auto'];
         $dcmd_task->process = $post_task['process'];
         $dcmd_task->utime = date('Y-m-d H:i:s');
         $dcmd_task->ctime = $dcmd_task->utime;
         $dcmd_task->opr_uid = Yii::$app->user->getId();
         $dcmd_task->comment = $post_task['comment'];
         $arg = array();
         $opr_log = new DcmdOprLog();
         $opr_log->log_table = "dcmd_task";
         $opr_log->opr_type = 1;
         $opr_log->sql_statement = "insert task:" . $dcmd_task->task_name;
         $opr_log->ctime = date('Y-m-d H:i:s');
         $opr_log->opr_uid = Yii::$app->user->getId();
         $opr_log->save();
         foreach (Yii::$app->request->post() as $k => $v) {
             if (substr($k, 0, 3) == "Arg") {
                 $arg[substr($k, 3)] = $v;
             }
         }
         $dcmd_task->task_arg = arrToXml($arg);
         if ($dcmd_task->save()) {
             ///设备池默认属性
             $svr_pool_attr_def = array();
             $tmp_query = DcmdServicePoolAttrDef::find()->asArray()->all();
             foreach ($tmp_query as $item) {
                 $svr_pool_attr_def[$item['attr_name']] = $item['def_value'];
             }
             ///保存服务池子信息
             if (array_key_exists("selection", Yii::$app->request->post())) {
                 $svr_pool = Yii::$app->request->post()["selection"];
                 foreach ($svr_pool as $k => $svr_pool_id) {
                     $svr_query = DcmdService::findOne($dcmd_task->svr_id);
                     $svr_pool_query = DcmdServicePool::findOne($svr_pool_id);
                     $svr_pool_node_query = DcmdServicePoolNode::find()->andWhere(['svr_pool_id' => $svr_pool_id])->asArray()->all();
                     $dcmd_task_service_pool = new DcmdTaskServicePool();
                     $dcmd_task_service_pool->task_id = $dcmd_task->task_id;
                     $dcmd_task_service_pool->task_cmd = $dcmd_task->task_cmd;
                     $dcmd_task_service_pool->svr_pool = $svr_pool_query['svr_pool'];
                     $dcmd_task_service_pool->svr_pool_id = $svr_pool_id;
                     $dcmd_task_service_pool->env_ver = $svr_pool_query['env_ver'];
                     $dcmd_task_service_pool->repo = $svr_pool_query['repo'];
                     $dcmd_task_service_pool->run_user = $svr_query['run_user'];
                     $dcmd_task_service_pool->undo_node = count($svr_pool_node_query);
                     $dcmd_task_service_pool->doing_node = 0;
                     $dcmd_task_service_pool->finish_node = 0;
                     $dcmd_task_service_pool->fail_node = 0;
                     $dcmd_task_service_pool->ignored_fail_node = 0;
                     $dcmd_task_service_pool->ignored_doing_node = 0;
                     $dcmd_task_service_pool->state = 0;
                     $dcmd_task_service_pool->utime = date('Y-m-d H:i:s');
                     $dcmd_task_service_pool->ctime = $dcmd_task_service_pool->utime;
                     $dcmd_task_service_pool->opr_uid = Yii::$app->user->getId();
                     if (!$dcmd_task_service_pool->save()) {
                         Yii::$app->getSession()->setFlash('error', "保存服务池子失败");
                     } else {
                         $tm = date('Y-m-d H:i:s');
                         ///保存服务池属性
                         $svr_pool_attr = array();
                         $tmp_query = DcmdServicePoolAttr::find()->andWhere(['svr_pool_id' => $svr_pool_id])->asArray()->all();
                         foreach ($tmp_query as $item) {
                             $svr_pool_attr[$item['attr_name']] = $item['attr_value'];
                         }
                         foreach ($svr_pool_attr_def as $name => $value) {
                             $dcmd_task_service_pool_attr = new DcmdTaskServicePoolAttr();
                             $dcmd_task_service_pool_attr->task_id = $dcmd_task->task_id;
                             $dcmd_task_service_pool_attr->app_id = $dcmd_task->app_id;
                             $dcmd_task_service_pool_attr->svr_id = $dcmd_task->svr_id;
                             $dcmd_task_service_pool_attr->svr_pool_id = $svr_pool_id;
                             $dcmd_task_service_pool_attr->attr_name = $name;
                             if (array_key_exists($name, $svr_pool_attr)) {
                                 $dcmd_task_service_pool_attr->attr_value = $svr_pool_attr[$name];
                             } else {
                                 $dcmd_task_service_pool_attr->attr_value = $value;
                             }
                             $dcmd_task_service_pool_attr->utime = $tm;
                             $dcmd_task_service_pool_attr->ctime = $tm;
                             $dcmd_task_service_pool_attr->opr_uid = Yii::$app->user->getId();
                             $dcmd_task_service_pool_attr->save();
                         }
                     }
                 }
             }
         }
         ///选择服务池子
         return $this->redirect(array('select-service-pool-node', 'task_id' => $dcmd_task->task_id));
     } else {
         ///添加新任务
         ///获取改用户可以操作的产品列表
         $group = "select app_id, app_name from dcmd_app where ";
         $query = DcmdUserGroup::find()->andWhere(['uid' => Yii::$app->user->getId()])->all();
         if (Yii::$app->user->getIdentity()->admin == 1) {
             $group .= " sa_gid in (0";
         } else {
             $group .= " svr_gid in (0";
         }
         if ($query) {
             foreach ($query as $item) {
                 $group .= "," . $item->gid;
             }
         }
         $group .= ")";
         $query = DcmdApp::findBySql($group)->all();
         $app = array("" => "");
         if ($query) {
             foreach ($query as $item) {
                 $app[$item->app_id] = $item->app_name;
             }
         }
         $task_cmd = DcmdTaskCmd::findOne($task_cmd_id);
         $model = new DcmdTask();
         $model->depend_task_id = 0;
         $model->depend_task_name = "";
         $model->task_cmd = $task_cmd->task_cmd;
         $task_cmd_prv = $task_cmd->ui_name . '-' . date("YmdHis");
         $args = $this->showTaskArg(arrToXml(array()), $task_cmd_id);
         return $this->render('create_by_cmd', ['model' => $model, 'app' => $app, 'task_cmd_prv' => $task_cmd_prv, 'args' => $args]);
     }
     echo "未知错误!";
     exit;
 }
 /**
  * Updates an existing DcmdOprCmdRepeatExec model.
  * If update is successful, the browser will be redirected to the 'view' page.
  * @param integer $id
  * @return mixed
  */
 public function actionUpdate($id)
 {
     if (Yii::$app->user->getIdentity()->admin != 1) {
         Yii::$app->getSession()->setFlash('success', NULL);
         Yii::$app->getSession()->setFlash('error', "对不起,你没有权限!");
         return $this->redirect(array('dcmd-opr-cmd-repeat-exec/index'));
     }
     $model = $this->findModel($id);
     if (Yii::$app->request->post()) {
         $params = Yii::$app->request->post()['DcmdOprCmdRepeatExec'];
         $model->timeout = $params['timeout'];
         $model->cache_time = $params['cache_time'];
         $model->ip = $params['ip'];
         $model->repeat = $params['repeat'];
         $model->ip_mutable = $params['ip_mutable'];
         $model->arg_mutable = $params['arg_mutable'];
         $arg = array();
         foreach (Yii::$app->request->post() as $k => $v) {
             if (substr($k, 0, 3) == "Arg") {
                 $arg[substr($k, 3)] = $v;
             }
         }
         $model->arg = arrToXml($arg);
         if ($model->save()) {
             $this->oprlog(2, "update repeat exec cmd:" . $model->repeat_cmd_name);
             Yii::$app->getSession()->setFlash('success', "修改成功");
             return $this->redirect(['view', 'id' => $id]);
         }
         $err_str = "";
         foreach ($model->getErrors() as $k => $v) {
             $err_str .= $k . ":" . $v[0] . "<br>";
         }
         Yii::$app->getSession()->setFlash('error', "修改失败:" . $err_str);
     }
     $arg_content = $this->getArg($model['arg'], true, $model->opr_cmd);
     return $this->render('update', ['model' => $model, 'arg_content' => $arg_content]);
 }
 /**
  * Updates an existing DcmdTaskTemplate model.
  * If update is successful, the browser will be redirected to the 'view' page.
  * @param integer $id
  * @return mixed
  */
 public function actionUpdate($id)
 {
     ///只有管理员可以操作
     if (Yii::$app->user->getIdentity()->admin != 1) {
         Yii::$app->getSession()->setFlash('success', NULL);
         Yii::$app->getSession()->setFlash('error', "对不起,你没有权限!");
         return $this->redirect(array('dcmd-task-template/view', 'id' => $id));
     }
     $model = $this->findModel($id);
     if ($model->load(Yii::$app->request->post())) {
         $model->load(Yii::$app->request->post());
         $query = DcmdService::findOne($model->svr_id);
         $model->svr_name = $query['svr_name'];
         $query = DcmdTaskCmd::findOne($model->task_cmd_id);
         ////Yii::$app->request->post()['task_cmd_id']);
         $model->task_cmd = $query['task_cmd'];
         $model->utime = date('Y-m-d H:i:s');
         $model->ctime = $model->utime;
         $model->opr_uid = Yii::$app->user->getId();
         $arg = array();
         foreach (Yii::$app->request->post() as $k => $v) {
             if (substr($k, 0, 3) == "Arg") {
                 $arg[substr($k, 3)] = $v;
             }
         }
         $model->task_arg = arrToXml($arg);
         if ($model->save()) {
             Yii::$app->getSession()->setFlash('success', "修改成功");
             $this->oprlog(2, "update task template:" . $model->task_tmpt_name);
             return $this->redirect(['view', 'id' => $model->task_tmpt_id]);
         }
     }
     ///获取产品信息
     $query = DcmdApp::find()->asArray()->all();
     $app = array("" => "");
     if ($query) {
         foreach ($query as $item) {
             $app[$item['app_id']] = $item['app_name'];
         }
     }
     ///获取任务脚本
     $query = DcmdTaskCmd::find()->asArray()->all();
     $task_cmd = array("" => "");
     if ($query) {
         foreach ($query as $item) {
             $task_cmd[$item['task_cmd_id']] = $item['task_cmd'];
         }
     }
     $arg_content = $this->actionGetTaskTypeArg($model->task_cmd_id, xmltoarray($model->task_arg));
     return $this->render('update', ['model' => $model, 'app' => $app, 'task_cmd' => $task_cmd, 'svr' => array($model->svr_id => $model->svr_name), 'arg_content' => $arg_content]);
 }
Пример #4
0
 public function actionShellRun()
 {
     $temp = explode(";", Yii::$app->request->post()['args']);
     $args = array();
     foreach ($temp as $ag) {
         $i = explode("=", $ag);
         if (sizeof($i) != 2) {
             continue;
         }
         $args[$i[0]] = $i[1];
     }
     $opr_cmd_id = Yii::$app->request->post()['opr_cmd_id'];
     $opr_cmd = $this->findModel($opr_cmd_id);
     $opr_exec = new DcmdOprCmdExec();
     $opr_exec->opr_cmd_id = $opr_cmd_id;
     $opr_exec->opr_cmd = $opr_cmd->opr_cmd;
     $opr_exec->run_user = $opr_cmd->run_user;
     $opr_exec->timeout = Yii::$app->request->post()['timeout'];
     $opr_exec->ip = Yii::$app->request->post()['ips'];
     $opr_exec->arg = arrToXml($args);
     $opr_exec->utime = date('Y-m-d H:i:s');
     $opr_exec->ctime = $opr_exec->utime;
     $opr_exec->opr_uid = Yii::$app->user->getId();
     $retcontent = array();
     if ($opr_exec->save()) {
         $query = DcmdCenter::findOne(['master' => 1]);
         if ($query) {
             list($ip, $port) = explode(':', $query["host"]);
             $reply = execOprCmd($ip, $port, $opr_exec->exec_id);
             if ($reply->getState() == 0) {
                 $ret_msg = "State:success<br>Detail:<br>";
                 foreach ($reply->getResult() as $agent) {
                     $ret_msg .= "-------------------------------------------------------<br>";
                     $ret_msg .= "Ip:" . $agent->getIp() . "<br>";
                     if ($agent->getState() == 0) {
                         $ret_msg .= "State:success<br>";
                         $ret_msg .= "Status:" . $agent->getStatus() . "<br>";
                         $ret_msg .= "Result:<br>" . str_replace("\n", "<br/>", $agent->getResult()) . "<br>";
                     } else {
                         $ret_msg .= "State:error<br>";
                         $ret_msg .= "Detail:<br>" . str_replace("\n", "<br/>", $agent->getErr()) . "<br>";
                     }
                     $retContent["result"] = $ret_msg;
                 }
             } else {
                 $retContent["result"] = "State:error<br>detail:" . str_replace("\n", "<br/>", $reply->getErr()) . "<br>";
             }
         } else {
             $retContent["result"] = "无法获取Center.";
         }
     } else {
         $retContent["result"] = "数据库操作失败!";
     }
     echo json_encode($retContent);
     exit;
 }