std::string RdsUtils::GetRdsClusterHostUrl()

in src/util/rds_utils.cc [85:111]


std::string RdsUtils::GetRdsClusterHostUrl(const std::string& host) {
    auto f = [ host ](const std::regex& pattern) {
        std::smatch m;
        if (std::regex_search(host, m, pattern) && m.size() > 1) {
            std::string gr1 = m.size() > 1 ? m.str(1) : std::string("");
            std::string gr2 = m.size() > 2 ? m.str(2) : std::string("");
            std::string gr3 = m.size() > 3 ? m.str(3) : std::string("");
            if (!gr1.empty() && !gr3.empty() &&
                (strcmp_case_insensitive(gr2.c_str(), "cluster-") == 0 || strcmp_case_insensitive(gr2.c_str(), "cluster-ro-") == 0)) {
                std::string result;
                result.assign(gr1);
                result.append(".cluster-");
                result.append(gr3);

                return result;
            }
        }
        return std::string();
    };

    auto result = f(AURORA_CLUSTER_PATTERN);
    if (!result.empty()) {
        return result;
    }

    return f(AURORA_CHINA_CLUSTER_PATTERN);
}