int32_t ParseJson::ParseProxyInfo()

in inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-cpp/src/utils/parse_json.cc [38:104]


int32_t ParseJson::ParseProxyInfo(const std::string &inlong_group_id,
                                  const std::string &meta_data,
                                  ProxyInfoVec &proxy_info_vec,
                                  GroupId2ClusterIdMap &group_id_2_cluster_id) {
  rapidjson::Document doc;
  if (doc.Parse(meta_data.c_str()).HasParseError()) {
    return SdkCode::kErrorParseJson;
  }

  if (!(doc.HasMember(kJsonKeySuccess) && doc[kJsonKeySuccess].IsBool() &&
      doc[kJsonKeySuccess].GetBool())) {
    return SdkCode::kErrorParseJson;
  }

  if (!doc.HasMember(kJsonKeyData) || doc[kJsonKeyData].IsNull()) {
    return SdkCode::kErrorParseJson;
  }

  const rapidjson::Value &clusterInfo = doc[kJsonKeyData];
  if (!clusterInfo.HasMember(kJsonKeyNodeList) || clusterInfo[kJsonKeyNodeList].IsNull()) {
    return SdkCode::kErrorParseJson;
  }

  const rapidjson::Value &nodeList = clusterInfo[kJsonKeyNodeList];
  if (nodeList.GetArray().Size() <= 0) {
    return SdkCode::kErrorParseJson;
  }

  if (!clusterInfo.HasMember(kJsonKeyClusterId) ||
      !clusterInfo[kJsonKeyClusterId].IsInt() ||
      clusterInfo[kJsonKeyClusterId].GetInt() <= 0) {
    return SdkCode::kErrorParseJson;
  }

  group_id_2_cluster_id[inlong_group_id] = clusterInfo[kJsonKeyClusterId].GetInt();

  int32_t load = 0;
  if (clusterInfo.HasMember(kJsonKeyLoad) && clusterInfo[kJsonKeyLoad].IsInt() &&
      !clusterInfo[kJsonKeyLoad].IsNull()) {
    load = clusterInfo[kJsonKeyLoad].GetInt();
  }

  for (auto &proxy : nodeList.GetArray()) {
    std::string ip;
    std::string id;
    int32_t port;
    if (!proxy.HasMember(kJsonKeyIp) || proxy[kJsonKeyIp].IsNull()) {
      continue;
    }
    ip = proxy[kJsonKeyIp].GetString();

    if (!proxy.HasMember(kJsonKeyPort) || proxy[kJsonKeyPort].IsNull()) {
      continue;
    }
    if (proxy[kJsonKeyPort].IsString()) port = std::stoi(proxy[kJsonKeyPort].GetString());
    if (proxy[kJsonKeyPort].IsInt()) port = proxy[kJsonKeyPort].GetInt();

    if (!proxy.HasMember(kJsonKeyId) || proxy[kJsonKeyId].IsNull()) {
      continue;
    }
    if (proxy[kJsonKeyId].IsString()) id = proxy[kJsonKeyId].GetString();
    if (proxy[kJsonKeyId].IsInt()) id = proxy[kJsonKeyId].GetInt();

    proxy_info_vec.emplace_back(id, ip, port, load);
  }
  return SdkCode::kSuccess;
}