Example #1
0
 /**
  * [dealInstanceReport 接收实例上报数据]
  * @return [type] [description]
  */
 public function dealInstanceReport()
 {
     $this->log('START FUNCTION ' . __FUNCTION__);
     $errorArray = array('error' => '');
     $data = Flight::request()->data->getData();
     $this->log(json_encode($data));
     $needPara = array('action', 'ip', 'data');
     $optionalPara = array();
     $error = $this->checkParameter($needPara, $data, $optionalPara);
     $action = $data['action'];
     $ip = $data['ip'];
     $actionMap = array('delete', 'replace');
     if (!in_array($action, $actionMap)) {
         $errorArray['error'] = 'action error';
         Flight::json($errorArray, 200);
     }
     $instance = new Instance();
     //删除包实例
     if ($action == 'delete') {
         $result = $instance->deleteInstanceByIp($ip);
         if (!$result) {
             $errorArray['error'] = 'delete instance error';
             Flight::json($errorArray, 400);
         }
     } elseif ($action == 'replace') {
         $data = urldecode($data['data']);
         $data = explode('||', $data);
         $databaseInfo = $instance->getInstanceByIp($ip);
         $newDatabaseInfo = array();
         $dataAll = array();
         foreach ($databaseInfo as $key => $value) {
             $newKey = $value['ip'] . '|' . $value['packagePath'] . '|' . $value['installPath'];
             $value['hash'] = $value['ip'] . $value['packagePath'] . $value['packageVersion'] . $value['installPath'] . $value['name'] . $value['port'] . $value['status'];
             $newDatabaseInfo[$newKey] = $value;
         }
         foreach ($data as $key => $item) {
             if (empty($item)) {
                 continue;
             }
             $item = explode('###', $item);
             $this->log(json_encode($item));
             $instanceData = array('ip' => $ip, 'installPath' => $item[0], 'packageVersion' => $item[1], 'packagePath' => $item[2], 'name' => $item[4], 'port' => $item[6], 'submitTime' => date("Y-m-d H:i:s", time()), 'installTime' => $item[7], 'status' => 1, 'hash' => $ip . $item[2] . $item[1] . $item[0] . $item[4] . $item[6] . "1");
             $newKey = $ip . '|' . $item[2] . '|' . $item[0];
             $dataAll[$newKey] = $instanceData;
         }
         $toDelete = array();
         $toModify = array();
         $this->log('database data ' . json_encode($newDatabaseInfo));
         $this->log('report data ' . json_encode($dataAll));
         foreach ($newDatabaseInfo as $key => $value) {
             if (empty($dataAll[$key])) {
                 //删除已不存在实例
                 $toDelete[] = $value;
             } elseif ($value['hash'] == $dataAll[$key]['hash']) {
                 //一样不需要修改
                 unset($dataAll[$key]);
                 continue;
             } else {
                 //做修改
                 $dataAll[$key]['instanceId'] = $value['instanceId'];
                 $toModify[] = $dataAll[$key];
                 unset($dataAll[$key]);
             }
         }
         //还剩下的要添加
         foreach ($dataAll as $key => $value) {
             unset($value['hash']);
             $result = $instance->addInstance($value) == true ? 'true' : 'false';
             $this->log('insert result' . $result);
         }
         //删除的实例
         if (!empty($toDelete)) {
             $result = $instance->deleteInstanceList($toDelete) == true ? 'true' : 'false';
             $this->log('delete result' . $result);
         }
         if (!empty($toModify)) {
             foreach ($toModify as $key => $value) {
                 unset($value['hash']);
                 $result = $instance->updateInstance($value) == true ? 'true' : 'false';
                 $this->log('update result' . $result);
             }
         }
     }
     Flight::json($errorArray, 200);
 }