diff options
| author | fumingwei <[email protected]> | 2023-05-29 14:04:57 +0800 |
|---|---|---|
| committer | fumingwei <[email protected]> | 2023-06-02 10:41:12 +0800 |
| commit | 2b6a1bfd1a6c41fb71b59dd50f62d2c3f4688fa8 (patch) | |
| tree | a4bc90b8a752dee1f42bfda1b313cb824d1ed0ff /test | |
| parent | d5389fb9f1cf48f413eb6cd7baad27a57efe2274 (diff) | |
bugfix:新增historgam和summary line protocol输出
Diffstat (limited to 'test')
| -rw-r--r-- | test/src/gtest_fieldstat_interface.cpp | 52 | ||||
| -rw-r--r-- | test/src/gtest_fieldstat_output.cpp | 951 |
2 files changed, 1003 insertions, 0 deletions
diff --git a/test/src/gtest_fieldstat_interface.cpp b/test/src/gtest_fieldstat_interface.cpp index 600314f..48ebb9a 100644 --- a/test/src/gtest_fieldstat_interface.cpp +++ b/test/src/gtest_fieldstat_interface.cpp @@ -564,6 +564,58 @@ TEST(FeildStatAPI, SetMetricInvisible) fieldstat_instance_free(instance); } +TEST(FeildStatAPI, RegisterSummary) +{ + int ret = 0; + struct fieldstat_instance * instance = NULL; + const char * quantiles = "0.1,0.5,0.8,0.9,0.95,0.99"; + + instance = fieldstat_instance_new("maat"); + + ret = fieldstat_register_summary(instance, "latency", NULL, 0, quantiles, 1, 5, 2, 0); + EXPECT_EQ(0, ret); + + ret = fieldstat_register_summary(instance, "latency", NULL, 0, quantiles, -1, 5, 2, 0); + EXPECT_EQ(-1, ret); + + ret = fieldstat_register_summary(instance, "latency", NULL, 0, quantiles, 2, 3, 2, 0); + EXPECT_EQ(-1, ret); + + ret = fieldstat_register_summary(instance, "latency", NULL, 0, quantiles, 1, 5, 10, 0); + EXPECT_EQ(-1, ret); + + ret = fieldstat_register_summary(instance, "latency", NULL, 0, quantiles, 1, 5, 2, 2); + EXPECT_EQ(-1, ret); + + fieldstat_instance_free(instance); +} + +TEST(FeildStatAPI, RegisterHistogram) +{ + int ret = 0; + struct fieldstat_instance * instance = NULL; + const char * quantiles = "0.1,0.5,0.8,0.9,0.95,0.99"; + + instance = fieldstat_instance_new("maat"); + + ret = fieldstat_register_histogram(instance, "latency", NULL, 0, quantiles, 1, 5, 2, 0); + EXPECT_EQ(0, ret); + + ret = fieldstat_register_histogram(instance, "latency", NULL, 0, quantiles, -1, 5, 2, 0); + EXPECT_EQ(-1, ret); + + ret = fieldstat_register_histogram(instance, "latency", NULL, 0, quantiles, 2, 3, 2, 0); + EXPECT_EQ(-1, ret); + + ret = fieldstat_register_histogram(instance, "latency", NULL, 0, quantiles, 1, 5, 10, 0); + EXPECT_EQ(-1, ret); + + ret = fieldstat_register_histogram(instance, "latency", NULL, 0, quantiles, 1, 5, 2, 2); + EXPECT_EQ(-1, ret); + + fieldstat_instance_free(instance); +} + int main(int argc, char *argv[]) { diff --git a/test/src/gtest_fieldstat_output.cpp b/test/src/gtest_fieldstat_output.cpp index 634017d..a7e92d0 100644 --- a/test/src/gtest_fieldstat_output.cpp +++ b/test/src/gtest_fieldstat_output.cpp @@ -718,6 +718,957 @@ TEST(FeildStatOutput, OutputFileAndPrometheusAndLineProtocol) } +TEST(FeildStatOutput, SummaryOutputFile) +{ + int metric_id = -1; + const char *quantiles = "0.1,0.5,0.8,0.9,0.95,0.99"; + const char *output_file = "/tmp/fieldstat.txt"; + const char *compared_data_line = "hit_rate 10 50" + " 80 90 95" + " 99 100 1" + " 50.50 28.87 100\n"; + FILE *fp; + char read_line[2048] = {0}; + int n_line = 0; + + struct fieldstat_instance *instance = fieldstat_instance_new("maat"); + fieldstat_set_local_output(instance, "/tmp/fieldstat.txt", "default"); + + metric_id = fieldstat_register_summary(instance, "hit_rate", NULL, 0, + quantiles, 1, 100, 2, 0); + EXPECT_EQ(0, metric_id); + fieldstat_instance_start(instance); + sleep(1); + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 1); + } + sleep(2); + + fp = fopen(output_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + if(n_line == 2) + { + EXPECT_STREQ(compared_data_line, read_line); + } + n_line++; + } + fclose(fp); + EXPECT_EQ(4, n_line); + fieldstat_instance_free(instance); +} + +TEST(FeildStatOutput, SummaryOutputLineProtocol) +{ + int metric_id = -1; + const char * quantiles = "0.1,0.5,0.8,0.9,0.95,0.99"; + + const char *telegraf_file = "/tmp/metrics.out"; + FILE *fp; + char read_line[2048] = {0}; + int n_line = 0; + cJSON *cjson_metric = NULL; + cJSON *cjson_tags = NULL; + char *cjson_metric_str = NULL; + const char *compared_data = "{\"fields\":{\"P10\":10,\"P50\":50," + "\"P80\":80,\"P90\":90,\"P95\":95," + "\"P99\":99,\"avg\":50.500000,\"cnt\":100," + "\"max\":100,\"min\":1,\"stddev\":28.870000}," + "\"name\":\"hit_rate\",\"tags\":" + "{\"app_name\":\"maat\"}}"; + + struct fieldstat_instance * instance = NULL; + + instance = fieldstat_instance_new("maat"); + fieldstat_set_line_protocol_server(instance, "127.0.0.1", 8700); + + metric_id = fieldstat_register_summary(instance, "hit_rate", NULL, 0, + quantiles, 1, 100, 2, 0); + EXPECT_EQ(0, metric_id); + fieldstat_instance_start(instance); + system("cat /dev/null > /tmp/metrics.out"); + sleep(1); + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 1); + } + sleep(2); + + fp = fopen(telegraf_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + cjson_metric = cJSON_Parse(read_line); + EXPECT_NE(nullptr, cjson_metric); + cJSON_DeleteItemFromObject(cjson_metric, "timestamp"); + + cjson_tags = cJSON_GetObjectItem(cjson_metric, "tags"); + EXPECT_NE(nullptr, cjson_tags); + cJSON_DeleteItemFromObject(cjson_tags, "host"); + cjson_metric_str = cJSON_PrintUnformatted(cjson_metric); + EXPECT_NE(nullptr, cjson_metric_str); + if(cjson_metric_str) + { + EXPECT_STREQ(compared_data, cjson_metric_str); + free(cjson_metric_str); + cjson_metric_str = NULL; + } + cJSON_Delete(cjson_metric); + n_line++; + } + fclose(fp); + EXPECT_EQ(1, n_line); + + fieldstat_instance_free(instance); +} + +TEST(FeildStatOutput, SummaryOutputPrometheus) +{ + int metric_id = -1; + const char * quantiles = "0.1,0.5,0.8,0.9,0.95,0.99"; + + + const char *prometheus_file = "/tmp/prometheus.txt"; + FILE *fp; + char read_line[2048] = {0}; + int n_line = 0; + const char *compared_p10 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.10\"} 10\n"; + const char *compared_p50 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.50\"} 50\n"; + const char *compared_p80 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.80\"} 80\n"; + const char *compared_p90 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.90\"} 90\n"; + const char *compared_p95 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.95\"} 95\n"; + const char *compared_p99 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.99\"} 99\n"; + const char *compared_cnt = "maat_hit_rate_count{app_name=\"maat\"} 100\n"; + const char *compared_sum = "maat_hit_rate_sum{app_name=\"maat\"} 5050\n"; + + struct fieldstat_instance * instance = NULL; + + instance = fieldstat_instance_new("maat"); + fieldstat_global_enable_prometheus_endpoint(9023, NULL); + fieldstat_enable_prometheus_output(instance); + metric_id = fieldstat_register_summary(instance, "hit_rate", NULL, 0, + quantiles, 1, 100, 2, 0); + EXPECT_EQ(0, metric_id); + fieldstat_instance_start(instance); + system("cat /dev/null > /tmp/prometheus.txt"); + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 1); + } + system("curl -s http://127.0.0.1:9023/metrics -o /tmp/prometheus.txt"); + + + fp = fopen(prometheus_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + switch(n_line) + { + case 0: + EXPECT_STREQ(compared_p10, read_line); + break; + case 1: + EXPECT_STREQ(compared_p50, read_line); + break; + case 2: + EXPECT_STREQ(compared_p80, read_line); + break; + case 3: + EXPECT_STREQ(compared_p90, read_line); + break; + case 4: + EXPECT_STREQ(compared_p95, read_line); + break; + case 5: + EXPECT_STREQ(compared_p99, read_line); + break; + case 6: + EXPECT_STREQ(compared_cnt, read_line); + break; + case 7: + EXPECT_STREQ(compared_sum, read_line); + break; + default: + break; + } + n_line++; + } + fclose(fp); + EXPECT_EQ(8, n_line); + fieldstat_global_disable_prometheus_endpoint(); + fieldstat_instance_free(instance); +} + +TEST(FeildStatOutput, HistogramOutputFile) +{ + int metric_id = -1; + const char *upper_inclusive_bounds = "10,50,80,90,95,99"; + const char *output_file = "/tmp/fieldstat.txt"; + const char *compared_data_line = "hit_rate 10 50" + " 80 90 95" + " 99 100 1" + " 50.50 28.87 100\n"; + FILE *fp; + char read_line[2048] = {0}; + int n_line = 0; + + struct fieldstat_instance *instance = fieldstat_instance_new("maat"); + fieldstat_set_local_output(instance, "/tmp/fieldstat.txt", "default"); + + metric_id = fieldstat_register_histogram(instance, "hit_rate", NULL, 0, + upper_inclusive_bounds, 1, 100, 2, 0); + EXPECT_EQ(0, metric_id); + fieldstat_instance_start(instance); + sleep(1); + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 1); + } + sleep(2); + + fp = fopen(output_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + if(n_line == 2) + { + EXPECT_STREQ(compared_data_line, read_line); + } + n_line++; + } + fclose(fp); + EXPECT_EQ(4, n_line); + fieldstat_instance_free(instance); +} + +TEST(FeildStatOutput, HistogramOutputLineProtocol) +{ + int metric_id = -1; + const char *upper_inclusive_bounds = "10,50,80,90,95,99"; + + const char *telegraf_file = "/tmp/metrics.out"; + FILE *fp; + char read_line[2048] = {0}; + int n_line = 0; + cJSON *cjson_metric = NULL; + cJSON *cjson_tags = NULL; + char *cjson_metric_str = NULL; + const char *compared_data = "{\"fields\":{\"avg\":50.500000,\"cnt\":100," + "\"le10\":10,\"le50\":50,\"le80\":80," + "\"le90\":90,\"le95\":95,\"le99\":99," + "\"max\":100,\"min\":1,\"stddev\":28.870000}," + "\"name\":\"hit_rate\",\"tags\":" + "{\"app_name\":\"maat\"}}"; + + struct fieldstat_instance * instance = NULL; + + instance = fieldstat_instance_new("maat"); + fieldstat_set_line_protocol_server(instance, "127.0.0.1", 8700); + + metric_id = fieldstat_register_histogram(instance, "hit_rate", NULL, 0, + upper_inclusive_bounds, 1, 100, 2, 0); + EXPECT_EQ(0, metric_id); + fieldstat_instance_start(instance); + system("cat /dev/null > /tmp/metrics.out"); + sleep(1); + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 1); + } + sleep(2); + + fp = fopen(telegraf_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + cjson_metric = cJSON_Parse(read_line); + EXPECT_NE(nullptr, cjson_metric); + cJSON_DeleteItemFromObject(cjson_metric, "timestamp"); + + cjson_tags = cJSON_GetObjectItem(cjson_metric, "tags"); + EXPECT_NE(nullptr, cjson_tags); + cJSON_DeleteItemFromObject(cjson_tags, "host"); + cjson_metric_str = cJSON_PrintUnformatted(cjson_metric); + EXPECT_NE(nullptr, cjson_metric_str); + if(cjson_metric_str) + { + EXPECT_STREQ(compared_data, cjson_metric_str); + free(cjson_metric_str); + cjson_metric_str = NULL; + } + cJSON_Delete(cjson_metric); + n_line++; + } + fclose(fp); + EXPECT_EQ(1, n_line); + + fieldstat_instance_free(instance); +} + + +TEST(FeildStatOutput, HistogramOutputPrometheus) +{ + int metric_id = -1; + const char *upper_inclusive_bounds = "10,50,80,90,95,99"; + + const char *prometheus_file = "/tmp/prometheus.txt"; + FILE *fp; + char read_line[2048] = {0}; + int n_line = 0; + const char *compared_le10 = "maat_hit_rate_bucket{app_name=\"maat\",le=\"10.00\"} 10\n"; + const char *compared_le50 = "maat_hit_rate_bucket{app_name=\"maat\",le=\"50.00\"} 50\n"; + const char *compared_le80 = "maat_hit_rate_bucket{app_name=\"maat\",le=\"80.00\"} 80\n"; + const char *compared_le90 = "maat_hit_rate_bucket{app_name=\"maat\",le=\"90.00\"} 90\n"; + const char *compared_le95 = "maat_hit_rate_bucket{app_name=\"maat\",le=\"95.00\"} 95\n"; + const char *compared_le99 = "maat_hit_rate_bucket{app_name=\"maat\",le=\"99.00\"} 99\n"; + const char *compared_cnt = "maat_hit_rate_count{app_name=\"maat\"} 100\n"; + const char *compared_sum = "maat_hit_rate_sum{app_name=\"maat\"} 5050\n"; + + struct fieldstat_instance * instance = NULL; + + instance = fieldstat_instance_new("maat"); + fieldstat_global_enable_prometheus_endpoint(9024, NULL); + fieldstat_enable_prometheus_output(instance); + metric_id = fieldstat_register_histogram(instance, "hit_rate", NULL, 0, + upper_inclusive_bounds, 1, 100, 2, 0); + EXPECT_EQ(0, metric_id); + fieldstat_instance_start(instance); + sleep(1); + system("cat /dev/null > /tmp/prometheus.txt"); + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 1); + } + system("curl -s http://127.0.0.1:9024/metrics -o /tmp/prometheus.txt"); + + + fp = fopen(prometheus_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + switch(n_line) + { + case 0: + EXPECT_STREQ(compared_le10, read_line); + break; + case 1: + EXPECT_STREQ(compared_le50, read_line); + break; + case 2: + EXPECT_STREQ(compared_le80, read_line); + break; + case 3: + EXPECT_STREQ(compared_le90, read_line); + break; + case 4: + EXPECT_STREQ(compared_le95, read_line); + break; + case 5: + EXPECT_STREQ(compared_le99, read_line); + break; + case 6: + EXPECT_STREQ(compared_cnt, read_line); + break; + case 7: + EXPECT_STREQ(compared_sum, read_line); + break; + default: + break; + } + n_line++; + } + fclose(fp); + EXPECT_EQ(8, n_line); + fieldstat_global_disable_prometheus_endpoint(); + fieldstat_instance_free(instance); +} + + +TEST(FeildStatOutput, SummaryOutputFileCurrent) +{ + int metric_id = -1; + const char *quantiles = "0.1,0.5,0.8,0.9,0.95,0.99"; + const char *output_file = "/tmp/fieldstat.txt"; + const char *compared_data_line = "hit_rate 20 100" + " 160 180 190" + " 198 200 1" + " 100.50 57.73 200\n"; + FILE *fp; + char read_line[2048] = {0}; + int n_line = 0; + + struct fieldstat_instance *instance = fieldstat_instance_new("maat"); + fieldstat_set_local_output(instance, "/tmp/fieldstat.txt", "default"); + + metric_id = fieldstat_register_summary(instance, "hit_rate", NULL, 0, + quantiles, 1, 200, 2, 0); + EXPECT_EQ(0, metric_id); + fieldstat_instance_start(instance); + sleep(1); + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 1); + } + sleep(2); + for(int i = 0; i < 100; i++) + { + fieldstat_value_set(instance, metric_id, i + 101); + } + sleep(2); + fp = fopen(output_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + if(n_line == 2) + { + EXPECT_STREQ(compared_data_line, read_line); + } + n_line++; + } + fclose(fp); + EXPECT_EQ(4, n_line); + fieldstat_instance_free(instance); +} + +TEST(FeildStatOutput, SummaryOutputFileChange) +{ + int metric_id = -1; + const char *quantiles = "0.1,0.5,0.8,0.9,0.95,0.99"; + const char *output_file = "/tmp/fieldstat.txt"; + const char *compared_data_line = "hit_rate 110 150" + " 180 190 195" + " 199 200 101" + " 150.50 28.87 100\n"; + FILE *fp; + char read_line[2048] = {0}; + int n_line = 0; + + struct fieldstat_instance *instance = fieldstat_instance_new("maat"); + fieldstat_set_local_output(instance, "/tmp/fieldstat.txt", "default"); + + metric_id = fieldstat_register_summary(instance, "hit_rate", NULL, 0, + quantiles, 1, 200, 2, 1); + EXPECT_EQ(0, metric_id); + fieldstat_instance_start(instance); + sleep(1); + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 1); + } + sleep(2); + for(int i = 0; i < 100; i++) + { + fieldstat_value_set(instance, metric_id, i + 101); + } + sleep(2); + fp = fopen(output_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + if(n_line == 2) + { + EXPECT_STREQ(compared_data_line, read_line); + } + n_line++; + } + fclose(fp); + EXPECT_EQ(4, n_line); + fieldstat_instance_free(instance); +} + +TEST(FeildStatOutput, SummaryOutputLineProtocolCurrent) +{ + int metric_id = -1; + const char * quantiles = "0.1,0.5,0.8,0.9,0.95,0.99"; + + const char *telegraf_file = "/tmp/metrics.out"; + FILE *fp; + char read_line[2048] = {0}; + int n_line = 0; + cJSON *cjson_metric = NULL; + cJSON *cjson_tags = NULL; + char *cjson_metric_str = NULL; + + const char *compared_line0 = "{\"fields\":{\"P10\":10,\"P50\":50," + "\"P80\":80,\"P90\":90,\"P95\":95," + "\"P99\":99,\"avg\":50.500000," + "\"cnt\":100,\"max\":100,\"min\":1," + "\"stddev\":28.870000},\"name\":" + "\"hit_rate\",\"tags\":{\"app_name\"" + ":\"maat\"}}"; + + const char *compared_line1 = "{\"fields\":{\"P10\":20,\"P50\":100," + "\"P80\":160,\"P90\":180,\"P95\":190," + "\"P99\":198,\"avg\":100.500000," + "\"cnt\":200,\"max\":200,\"min\":1," + "\"stddev\":57.730000},\"name\":" + "\"hit_rate\",\"tags\":{\"app_name\"" + ":\"maat\"}}"; + + + + struct fieldstat_instance * instance = NULL; + + instance = fieldstat_instance_new("maat"); + fieldstat_set_line_protocol_server(instance, "127.0.0.1", 8700); + + metric_id = fieldstat_register_summary(instance, "hit_rate", NULL, 0, + quantiles, 1, 100, 2, 0); + EXPECT_EQ(0, metric_id); + fieldstat_instance_start(instance); + system("cat /dev/null > /tmp/metrics.out"); + sleep(1); + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 1); + } + sleep(2); + + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 101); + } + sleep(2); + + fp = fopen(telegraf_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + cjson_metric = cJSON_Parse(read_line); + EXPECT_NE(nullptr, cjson_metric); + cJSON_DeleteItemFromObject(cjson_metric, "timestamp"); + + cjson_tags = cJSON_GetObjectItem(cjson_metric, "tags"); + EXPECT_NE(nullptr, cjson_tags); + cJSON_DeleteItemFromObject(cjson_tags, "host"); + cjson_metric_str = cJSON_PrintUnformatted(cjson_metric); + EXPECT_NE(nullptr, cjson_metric_str); + if(cjson_metric_str) + { + if(n_line == 0) + { + EXPECT_STREQ(compared_line0, cjson_metric_str); + } + if(n_line == 1) + { + EXPECT_STREQ(compared_line1, cjson_metric_str); + } + free(cjson_metric_str); + cjson_metric_str = NULL; + } + cJSON_Delete(cjson_metric); + n_line++; + } + fclose(fp); + EXPECT_EQ(2, n_line); + + fieldstat_instance_free(instance); +} + +TEST(FeildStatOutput, SummaryOutputLineProtocolChange) +{ + int metric_id = -1; + const char * quantiles = "0.1,0.5,0.8,0.9,0.95,0.99"; + + const char *telegraf_file = "/tmp/metrics.out"; + FILE *fp; + char read_line[2048] = {0}; + int n_line = 0; + cJSON *cjson_metric = NULL; + cJSON *cjson_tags = NULL; + char *cjson_metric_str = NULL; + + const char *compared_line0 = "{\"fields\":{\"P10\":10,\"P50\":50," + "\"P80\":80,\"P90\":90,\"P95\":95," + "\"P99\":99,\"avg\":50.500000," + "\"cnt\":100,\"max\":100,\"min\":1," + "\"stddev\":28.870000},\"name\":" + "\"hit_rate\",\"tags\":{\"app_name\"" + ":\"maat\"}}"; + + const char *compared_line1 = "{\"fields\":{\"P10\":110,\"P50\":150," + "\"P80\":180,\"P90\":190,\"P95\":195," + "\"P99\":199,\"avg\":150.500000," + "\"cnt\":100,\"max\":200,\"min\":101," + "\"stddev\":28.870000},\"name\":" + "\"hit_rate\",\"tags\":{\"app_name\"" + ":\"maat\"}}"; + + + + struct fieldstat_instance * instance = NULL; + + instance = fieldstat_instance_new("maat"); + fieldstat_set_line_protocol_server(instance, "127.0.0.1", 8700); + + metric_id = fieldstat_register_summary(instance, "hit_rate", NULL, 0, + quantiles, 1, 100, 2, 1); + EXPECT_EQ(0, metric_id); + fieldstat_instance_start(instance); + system("cat /dev/null > /tmp/metrics.out"); + sleep(1); + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 1); + } + sleep(2); + + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 101); + } + sleep(2); + + fp = fopen(telegraf_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + cjson_metric = cJSON_Parse(read_line); + EXPECT_NE(nullptr, cjson_metric); + cJSON_DeleteItemFromObject(cjson_metric, "timestamp"); + + cjson_tags = cJSON_GetObjectItem(cjson_metric, "tags"); + EXPECT_NE(nullptr, cjson_tags); + cJSON_DeleteItemFromObject(cjson_tags, "host"); + cjson_metric_str = cJSON_PrintUnformatted(cjson_metric); + EXPECT_NE(nullptr, cjson_metric_str); + if(cjson_metric_str) + { + if(n_line == 0) + { + EXPECT_STREQ(compared_line0, cjson_metric_str); + } + if(n_line == 1) + { + EXPECT_STREQ(compared_line1, cjson_metric_str); + } + free(cjson_metric_str); + cjson_metric_str = NULL; + } + cJSON_Delete(cjson_metric); + n_line++; + } + fclose(fp); + EXPECT_EQ(2, n_line); + + fieldstat_instance_free(instance); +} + +TEST(FeildStatOutput, SummaryOutputPrometheusCurrent) +{ + int metric_id = -1; + const char * quantiles = "0.1,0.5,0.8,0.9,0.95,0.99"; + + const char *prometheus_file = "/tmp/prometheus.txt"; + FILE *fp; + char read_line[2048] = {0}; + int n_line = 0; + const char *compared_p10_0 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.10\"} 10\n"; + const char *compared_p50_0 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.50\"} 50\n"; + const char *compared_p80_0 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.80\"} 80\n"; + const char *compared_p90_0 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.90\"} 90\n"; + const char *compared_p95_0 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.95\"} 95\n"; + const char *compared_p99_0 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.99\"} 99\n"; + const char *compared_cnt_0 = "maat_hit_rate_count{app_name=\"maat\"} 100\n"; + const char *compared_sum_0 = "maat_hit_rate_sum{app_name=\"maat\"} 5050\n"; + const char *compared_p10_1 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.10\"} 20\n"; + const char *compared_p50_1 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.50\"} 100\n"; + const char *compared_p80_1 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.80\"} 160\n"; + const char *compared_p90_1 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.90\"} 180\n"; + const char *compared_p95_1 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.95\"} 190\n"; + const char *compared_p99_1 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.99\"} 198\n"; + const char *compared_cnt_1 = "maat_hit_rate_count{app_name=\"maat\"} 200\n"; + const char *compared_sum_1 = "maat_hit_rate_sum{app_name=\"maat\"} 20100\n"; + + struct fieldstat_instance * instance = NULL; + + instance = fieldstat_instance_new("maat"); + fieldstat_global_enable_prometheus_endpoint(9026, NULL); + fieldstat_enable_prometheus_output(instance); + metric_id = fieldstat_register_summary(instance, "hit_rate", NULL, 0, + quantiles, 1, 100, 2, 0); + EXPECT_EQ(0, metric_id); + fieldstat_instance_start(instance); + system("cat /dev/null > /tmp/prometheus.txt"); + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 1); + } + system("curl -s http://127.0.0.1:9026/metrics -o /tmp/prometheus.txt"); + + fp = fopen(prometheus_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + switch(n_line) + { + case 0: + EXPECT_STREQ(compared_p10_0, read_line); + break; + case 1: + EXPECT_STREQ(compared_p50_0, read_line); + break; + case 2: + EXPECT_STREQ(compared_p80_0, read_line); + break; + case 3: + EXPECT_STREQ(compared_p90_0, read_line); + break; + case 4: + EXPECT_STREQ(compared_p95_0, read_line); + break; + case 5: + EXPECT_STREQ(compared_p99_0, read_line); + break; + case 6: + EXPECT_STREQ(compared_cnt_0, read_line); + break; + case 7: + EXPECT_STREQ(compared_sum_0, read_line); + break; + default: + break; + } + n_line++; + } + fclose(fp); + EXPECT_EQ(8, n_line); + + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 101); + } + sleep(1); + n_line = 0; + system("curl -s http://127.0.0.1:9026/metrics -o /tmp/prometheus.txt"); + fp = fopen(prometheus_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + switch(n_line) + { + case 0: + EXPECT_STREQ(compared_p10_1, read_line); + break; + case 1: + EXPECT_STREQ(compared_p50_1, read_line); + break; + case 2: + EXPECT_STREQ(compared_p80_1, read_line); + break; + case 3: + EXPECT_STREQ(compared_p90_1, read_line); + break; + case 4: + EXPECT_STREQ(compared_p95_1, read_line); + break; + case 5: + EXPECT_STREQ(compared_p99_1, read_line); + break; + case 6: + EXPECT_STREQ(compared_cnt_1, read_line); + break; + case 7: + EXPECT_STREQ(compared_sum_1, read_line); + break; + default: + break; + } + n_line++; + } + fclose(fp); + EXPECT_EQ(8, n_line); + + fieldstat_global_disable_prometheus_endpoint(); + fieldstat_instance_free(instance); +} + +TEST(FeildStatOutput, SummaryOutputPrometheusChange) +{ + int metric_id = -1; + const char * quantiles = "0.1,0.5,0.8,0.9,0.95,0.99"; + + const char *prometheus_file = "/tmp/prometheus.txt"; + FILE *fp; + char read_line[2048] = {0}; + int n_line = 0; + const char *compared_p10_0 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.10\"} 10\n"; + const char *compared_p50_0 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.50\"} 50\n"; + const char *compared_p80_0 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.80\"} 80\n"; + const char *compared_p90_0 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.90\"} 90\n"; + const char *compared_p95_0 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.95\"} 95\n"; + const char *compared_p99_0 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.99\"} 99\n"; + const char *compared_cnt_0 = "maat_hit_rate_count{app_name=\"maat\"} 100\n"; + const char *compared_sum_0 = "maat_hit_rate_sum{app_name=\"maat\"} 5050\n"; + const char *compared_p10_1 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.10\"} 20\n"; + const char *compared_p50_1 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.50\"} 100\n"; + const char *compared_p80_1 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.80\"} 160\n"; + const char *compared_p90_1 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.90\"} 180\n"; + const char *compared_p95_1 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.95\"} 190\n"; + const char *compared_p99_1 = "maat_hit_rate{app_name=\"maat\",quantile=\"0.99\"} 198\n"; + const char *compared_cnt_1 = "maat_hit_rate_count{app_name=\"maat\"} 200\n"; + const char *compared_sum_1 = "maat_hit_rate_sum{app_name=\"maat\"} 20100\n"; + + struct fieldstat_instance * instance = NULL; + + instance = fieldstat_instance_new("maat"); + fieldstat_global_enable_prometheus_endpoint(9027, NULL); + fieldstat_enable_prometheus_output(instance); + metric_id = fieldstat_register_summary(instance, "hit_rate", NULL, 0, + quantiles, 1, 100, 2, 1); + EXPECT_EQ(0, metric_id); + fieldstat_instance_start(instance); + system("cat /dev/null > /tmp/prometheus.txt"); + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 1); + } + system("curl -s http://127.0.0.1:9027/metrics -o /tmp/prometheus.txt"); + + fp = fopen(prometheus_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + switch(n_line) + { + case 0: + EXPECT_STREQ(compared_p10_0, read_line); + break; + case 1: + EXPECT_STREQ(compared_p50_0, read_line); + break; + case 2: + EXPECT_STREQ(compared_p80_0, read_line); + break; + case 3: + EXPECT_STREQ(compared_p90_0, read_line); + break; + case 4: + EXPECT_STREQ(compared_p95_0, read_line); + break; + case 5: + EXPECT_STREQ(compared_p99_0, read_line); + break; + case 6: + EXPECT_STREQ(compared_cnt_0, read_line); + break; + case 7: + EXPECT_STREQ(compared_sum_0, read_line); + break; + default: + break; + } + n_line++; + } + fclose(fp); + EXPECT_EQ(8, n_line); + + for(int i = 0; i < 100; i ++) + { + fieldstat_value_set(instance, metric_id, i + 101); + } + sleep(1); + n_line = 0; + system("curl -s http://127.0.0.1:9027/metrics -o /tmp/prometheus.txt"); + fp = fopen(prometheus_file, "r"); + EXPECT_NE(nullptr, fp); + while(!feof(fp)) + { + if(NULL == fgets(read_line, sizeof(read_line), fp)) + { + continue; + } + switch(n_line) + { + case 0: + EXPECT_STREQ(compared_p10_1, read_line); + break; + case 1: + EXPECT_STREQ(compared_p50_1, read_line); + break; + case 2: + EXPECT_STREQ(compared_p80_1, read_line); + break; + case 3: + EXPECT_STREQ(compared_p90_1, read_line); + break; + case 4: + EXPECT_STREQ(compared_p95_1, read_line); + break; + case 5: + EXPECT_STREQ(compared_p99_1, read_line); + break; + case 6: + EXPECT_STREQ(compared_cnt_1, read_line); + break; + case 7: + EXPECT_STREQ(compared_sum_1, read_line); + break; + default: + break; + } + n_line++; + } + fclose(fp); + EXPECT_EQ(8, n_line); + + fieldstat_global_disable_prometheus_endpoint(); + fieldstat_instance_free(instance); +} int main(int argc, char *argv[]) { |
