summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfumingwei <[email protected]>2023-03-09 18:34:03 +0800
committerfumingwei <[email protected]>2023-03-09 18:34:14 +0800
commitcd0ecc40a989ac8e123039b433469ffc1f1c6fd4 (patch)
treed25712be51266ac89da07b779c661a5521fc799c
parent134c92609e3b1421b6af8b8317997e2be1018cb5 (diff)
feature:将structfieldstat_instance中的变量名app_name改为name,fieldstat_instance_create函数新增name参数
-rw-r--r--inc/fieldstat.h14
-rw-r--r--src/fieldstat.cpp56
-rw-r--r--test/fs2_test.cpp7
3 files changed, 35 insertions, 42 deletions
diff --git a/inc/fieldstat.h b/inc/fieldstat.h
index 3273de5..cfce68f 100644
--- a/inc/fieldstat.h
+++ b/inc/fieldstat.h
@@ -1,7 +1,5 @@
#pragma once
#include <stdio.h>
-#include <time.h>
-#include <pthread.h>
#ifdef __cplusplus
extern "C"
{
@@ -21,11 +19,12 @@ struct metric_id_list
int id[64]; // define marco
};
-/*
- * @param listen_port
- * @param url if NULL use "/metrics" default
- * */
-struct fieldstat_instance * fieldstat_instance_create(void);
+/**
+ * @param name The instance name.
+ * @return Instance id. NULL is failed, Not NULL is successd.
+ * the output.
+ */
+struct fieldstat_instance * fieldstat_instance_create(const char *name);
int fieldstat_global_enable_prometheus_endpoint(unsigned short listen_port, const char *url);
int fieldstat_set_prometheus_output(struct fieldstat_instance *instance);
int fieldstat_set_statsd_server(struct fieldstat_instance *instance, const char *ip, unsigned short port);
@@ -33,7 +32,6 @@ int fieldstat_set_line_protocol_server(struct fieldstat_instance *instance, cons
int fieldstat_set_local_output(struct fieldstat_instance *instance, const char *filename, const char *format);//format could be "json" or "default"
int fieldstat_backgroud_thead_disable(struct fieldstat_instance *instance);
int fieldstat_set_output_interval(struct fieldstat_instance *instance, int seconds);//default is 2 seconds
-int fieldstat_set_app_name(struct fieldstat_instance *instance, const char *app_name); //app_name must set delete
/*
diff --git a/src/fieldstat.cpp b/src/fieldstat.cpp
index b663837..61aa774 100644
--- a/src/fieldstat.cpp
+++ b/src/fieldstat.cpp
@@ -66,6 +66,7 @@ static __attribute__((__used__)) const char * GIT_VERSION_UNKNOWN = NULL;
#define STR_LEN_1024 1024
#define NUM_MAX_METRIC_IN_TABLE 1024
#define HISTOGRAM_WIDTH 10
+#define INSTANCE_NAME_LEN 32
enum field_op
@@ -78,6 +79,7 @@ enum field_op
struct fieldstat_instance
{
+ char name[LEN_APP_NAME];
//char *statsd_server_ip;
char statsd_server_str_ip[LEN_IP_MAX];
unsigned int statsd_server_ip;
@@ -95,7 +97,6 @@ struct fieldstat_instance
int background_thread_disable; //default:1
int output_interval_s; //default:2
- char app_name[LEN_APP_NAME];
int running;
struct metric_t **metric_block_list[BLOCK_LIST_SIZE];
@@ -126,6 +127,8 @@ struct fieldstat_instance
char line_protocol_send_buff[UDP_PAYLOAD_SIZE];
size_t line_protocol_send_buff_offset;
int line_protocol_socket;
+ pthread_mutex_t output_lock;
+
FILE* fp;
};
@@ -363,23 +366,6 @@ static int send_udp(int sd, unsigned int dest_ip, unsigned short dest_port, cons
return 0;
}
-
-
-int fieldstat_set_app_name(struct fieldstat_instance *instance, const char *app_name)
-{
- int len_app_name = strlen(app_name);
- if(instance->running == 1)
- {
- return -1;
- }
- if(len_app_name <= 0 && len_app_name >= LEN_APP_NAME )
- {
- return -1;
- }
- strncpy(instance->app_name,(char*)app_name, len_app_name);
- return 0;
-}
-
int fieldstat_set_output_interval(struct fieldstat_instance *instance, int seconds)
{
if(instance->running == 1 || seconds <= 0 )
@@ -653,7 +639,7 @@ static void output_line_protocol_table(struct fieldstat_instance *instance)
field_set_buff_append += snprintf(field_set_buff_append, sizeof(field_set_buff) - (field_set_buff - field_set_buff), "%s=%lld,", metric->table_column_name, value);
}
- tag_set_buff_append += snprintf(tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff), ",app_name=%s", instance->app_name);
+ tag_set_buff_append += snprintf(tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff), ",app_name=%s", instance->name);
output_line_protocol_tag_set_buf(metric, tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff));
if(field_set_buff_append - field_set_buff > 0)
@@ -699,7 +685,7 @@ int line_protocol_output(struct fieldstat_instance *instance)
if(value != 0)
{
snprintf(field_set_buff, UDP_PAYLOAD_SIZE, "%s=%lld", metric->field_name, value);
- tag_set_buff_append += snprintf(tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff), ",app_name=%s", instance->app_name);
+ tag_set_buff_append += snprintf(tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff), ",app_name=%s", instance->name);
/*
for(j = 0; j < (int)metric->n_tag; j++)
{
@@ -717,7 +703,7 @@ int line_protocol_output(struct fieldstat_instance *instance)
if(value != 0)
{
snprintf(field_set_buff, UDP_PAYLOAD_SIZE, "%s=%lld", metric->field_name, value);
- tag_set_buff_append += snprintf(tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff), ",app_name=%s", instance->app_name);
+ tag_set_buff_append += snprintf(tag_set_buff_append, sizeof(tag_set_buff) - (tag_set_buff_append - tag_set_buff), ",app_name=%s", instance->name);
/*
for(j = 0; j < (int)metric->n_tag; j++)
{
@@ -1269,11 +1255,16 @@ void fieldstat_instance_start(struct fieldstat_instance *instance)
//append instance to prometheus output
}
-struct fieldstat_instance * fieldstat_instance_create(void)
+struct fieldstat_instance * fieldstat_instance_create(const char *name)
{
struct fieldstat_instance *instance = (struct fieldstat_instance *)calloc(sizeof(struct fieldstat_instance),1);
- strcpy(instance->app_name, "?");
+ if(strlen(name) >= INSTANCE_NAME_LEN)
+ {
+ return NULL;
+ }
+
+ strcpy(instance->name, name);
instance->running = 0;
instance->output_interval_s = 2; //default 2s
instance->background_thread_disable = 0;
@@ -1402,23 +1393,32 @@ struct metric_id_list fieldstat_register_table_metrics(struct fieldstat_instance
/*
* ret = -1, output not match fieldstat instance
+ output:
+ /metrics
+ /sapp
+ /tfe
+ ...
* ret >=0 && ret < instance_cnt output sepecify fieldstat instance
+ output:
+ http://127.0.0.1:9273/sapp content
* ret = instance_cnt output all fieldstat instance
+ output:
+ http://127.0.0.1:9273/metrics content
*/
static int prometheus_get_fs_instance_id(struct prometheus_endpoint_instance *global_prometheus_output, char *uri, int uri_len)
{
int i = 0;
if(uri_len == (int)strlen(global_prometheus_output->url_path) &&
- 0 == memcmp(uri, global_prometheus_output->url_path, strlen(global_prometheus_output->url_path)))
+ 0 == memcmp(uri, global_prometheus_output->url_path, strlen(global_prometheus_output->url_path)))
{
return global_prometheus_output->fs_instance_cnt;
}
for( i = 0; i < global_prometheus_output->fs_instance_cnt; i++)
{
- if(uri_len - 1 == (int)strlen(global_prometheus_output->fs_instance[i]->app_name) &&
- 0 == memcmp( uri + 1, global_prometheus_output->fs_instance[i]->app_name, strlen(global_prometheus_output->fs_instance[i]->app_name)))
+ if(uri_len - 1 == (int)strlen(global_prometheus_output->fs_instance[i]->name) &&
+ 0 == memcmp( uri + 1, global_prometheus_output->fs_instance[i]->name, strlen(global_prometheus_output->fs_instance[i]->name)))
{
return i;
}
@@ -1445,7 +1445,7 @@ static void prometheus_output_uri_list(struct prometheus_endpoint_instance *prom
for(i = 0; i < prometheus_output->fs_instance_cnt; i++)
{
- payload_append_position += snprintf(payload_append_position, payload_len - (payload_append_position - payload),"\t/%s\n", fs_instance[i]->app_name);
+ payload_append_position += snprintf(payload_append_position, payload_len - (payload_append_position - payload),"\t/%s\n", fs_instance[i]->name);
}
response = http_response_init();
@@ -1593,7 +1593,7 @@ static int prometheus_get_instance_metric_playload(struct fieldstat_instance *in
}
- str_unescape(instance->app_name, app_name, sizeof(app_name));
+ str_unescape(instance->name, app_name, sizeof(app_name));
for(i = 0; i < instance->metric_cnt; i++)
{
diff --git a/test/fs2_test.cpp b/test/fs2_test.cpp
index 03b398a..3c16f29 100644
--- a/test/fs2_test.cpp
+++ b/test/fs2_test.cpp
@@ -52,12 +52,7 @@ int main(int argc, char *argv[])
fieldstat_global_enable_prometheus_endpoint(9010, "/metrics");
- test_instance = fieldstat_instance_create();
- ret = fieldstat_set_app_name(test_instance, "test");
- if(ret == -1)
- {
- printf("set fieldstat app_name failed!\n");
- }
+ test_instance = fieldstat_instance_create("test");
ret = fieldstat_set_local_output(test_instance, "./test.fs", "default");
if(ret == -1)