/** * [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); }