in core/unittest/prometheus/TargetSubscriberSchedulerUnittest.cpp [331:580]
void TargetSubscriberSchedulerUnittest::TestTargetLabels() {
// prepare data
auto judgeFunc = [](const Json::Value& scrapeConfig,
const string& targetResponse,
const string& metricsPath,
const string& scheme,
int64_t scrapeIntervalSeconds,
uint64_t scrapeTimeoutSeconds,
const string& ip,
int32_t port) {
std::shared_ptr<TargetSubscriberScheduler> targetSubscriber = std::make_shared<TargetSubscriberScheduler>();
APSARA_TEST_TRUE(targetSubscriber->Init(scrapeConfig));
std::vector<PromTargetInfo> newScrapeSchedulerSet;
APSARA_TEST_TRUE(targetSubscriber->ParseScrapeSchedulerGroup(targetResponse, newScrapeSchedulerSet));
APSARA_TEST_EQUAL(1UL, newScrapeSchedulerSet.size());
auto result = targetSubscriber->BuildScrapeSchedulerSet(newScrapeSchedulerSet);
APSARA_TEST_EQUAL(1UL, result.size());
APSARA_TEST_EQUAL(result.begin()->second->mMetricsPath, metricsPath);
APSARA_TEST_EQUAL(result.begin()->second->mInterval, scrapeIntervalSeconds);
APSARA_TEST_EQUAL(result.begin()->second->mScrapeTimeoutSeconds, scrapeTimeoutSeconds);
APSARA_TEST_EQUAL(result.begin()->second->mScheme, scheme);
APSARA_TEST_EQUAL(result.begin()->second->mHost, ip);
APSARA_TEST_EQUAL(result.begin()->second->mPort, port);
};
string case1 = R"JSON([
{
"targets": [
"192.168.22.7:8080"
],
"labels": {
"__address__": "192.168.22.7:8080",
"__scheme__": "https"
}
}
])JSON";
judgeFunc(mConfig["ScrapeConfig"], case1, "/metrics", "https", 30, 30, "192.168.22.7", 8080);
string case2 = R"JSON([
{
"targets": [
"192.168.22.7:8080"
],
"labels": {
"__address__": "192.168.22.7:8080",
"__scheme__": "http",
"__param_xx": "yy",
"__param_yy": "zz"
}
}
])JSON";
judgeFunc(mConfig["ScrapeConfig"], case2, "/metrics?xx=yy&yy=zz", "http", 30, 30, "192.168.22.7", 8080);
string case3 = R"JSON([
{
"targets": [
"192.168.22.31:6443"
],
"labels": {
"__address__": "192.168.22.31:6443",
"__scheme__": "http",
"__metrics_path__": "/metrics/ab/c?d=ef&aa=bb"
}
}
])JSON";
judgeFunc(mConfig["ScrapeConfig"], case3, "/metrics/ab/c?d=ef&aa=bb", "http", 30, 30, "192.168.22.31", 6443);
string case4 = R"JSON([
{
"targets": [
"192.168.22.7:8080"
],
"labels": {
"__address__": "192.168.22.7:8080",
"__scheme__": "https",
"__metrics_path__": "/custom/metrics",
"__param_xx": "yy",
"__param_yy": "zz"
}
}
])JSON";
judgeFunc(mConfig["ScrapeConfig"], case4, "/custom/metrics?xx=yy&yy=zz", "https", 30, 30, "192.168.22.7", 8080);
string case5 = R"JSON([
{
"targets": [
"192.168.22.31:6443"
],
"labels": {
"__address__": "192.168.22.31:6443",
"__scheme__": "http",
"__metrics_path__": "/metrics/ab/c?d=ef&aa=bb",
"__param_yy": "zz"
}
}
])JSON";
judgeFunc(mConfig["ScrapeConfig"], case5, "/metrics/ab/c?d=ef&aa=bb&yy=zz", "http", 30, 30, "192.168.22.31", 6443);
string case6 = R"JSON([
{
"targets": [
"192.168.22.31:6443"
],
"labels": {
"__address__": "192.168.22.31:6443",
"__scheme__": "http",
"__metrics_path__": "/metrics/ab/c?d=ef&aa=bb",
"__param_xx": "yy",
"__param_yy": "zz"
}
}
])JSON";
judgeFunc(
mConfig["ScrapeConfig"], case6, "/metrics/ab/c?d=ef&aa=bb&xx=yy&yy=zz", "http", 30, 30, "192.168.22.31", 6443);
string case7 = R"JSON([
{
"targets": [
"192.168.22.31:6443"
],
"labels": {
"__address__": "192.168.22.31:6443",
"__scheme__": "http",
"__scrape_interval__": "5s",
"__scrape_timeout__": "5s"
}
}
])JSON";
judgeFunc(mConfig["ScrapeConfig"], case7, "/metrics", "http", 5, 5, "192.168.22.31", 6443);
string configStr8 = R"JSON(
{
"Type": "input_prometheus",
"ScrapeConfig": {
"enable_http2": true,
"follow_redirects": true,
"honor_timestamps": false,
"job_name": "_kube-state-metrics",
"kubernetes_sd_configs": [
{
"enable_http2": true,
"follow_redirects": true,
"kubeconfig_file": "",
"namespaces": {
"names": [
"arms-prom"
],
"own_namespace": false
},
"role": "pod"
}
],
"params" : {
"__param_query": [
"test_query"
],
"__param_query_1": [
"test_query_1"
]
},
"metrics_path": "/metrics",
"scheme": "https",
"scrape_interval": "30s",
"scrape_timeout": "30s"
}
}
)JSON";
std::string errMsg;
if (!ParseJsonTable(configStr8, mConfig, errMsg)) {
std::cerr << "JSON parsing failed." << std::endl;
}
string case8 = R"JSON([
{
"targets": [
"192.168.22.31:6443"
],
"labels": {
"__address__": "192.168.22.31:6443",
"__scrape_interval__": "5s",
"__scrape_timeout__": "5s"
}
}
])JSON";
judgeFunc(mConfig["ScrapeConfig"],
case8,
"/metrics?__param_query=test_query&__param_query_1=test_query_1",
"https",
5,
5,
"192.168.22.31",
6443);
string configStr9 = R"JSON(
{
"Type": "input_prometheus",
"ScrapeConfig": {
"enable_http2": true,
"follow_redirects": true,
"honor_timestamps": false,
"job_name": "_kube-state-metrics",
"kubernetes_sd_configs": [
{
"enable_http2": true,
"follow_redirects": true,
"kubeconfig_file": "",
"namespaces": {
"names": [
"arms-prom"
],
"own_namespace": false
},
"role": "pod"
}
],
"params" : {
"__param_query": [
"test_query"
],
"__param_query_1": [
"test_query_1"
]
},
"metrics_path": "/metrics",
"scheme": "https",
"scrape_interval": "30s",
"scrape_timeout": "30s"
}
}
)JSON";
if (!ParseJsonTable(configStr9, mConfig, errMsg)) {
std::cerr << "JSON parsing failed." << std::endl;
}
string case9 = R"JSON([
{
"targets": [
"192.168.22.31"
],
"labels": {
"__address__": "192.168.22.31",
"__scheme__": "http",
"__param_xx": "yy",
"__scrape_interval__": "5s",
"__scrape_timeout__": "5s"
}
}
])JSON";
judgeFunc(mConfig["ScrapeConfig"],
case9,
"/metrics?__param_query=test_query&__param_query_1=test_query_1&xx=yy",
"http",
5,
5,
"192.168.22.31",
80);
}