Remove HTTP functionality

It wasn't used so it can be removed.
This commit is contained in:
Markus Mäkelä
2018-10-02 13:55:51 +03:00
parent 3daa0cd931
commit 8b9fdaa0cb
9 changed files with 3 additions and 161 deletions

View File

@ -16,7 +16,7 @@ then
build-essential libssl-dev ncurses-dev bison flex \ build-essential libssl-dev ncurses-dev bison flex \
perl libtool libpcre3-dev tcl tcl-dev uuid \ perl libtool libpcre3-dev tcl tcl-dev uuid \
uuid-dev libsqlite3-dev liblzma-dev libpam0g-dev pkg-config \ uuid-dev libsqlite3-dev liblzma-dev libpam0g-dev pkg-config \
libedit-dev libcurl4-openssl-dev libedit-dev
## separatelibgnutls installation process for Ubuntu Trusty ## separatelibgnutls installation process for Ubuntu Trusty
cat /etc/*release | grep -E "Trusty|wheezy" cat /etc/*release | grep -E "Trusty|wheezy"
@ -49,7 +49,7 @@ else
make libtool libopenssl-devel libaio libaio-devel flex \ make libtool libopenssl-devel libaio libaio-devel flex \
pcre-devel git wget tcl libuuid-devel \ pcre-devel git wget tcl libuuid-devel \
xz-devel sqlite3 sqlite3-devel pkg-config lua lua-devel \ xz-devel sqlite3 sqlite3-devel pkg-config lua lua-devel \
gnutls-devel libgcrypt-devel pam-devel libcurl-devel gnutls-devel libgcrypt-devel pam-devel
sudo zypper -n install rpm-build sudo zypper -n install rpm-build
cat /etc/*-release | grep "SUSE Linux Enterprise Server 11" cat /etc/*-release | grep "SUSE Linux Enterprise Server 11"
@ -66,7 +66,7 @@ else
libedit-devel systemtap-sdt-devel rpm-sign wget \ libedit-devel systemtap-sdt-devel rpm-sign wget \
gnupg pcre-devel flex rpmdevtools git wget tcl openssl libuuid-devel xz-devel \ gnupg pcre-devel flex rpmdevtools git wget tcl openssl libuuid-devel xz-devel \
sqlite sqlite-devel pkgconfig lua lua-devel rpm-build createrepo yum-utils \ sqlite sqlite-devel pkgconfig lua lua-devel rpm-build createrepo yum-utils \
gnutls-devel libgcrypt-devel pam-devel libcurl-devel gnutls-devel libgcrypt-devel pam-devel
# Attempt to install libasan, it'll only work on CentOS 7 # Attempt to install libasan, it'll only work on CentOS 7
sudo yum install -y --nogpgcheck libasan sudo yum install -y --nogpgcheck libasan

View File

@ -44,7 +44,6 @@ find_package(GSSAPI)
find_package(SQLite) find_package(SQLite)
find_package(ASAN) find_package(ASAN)
find_package(TSAN) find_package(TSAN)
find_package(CURL)
# Build PCRE2 so we always know the version # Build PCRE2 so we always know the version
# Read BuildPCRE2 for details about how to add pcre2 as a dependency to a target # Read BuildPCRE2 for details about how to add pcre2 as a dependency to a target

View File

@ -11,7 +11,6 @@ requirements are as follows:
* Flex 2.5.35 or later * Flex 2.5.35 or later
* libuuid * libuuid
* GNUTLS * GNUTLS
* libcurl
This is the minimum set of requirements that must be met to build the MaxScale This is the minimum set of requirements that must be met to build the MaxScale
core package. core package.

View File

@ -338,15 +338,4 @@ MXS_MONITOR_API MonitorApi<MonitorInstance>::s_api =
&MonitorApi<MonitorInstance>::diagnostics_json, &MonitorApi<MonitorInstance>::diagnostics_json,
}; };
/**
* Get the master server of the remote monitor
*
* The `peer_hosts`, `peer_user` and `peer_password` parameters must have been defined for this
* to work.
*
* @param name The name of the remote monitor
*
* @return The host and port of the monitor or an empty string and 0 if an error occurred
*/
std::pair<std::string, int> mon_get_external_master(const std::string& name);
} }

View File

@ -655,26 +655,4 @@ uint64_t get_byteN(const uint8_t* ptr, int bytes);
*/ */
uint8_t* set_byteN(uint8_t* ptr, uint64_t value, int bytes); uint8_t* set_byteN(uint8_t* ptr, uint64_t value, int bytes);
namespace http
{
struct Result
{
int code; // HTTP response code
std::string raw_body; // Raw response body
std::unique_ptr<json_t> body; // JSON form of the body if it was valid JSON
std::unordered_map<std::string, std::string> headers; // Headers attached to the response
};
/**
* Do a HTTP GET
*
* @param url URL to use
* @param user Username to use, optional
* @param passwor Password for the user, optional
*
* @return A Result
*/
Result get(const std::string& url, const std::string& user = "", const std::string& password = "");
}
} }

View File

@ -67,7 +67,6 @@ target_link_libraries(maxscale-common
gnutls gnutls
gcrypt gcrypt
${MICROHTTPD_LIBRARIES} ${MICROHTTPD_LIBRARIES}
${CURL_LIBRARIES}
) )
if(WITH_ASAN AND ASAN_FOUND) if(WITH_ASAN AND ASAN_FOUND)

View File

@ -2929,64 +2929,4 @@ void MonitorInstance::run_one_tick()
store_server_journal(m_monitor, m_master); store_server_journal(m_monitor, m_master);
} }
static bool remote_server_is_master(const std::string& url, std::string* host, int* port)
{
bool rval = false;
auto res = mxs::http::get(url,
config_get_global_options()->peer_user,
config_get_global_options()->peer_password);
json_t* state = mxs_json_pointer(res.body.get(), "data/attributes/state");
json_t* json_host = mxs_json_pointer(res.body.get(), "data/attributes/parameters/address");
json_t* json_port = mxs_json_pointer(res.body.get(), "data/attributes/parameters/port");
if (json_is_string(json_host) && json_is_integer(json_port) && json_is_string(state))
{
const std::set<std::string> master_states {"Master, Running", "Master, Synced, Running"};
if (master_states.count(json_string_value(state)))
{
*host = json_string_value(json_host);
*port = json_integer_value(json_port);
rval = true;
}
}
return rval;
}
std::pair<std::string, int> mon_get_external_master(const std::string& name)
{
std::string host;
int port = 0;
std::string url = config_get_global_options()->peer_hosts;
auto res = mxs::http::get(url + "/v1/monitors/" + name,
config_get_global_options()->peer_user,
config_get_global_options()->peer_password);
json_t* remote = mxs_json_pointer(res.body.get(), "data/relationships/servers/links/self");
json_t* arr = mxs_json_pointer(res.body.get(), "data/relationships/servers/data");
if (json_is_string(remote) && json_is_array(arr))
{
std::string remote_host = json_string_value(remote);
size_t i;
json_t* value;
json_array_foreach(arr, i, value)
{
json_t* id = mxs_json_pointer(value, "id");
if (json_is_string(id))
{
if (remote_server_is_master(remote_host + json_string_value(id), &host, &port))
{
break;
}
}
}
}
return {host, port};
}
} }

View File

@ -169,25 +169,10 @@ int test_checksums()
return 0; return 0;
} }
void test_http()
{
auto res = mxs::http::get("https://mariadb.com/");
std::cout << "https://mariadb.com/ responded with: " << res.code << std::endl;
if (res.code == 200)
{
if (res.headers.count("Date"))
{
std::cout << "The date is: " << res.headers["Date"] << std::endl;
}
}
}
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
int rv = 0; int rv = 0;
test_http(); // Just to see that it works
rv += test_trim(); rv += test_trim();
rv += test_trim_leading(); rv += test_trim_leading();
rv += test_trim_trailing(); rv += test_trim_trailing();

View File

@ -1294,51 +1294,4 @@ size_t header_callback(char* ptr, size_t size, size_t nmemb, void* userdata)
} }
} }
namespace http
{
Result get(const std::string& url, const std::string& user, const std::string& password)
{
Result res;
char errbuf[CURL_ERROR_SIZE + 1] = "";
CURL* curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10); // For connection phase
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10); // For data transfer phase
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &res.raw_body);
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);
curl_easy_setopt(curl, CURLOPT_HEADERDATA, &res.headers);
if (!user.empty() && !password.empty())
{
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_easy_setopt(curl, CURLOPT_USERPWD, (user + ":" + password).c_str());
}
long code = 0; // needs to be a long
if (curl_easy_perform(curl) == CURLE_OK)
{
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code);
res.code = code;
}
else
{
res.code = -1;
res.raw_body = errbuf;
}
// Even the errors are valid JSON so this should be OK
json_error_t err;
res.body.reset(json_loads(res.raw_body.c_str(), 0, &err));
curl_easy_cleanup(curl);
return std::move(res);
}
}
} }