Пример #1
0
 public static function deleteFeedbackByNode($node_whole, $idc)
 {
     if ($node_whole === NULL || $idc === NULL) {
         QconfMgrLog::err(__FILE__, __LINE__, "Parameter 'node_whole' or 'idc' is NULL");
         return FALSE;
     }
     ArgsUtil::setSQLEscape($node_whole);
     ArgsUtil::setSQLEscape($idc);
     $update = "delete from qconf_feedback where node_whole='{$node_whole}' and idc='{$idc}'";
     $res = self::executeQuery($update);
     if ($res === FALSE) {
         QconfMgrLog::err(__FILE__, __LINE__, "EXEC {$update} failed!");
         return FALSE;
     }
     return TRUE;
 }
Пример #2
0
 public static function recordOp($op_type_code, $hostname, $node_whole, $idc, $data_type, $value_md5, $update_time)
 {
     $op_time = date('Y-m-d H:i:s', time());
     ArgsUtil::setSQLEscape($op_type_code);
     ArgsUtil::setSQLEscape($hostname);
     ArgsUtil::setSQLEscape($node_whole);
     ArgsUtil::setSQLEscape($idc);
     ArgsUtil::setSQLEscape($data_type);
     ArgsUtil::setSQLEscape($value_md5);
     ArgsUtil::setSQLEscape($update_time);
     ArgsUtil::setSQLEscape($op_time);
     $query = "insert into qconf_feedback_op (op_type_code, hostname, node_whole, idc, data_type, value_md5, update_time, op_time) \n            values ('{$op_type_code}', '{$hostname}', '{$node_whole}', '{$idc}', '{$data_type}', '{$value_md5}', '{$update_time}', '{$op_time}')";
     $res = self::executeQuery($query);
     if ($res === FALSE) {
         QconfMgrLog::err(__FILE__, __LINE__, "EXEC '{$query}' failed!");
         return FALSE;
     }
     return TRUE;
 }
Пример #3
0
 /**
  * modify feedback with feedback_id
  */
 public static function modifyFeedback($fd_id, $ip, $value_md5, $value, $update_time)
 {
     if ($fd_id === NULL || $value_md5 === NULL) {
         QconfMgrLog::err(__FILE__, __LINE__, "fd_id or value_md5 is NULL");
         return FALSE;
     }
     $exist = self::existFeedback($fd_id);
     if ($exist === FALSE) {
         QconfMgrLog::err(__FILE__, __LINE__, "feedback item with id({$fd_id}) does not exist!");
         return FALSE;
     }
     ArgsUtil::setSQLEscape($ip);
     ArgsUtil::setSQLEscape($value_md5);
     ArgsUtil::setSQLEscape($value);
     ArgsUtil::setSQLEscape($update_time);
     $update = "update qconf_feedback set ip = '{$ip}', value_md5 = '{$value_md5}'," . " value = '{$value}', update_time = '{$update_time}' where feedback_id = '{$fd_id}'";
     $res = self::executeQuery($update);
     if ($res === FALSE) {
         QconfMgrLog::err(__FILE__, __LINE__, "EXEC '{$query}' failed!");
         return FALSE;
     }
     return TRUE;
 }
 public function checkFeedbackAction()
 {
     $node_id = $this->getRequest("node_id", "");
     $idc = $this->getRequest("idc", "");
     $page = $this->getRequest("page", 1);
     $page_count = $this->getRequest("pageCount", 20);
     // 1. parameter is not right
     if ($node_id === "" || $idc === "") {
         $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_BAD_ARGS);
         QconfMgrLog::err(__FILE__, __LINE__, "parameter node_id or idc is null!");
         echo json_encode($res);
         return;
     }
     ArgsUtil::setVal($page);
     ArgsUtil::setVal($page_count);
     if ($page <= 0) {
         $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_BAD_ARGS);
         QconfMgrLog::err(__FILE__, __LINE__, "parameter page error!");
         echo json_encode($res);
         return;
     }
     if ($page_count < 0) {
         $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_BAD_ARGS);
         QconfMgrLog::err(__FILE__, __LINE__, "parameter page_count error!");
         echo json_encode($res);
         return;
     }
     // 2. idc zookeeper server not exist
     $idc_host = ZkConf::getZkHost($idc);
     if ($idc_host === NULL) {
         $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_IDC_NOT_EXIST);
         QconfMgrLog::err(__FILE__, __LINE__, "'{$idc}' is not int ZOOKEEPER_SVR!");
         echo json_encode($res);
         return;
     }
     // 3. get the node info from database
     $dbnode = NodeServ::getNode($node_id);
     if ($dbnode === FALSE) {
         $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_NODE_NOT_EXIST);
         QconfMgrLog::err(__FILE__, __LINE__, "node : {$node_id} is not exist!");
         echo json_encode($res);
         return;
     }
     $node_whole = $dbnode["node_whole"];
     $node_type_code = $dbnode["node_type_code"];
     $data_type = $node_type_code == InfoDescUtil::NODE_TYPE_SERV_FATHER ? InfoDescUtil::FEEDBACK_DATA_TYPE_SERVICE : InfoDescUtil::FEEDBACK_DATA_TYPE_VALUE;
     $cur_node_idc = $dbnode["idc"];
     $cur_idcs_array = explode(',', $cur_node_idc);
     $exist_idc = in_array($idc, $cur_idcs_array);
     if ($exist_idc === FALSE) {
         $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_IDC_NOT_IN_DATABASE);
         QconfMgrLog::err(__FILE__, __LINE__, "node : {$node_id} does not exist on idc : {$idc}!");
         echo json_encode($res);
         return;
     }
     // 4. get feedbacks on current node
     $start = ($page - 1) * $page_count;
     $qconf_path = PathUtil::getQconfPath($node_whole);
     $feedbacks = FeedbackServ::queryFeedbackByNode($qconf_path, $idc, $data_type, $start, $page_count);
     if ($feedbacks === FALSE) {
         $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_MYSQL_FAIL);
         QconfMgrLog::err(__FILE__, __LINE__, "failed to query feedbacks by node:{$node_whole},\n                idc({$idc}), data_type({$data_type}), page({$page}), page_count({$page_count})!");
         echo json_encode($res);
         return;
     }
     $total_count = FeedbackServ::feedbackAmountByNode($qconf_path, $idc, $data_type);
     if ($total_count === FALSE) {
         $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_MYSQL_FAIL);
         QconfMgrLog::err(__FILE__, __LINE__, "failed to get feedbacks amount by node:{$node_whole}, idc({$idc}), data_type({$data_type})");
         echo json_encode($res);
         return;
     }
     // 5. calcuate value_md5
     $zk_web = new QconfZkWebBase(Log::INFO);
     $zk_web->connect($idc_host);
     $retry_time = 0;
     if ($data_type == InfoDescUtil::FEEDBACK_DATA_TYPE_SERVICE) {
         // 5.1 calcuate value_md5 for service father node
         $services = -1;
         while ($services === -1 && $retry_time <= InfoDescUtil::ZK_MAX_RETRY_TIME) {
             QconfMgrLog::err(__FILE__, __LINE__, "retry {$retry_time} of " . InfoDescUtil::ZK_MAX_RETRY_TIME . " to get services {$node_whole} on {$idc_host}");
             $services = $zk_web->get_group_services_with_status($qconf_path);
             $retry_time++;
         }
         if ($services === -1) {
             $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_ZOOKEEPER_FAIL);
             QconfMgrLog::err(__FILE__, __LINE__, "The children of path: {$qconf_path} are null!");
             echo json_encode($res);
             return;
         }
         ksort($services);
         foreach ($services as $serv => $status) {
             $ser_combine .= "{$serv}#{$status},";
         }
         $ser_combine = trim($ser_combine, ',');
         //echo $ser_combine;
         $node_md5 = md5($ser_combine);
     } else {
         // 5.2 calcuate value_md5 for value
         $node_val = -1;
         while ($node_val === -1 && $retry_time <= InfoDescUtil::ZK_MAX_RETRY_TIME) {
             QconfMgrLog::err(__FILE__, __LINE__, "retry {$retry_time} of " . InfoDescUtil::ZK_MAX_RETRY_TIME . " to get value of {$node_whole} on {$idc}");
             $node_val = $zk_web->get_conf($qconf_path);
             $retry_time++;
         }
         if ($node_val === -1) {
             $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_ZOOKEEPER_FAIL);
             QconfMgrLog::err(__FILE__, __LINE__, "failed to get value of {$qconf_path}!");
             echo json_encode($res);
             return;
         }
         $node_md5 = md5($node_val);
     }
     // 6. encapsulate feedback result
     $fd_result = array();
     foreach ($feedbacks as $feedback) {
         $fd_one = array("feedback_id" => $feedback["feedback_id"], "hostname" => $feedback["hostname"], "ip" => $feedback["ip"], "status" => $feedback["value_md5"] == $node_md5 ? "0" : "1", "update_time" => $feedback["update_time"]);
         $fd_result[] = $fd_one;
     }
     $result = array("curPage" => "{$page}", "totalCount" => "{$total_count}", "listing" => $fd_result);
     $res = array("errno" => "0", "errmsg" => "", "data" => $result);
     $json = json_encode($res);
     echo $json;
 }
Пример #5
0
 private function upOrOfflineService($op_type)
 {
     // 1.argument receive and preprocess
     $res = "";
     $argus = self::commonArgusProcess($res);
     if ($argus === FALSE) {
         echo json_encode($res);
         return;
     }
     $user = $argus["user"];
     $path = $argus["path"];
     $idc = $argus["idc"];
     $main_buss_id = $argus["main_buss_id"];
     $sub_buss_id = $argus["sub_buss_id"];
     $service_name = $this->getRequest("service_name", "");
     if ($service_name === "") {
         $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_BAD_ARGS);
         QconfMgrLog::err(__FILE__, __LINE__, "paramter: 'service_name({$service_name})'is required!");
         echo json_encode($res);
         return;
     }
     $service_list = preg_split("/[,]+/", trim($service_name, ","));
     //validate for ip_port
     if (ArgsUtil::ipPortsValidation($service_list) === FALSE) {
         //failed to add any new services
         $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_BAD_ARGS);
         QconfMgrLog::err(__FILE__, __LINE__, "ilegal services : {$service_name} under {$path}!");
         echo json_encode($res);
         return;
     }
     // 2. check node exist and is node father type
     $check_res = ServiceController::checkServFatherNode($path, $main_buss_id);
     if ($check_res != InfoDescUtil::QCONF_OK) {
         $res = InfoDescUtil::getErrorMsg($check_res);
         echo json_encode($res);
         return;
     }
     // 3. do up or offline
     $op_type_msg = $op_type === InfoDescUtil::OP_TYPE_OFFLINE ? "offline" : "up";
     $idc_list = preg_split("/[,]+/", $idc);
     // split by ,
     foreach ($idc_list as $idc_each) {
         $idc_host = ZkConf::getZkHost($idc_each);
         $zk_web = new QconfZkWebBase(Log::INFO);
         $zk_web->connect($idc_host);
         $get_ret = ServiceController::getServicesAndStatusWithLink($zk_web, $path, $idc_each, $exist_services);
         if ($get_ret != InfoDescUtil::QCONF_OK) {
             $res = InfoDescUtil::getErrorMsg($get_ret);
             echo json_encode($res);
             return;
         }
         foreach ($service_list as $service) {
             $show_ser_path = PathUtil::unionPath($path, $service);
             // check service exist
             if (!array_key_exists($service, $exist_services)) {
                 $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_SERVICE_NO_EXIST);
                 echo json_encode($res);
                 return;
             }
             if ($op_type === InfoDescUtil::OP_TYPE_OFFLINE) {
                 //check up service cout for offline operation
                 $is_last = TRUE;
                 foreach ($exist_services as $one_exist_service => $service_status) {
                     if ($service_status === InfoDescUtil::SERV_STATUS_UP && $one_exist_service != $service) {
                         $is_last = FALSE;
                         break;
                     }
                 }
                 if ($is_last) {
                     $res = InfoDescUtil::getErrorMsg(InfoDescUtil::ERR_OFFILE_SERVICE_ONLY);
                     QconfMgrLog::err(__FILE__, __LINE__, "{$service} is the last up service under {$path}");
                     echo json_encode($res);
                     return;
                 }
                 $ret = ServiceController::offlineServiceWithLink($zk_web, $path, $service, $idc_each);
                 $exist_services[$service] = InfoDescUtil::SERV_STATUS_DOWN;
             } else {
                 $ret = ServiceController::upServiceWithLink($zk_web, $path, $service, $idc_each);
             }
             if ($ret != InfoDescUtil::QCONF_OK) {
                 $res = InfoDescUtil::getErrorMsg($ret);
                 QconfMgrLog::err(__FILE__, __LINE__, "{$op_type_msg} service!");
                 OpServ::insert($op_type, $show_ser_path, $idc_each, InfoDescUtil::OP_STATUS_ZOO_FAILED, $main_buss_id, $sub_buss_id, $user, "");
                 echo json_encode($res);
                 return;
             }
             OpServ::insert($op_type, $show_ser_path, $idc_each, InfoDescUtil::OP_STATUS_SUCCESS, $main_buss_id, $sub_buss_id, $user, $op_type === InfoDescUtil::OP_TYPE_OFFLINE ? InfoDescUtil::SERV_STATUS_OFFLINE : InfoDescUtil::SERV_STATUS_UP);
         }
     }
     $res = array("errno" => "0", "errmsg" => "", "data" => "{$op_type_msg} service success");
     $json = json_encode($res);
     echo $json;
     return;
 }
Пример #6
0
 public static function modNodeType($parent_node_id)
 {
     if ($parent_node_id === NULL || $parent_node_id === "") {
         QconfMgrLog::err(__FILE__, __LINE__, "'parent_node_id' is NULL");
         return FALSE;
     }
     ArgsUtil::setVal($parent_node_id);
     $query = "select * from qconf_node where node_id = '{$parent_node_id}'";
     $res = self::executeQuery($query);
     if ($res === FALSE) {
         return FALSE;
     }
     $p_row = mysql_fetch_array($res, MYSQL_ASSOC);
     if ($p_row === FALSE) {
         QconfMgrLog::err(__FILE__, __LINE__, "EXEC '{$query}' failed!");
         return FALSE;
     }
     if ($p_row['node_type_code'] == InfoDescUtil::NODE_TYPE_NORMAL) {
         $update = "update qconf_node set node_type_code = '" . InfoDescUtil::NODE_TYPE_SERV_FATHER . "' where node_id = '{$parent_node_id}'";
         $ret = self::executeQuery($update);
         if ($ret === FALSE) {
             QconfMgrLog::err(__FILE__, __LINE__, "EXEC '{$update}' failed!");
             return FALSE;
         }
     }
     return TRUE;
 }
Пример #7
0
 public static function delPermByIdc($perm_node, $main_buss_id, $idc)
 {
     if ($perm_node === NULL || $perm_node === "" || $main_buss_id === NULL || $main_buss_id === "" || $idc === NULL || $idc === "") {
         QconfMgrLog::err(__FILE__, __LINE__, "perm_node, main_buss_id or idc is NULL");
         return FALSE;
     }
     ArgsUtil::setSQLEscape($perm_node);
     ArgsUtil::setSQLEscape($main_buss_id);
     ArgsUtil::setSQLEscape($idc);
     $query = "select * from qconf_perm where node = '{$perm_node}' and main_buss_id = '{$main_buss_id}'";
     $res = self::executeQuery($query);
     if ($res === FALSE) {
         return FALSE;
     }
     // 1. not found the perm
     $num = mysql_num_rows($res);
     if ($num === 0) {
         QconfMgrLog::err(__FILE__, __LINE__, "EXEC '{$query}' failed!");
         return FALSE;
     }
     $row = mysql_fetch_array($res, MYSQL_ASSOC);
     $perm_id = $row["perm_id"];
     $idc_list = preg_split("/[,]+/", $row['idc']);
     foreach ($idc_list as $idc_tmp) {
         if (strcmp($idc, $idc_tmp) !== 0) {
             $idc_left .= ",{$idc_tmp}";
         }
     }
     if (!isset($idc_left)) {
         $query = "delete from qconf_perm where perm_id = '{$perm_id}'";
     } else {
         $idc_left = trim($idc_left, ",");
         $query = "update qconf_perm set idc = '{$idc_left}' where perm_id = '{$perm_id}'";
     }
     // 2. update the idc info
     $res = self::executeQuery($query);
     if ($res === FALSE) {
         QconfMgrLog::err(__FILE__, __LINE__, "EXEC {$query} failed!");
         return FALSE;
     }
     return TRUE;
 }
Пример #8
0
 /**
  * insert a record into the database
  */
 public static function insert($op_type_code, $node, $idc, $op_status_code, $main_buss_id, $sub_buss_id, $op_user, $msg)
 {
     $op_id = GuidUtil::guidGenerator();
     $op_time = date('Y-m-d H:i:s', time());
     ArgsUtil::setSQLEscape($op_type_code);
     ArgsUtil::setSQLEscape($node);
     ArgsUtil::setSQLEscape($idc);
     ArgsUtil::setSQLEscape($op_status_code);
     ArgsUtil::setVal($main_buss_id);
     ArgsUtil::setVal($sub_buss_id);
     ArgsUtil::setSQLEscape($op_user);
     ArgsUtil::setSQLEscape($msg);
     $query = "insert into qconf_op values (NULL, '{$op_id}', '{$op_type_code}', '{$node}', '{$idc}', '{$op_time}',\n            '{$op_status_code}', {$main_buss_id}, {$sub_buss_id}, '{$op_user}', '{$msg}');";
     return self::executeQuery($query);
 }
Пример #9
0
 public function deleteNormal($normal_user, $node_whole)
 {
     if ($normal_user === NULL || $normal_user === "" || $node_whole === NULL || $node_whole === "") {
         QconfMgrLog::err(__FILE__, __LINE__, "normal_user or node is NULL");
         return FALSE;
     }
     $node_whole = "/" . trim($node_whole, "/") . "/";
     ArgsUtil::setSQLEscape($normal_user);
     ArgsUtil::setSQLEscape($node_whole);
     $query = "select count(*) from qconf_normal_perm where binary user_name = '{$normal_user}' and binary node = '{$node_whole}'";
     $res = self::executeQuery($query);
     if ($res === FALSE) {
         return FALSE;
     }
     $ret_arr = mysql_fetch_array($res, MYSQL_NUM);
     if ($ret_arr[0] <= 0) {
         return InfoDescUtil::ERR_USER_PERM_NODE_NOT_EXIST;
     }
     $query = "delete from qconf_normal_perm where binary user_name = '{$normal_user}' and binary node = '{$node_whole}'";
     $res = self::executeQuery($query);
     if ($res === FALSE) {
         return FALSE;
     }
     return InfoDescUtil::QCONF_OK;
 }