diff --git a/ci/travis.sh b/ci/travis.sh index fc12f5b..ba9f260 100644 --- a/ci/travis.sh +++ b/ci/travis.sh @@ -34,8 +34,7 @@ env | sort # Install dependency from YUM -yum install -y libcjson-devel libmaatframe-devel libMESA_field_stat2-devel libMESA_handle_logger-devel libbreakpad_mini-devel.x86_64 -yum install -y libMESA_prof_load-devel libwiredcfg-devel libWiredLB-devel libuuid-devel +yum install -y libcjson-devel libmaatframe-devel libfieldstat4-devel libMESA_handle_logger-devel libbreakpad_mini-devel.x86_64 libMESA_prof_load-devel libuuid-devel mkdir build || true cd build diff --git a/program/CMakeLists.txt b/program/CMakeLists.txt index c050ef3..d577127 100644 --- a/program/CMakeLists.txt +++ b/program/CMakeLists.txt @@ -7,4 +7,4 @@ add_executable(certstore src/cert_store.cpp src/cert_session.cpp) target_include_directories(certstore PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include) target_include_directories(certstore PRIVATE ${SYSTEMD_INCLUDE_DIRS}) -target_link_libraries(certstore dl common maatframe openssl-ssl-static openssl-crypto-static pthread uuid libevent-static MESA_prof_load MESA_handle_logger hiredis-static MESA_field_stat cjson ${SYSTEMD_LIBRARIES}) +target_link_libraries(certstore dl common maatframe openssl-ssl-static openssl-crypto-static pthread uuid libevent-static MESA_prof_load MESA_handle_logger hiredis-static fieldstat4 cjson ${SYSTEMD_LIBRARIES}) diff --git a/program/src/cert_session.cpp b/program/src/cert_session.cpp index 4db571f..be58b8a 100644 --- a/program/src/cert_session.cpp +++ b/program/src/cert_session.cpp @@ -38,7 +38,7 @@ #include #include -#include +#include #include #include @@ -69,23 +69,19 @@ enum keypair_action KEYPAIR_ACTION_MAX }; -struct fs_stats_t{ - int field_id[KEYPAIR_ACTION_MAX]; - int line_ids[KEYPAIR_ACTION_MAX]; - screen_stat_handle_t handle; - char histogram_bins[256]; - enum field_calc_algo favorite; +struct fs_stats_t +{ + int column_ids[KEYPAIR_ACTION_MAX]; + int histogram_column_ids[KEYPAIR_ACTION_MAX]; + struct fieldstat_easy *fieldstat; }; static struct fs_stats_t g_FP_instance = { - .field_id = {0}, - .line_ids = {0}, - .handle = NULL, - .histogram_bins = {0}, + .column_ids = {0}, + .histogram_column_ids = {0}, + .fieldstat = NULL, }; -static const char* FP_HISTOGRAM_BINS="0.50,0.80,0.9,0.95,0.99"; - #define sizeof_seconds(x) (x * 24 * 60 * 60) #define half_hours(x) (x * 1800) @@ -146,16 +142,16 @@ static x509_algo_name algo_name[] = { {"secp384r1",NID_secp384r1} }; -static void fp_stat_latency(struct timespec create_time, int keys) +static void fp_stat_latency(struct timespec create_time, int thread_id, int keys) { struct timespec end; long long jiffies_ms=0; clock_gettime(CLOCK_MONOTONIC,&end); - FS_operate(g_FP_instance.handle, g_FP_instance.line_ids[keys], 0, FS_OP_ADD, 1); + fieldstat_easy_counter_incrby(g_FP_instance.fieldstat, thread_id, g_FP_instance.column_ids[keys], NULL, 0, 1); jiffies_ms=(end.tv_sec-create_time.tv_sec)*1000000+(end.tv_nsec-create_time.tv_nsec)/1000; - FS_operate(g_FP_instance.handle, g_FP_instance.field_id[keys], 0, FS_OP_SET, jiffies_ms); - FS_operate(g_FP_instance.handle, g_FP_instance.field_id[KEYPAIR_ACTION_REQ], 0, FS_OP_SET, jiffies_ms); + fieldstat_easy_histogram_record(g_FP_instance.fieldstat, thread_id, g_FP_instance.histogram_column_ids[keys], NULL, 0, jiffies_ms); + fieldstat_easy_histogram_record(g_FP_instance.fieldstat, thread_id, g_FP_instance.histogram_column_ids[KEYPAIR_ACTION_REQ], NULL, 0, jiffies_ms); return; } @@ -961,9 +957,9 @@ static int redis_async_connect(struct event_base *base, struct redisAsyncContext return 0; } -static int evhttp_socket_send_error(struct evhttp_request *req, int error) +static int evhttp_socket_send_error(struct evhttp_request *req, int thread_id, int error) { - FS_operate(g_FP_instance.handle, g_FP_instance.line_ids[KEYPAIR_ACTION_ERR], 0, FS_OP_ADD, 1); + fieldstat_easy_counter_incrby(g_FP_instance.fieldstat, thread_id, g_FP_instance.column_ids[KEYPAIR_ACTION_ERR], NULL, 0, 1); evhttp_send_error(req, error, 0); return 0; } @@ -1244,12 +1240,12 @@ rediSyncCommand(redisContext *sync, struct http_request *request, char *odata, i switch (readBytes(reply->str)) { case '+' : mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Writing data(%s) to redis successfully", request->rkey); - fp_stat_latency(request->create_time, KEYPAIR_ACTION_SIGN); + fp_stat_latency(request->create_time, request->thread_id, KEYPAIR_ACTION_SIGN); evhttp_socket_send(evh_req, request->odata); goto free; case '$' : mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Writing data(%s) to redis failed", request->rkey); - fp_stat_latency(request->create_time, KEYPAIR_ACTION_SQL); + fp_stat_latency(request->create_time, request->thread_id, KEYPAIR_ACTION_SQL); if (g_cert_store->mode){ redisAsyncCommand(thread->cl_ctx, redis_reget_callback, request, "GET %s", request->rkey); }else{ @@ -1259,7 +1255,7 @@ rediSyncCommand(redisContext *sync, struct http_request *request, char *odata, i goto finish; default: mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "Read redis data(%s) return code failed", request->rkey); - evhttp_socket_send_error(request->evh_req, HTTP_NOTFOUND); + evhttp_socket_send_error(request->evh_req, request->thread_id, HTTP_NOTFOUND); goto free; } xret = 0; @@ -1351,7 +1347,7 @@ redis_clnt_pdu_send(struct http_request *request) X509_free(request->origin); request_destroy(request); mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Failed to sign certificate"); - evhttp_socket_send_error(request->evh_req, HTTP_NOTFOUND); + evhttp_socket_send_error(request->evh_req, request->thread_id, HTTP_NOTFOUND); return xret; } @@ -1369,7 +1365,7 @@ redis_clnt_pdu_send(struct http_request *request) if (thread->sync == NULL) { struct evhttp_request *evh_req = request->evh_req; - fp_stat_latency(request->create_time, KEYPAIR_ACTION_SIGN); + fp_stat_latency(request->create_time, request->thread_id, KEYPAIR_ACTION_SIGN); evhttp_socket_send(evh_req, request->odata); request_destroy(request); xret = 0; @@ -1390,10 +1386,10 @@ static int redis_clnt_send(struct http_request *request, redisReply *reply) int xret = -1; if (!reply && !reply->str){ - evhttp_socket_send_error(request->evh_req, HTTP_NOTFOUND); + evhttp_socket_send_error(request->evh_req, request->thread_id, HTTP_NOTFOUND); goto finish; } - fp_stat_latency(request->create_time, KEYPAIR_ACTION_SQL); + fp_stat_latency(request->create_time, request->thread_id, KEYPAIR_ACTION_SQL); evhttp_socket_send(request->evh_req, reply->str); finish: @@ -1768,7 +1764,8 @@ void http_get_cb(struct evhttp_request *evh_req, void *arg) { goto error; } - FS_operate(g_FP_instance.handle, g_FP_instance.line_ids[KEYPAIR_ACTION_REQ], 0, FS_OP_ADD, 1); + + fieldstat_easy_counter_incrby(g_FP_instance.fieldstat, request->thread_id, g_FP_instance.column_ids[KEYPAIR_ACTION_REQ], NULL, 0, 1); xret = get_keypair_cache(info, request, g_cert_store->mode); if (xret >= 0) @@ -1777,7 +1774,7 @@ void http_get_cb(struct evhttp_request *evh_req, void *arg) } error: request_destroy(request); - evhttp_socket_send_error(evh_req, HTTP_BADREQUEST); + evhttp_socket_send_error(evh_req, info->id, HTTP_BADREQUEST); finish: return; } @@ -2143,47 +2140,22 @@ void sigproc(int __attribute__((__unused__))sig) exit(1); } -static int kerying_fs_stat_init(const char *main_profile) +int kerying_fieldstat_easy_create(const char *main_profile) { - int value=0, i=0, prometheus_port =0; - char stat_path[128] ={0}, pname[32]={0}; - char prometheus_url_path[1024] = {0}; - char statsd_server[32]; int statsd_port; + int cycle=0; + char app_name[256]={0}; + char outpath[256]={0}; - MESA_load_profile_int_def(main_profile, "stat", "statsd_port", &(statsd_port), 8126); - MESA_load_profile_string_def(main_profile, "stat", "statsd_server", statsd_server, sizeof(statsd_server), ""); - MESA_load_profile_int_def(main_profile, "stat", "statsd_set_prometheus_port", &(prometheus_port), 9001); - MESA_load_profile_string_def(main_profile, "stat", "statsd_set_prometheus_url_path", prometheus_url_path, sizeof(prometheus_url_path), "/certstore_prometheus"); + MESA_load_profile_string_def(main_profile, "STAT", "app_name", app_name, sizeof(app_name), "certstore"); + MESA_load_profile_int_def(main_profile, "STAT", "cycle", &cycle, 2); + MESA_load_profile_string_def(main_profile, "STAT", "outpath", outpath, sizeof(outpath), "logs/certstore.fs4.json"); - g_FP_instance.favorite=FS_CALC_CURRENT; - strcpy(g_FP_instance.histogram_bins, FP_HISTOGRAM_BINS); - - FS_library_set_prometheus_port(prometheus_port); - FS_library_set_prometheus_url_path(prometheus_url_path); - FS_library_init(); - - screen_stat_handle_t fs=NULL; - fs=FS_create_handle(); - rt_get_pname_by_pid(getpid(), &pname[0]); - FS_set_para(fs, APP_NAME, pname, strlen(pname)+1); - value=1; - FS_set_para(fs, OUTPUT_PROMETHEUS, &value, sizeof(value)); - value=0; - FS_set_para(fs, FLUSH_BY_DATE, &value, sizeof(value)); - snprintf(stat_path, 128, "%s/fs2_%s.status", "./logs", pname); - FS_set_para(fs, OUTPUT_DEVICE, stat_path, strlen(stat_path)+1); - value=1; - FS_set_para(fs, PRINT_MODE, &value, sizeof(value)); - value=1; - FS_set_para(fs, CREATE_THREAD, &value, sizeof(value)); - value=2; - FS_set_para(fs, STAT_CYCLE, &value, sizeof(value)); - if(strlen(statsd_server)>0 && statsd_port!=0) + struct fieldstat_easy *fieldstat = fieldstat_easy_new(g_cert_store->thread_nu, app_name, NULL, 0); + if (fieldstat == NULL) { - FS_set_para(fs, STATS_SERVER_IP, statsd_server, strlen(statsd_server)+1); - FS_set_para(fs, STATS_SERVER_PORT, &(statsd_port), sizeof(statsd_port)); - } - FS_set_para(fs, HISTOGRAM_GLOBAL_BINS, g_FP_instance.histogram_bins, strlen(g_FP_instance.histogram_bins)+1); + mesa_runtime_log(RLOG_LV_INFO, MODULE_NAME, "certstore fieldstat4 easy instance init failed."); + return -1; + } const char* __str_stat_spec_map[KEYPAIR_ACTION_MAX]={0}; __str_stat_spec_map[KEYPAIR_ACTION_REQ]="ask_kyr_req"; @@ -2191,22 +2163,23 @@ static int kerying_fs_stat_init(const char *main_profile) __str_stat_spec_map[KEYPAIR_ACTION_SIGN]="x509_sign"; __str_stat_spec_map[KEYPAIR_ACTION_ERR]="ask_kyr_fail"; - for (i = 0; i < KEYPAIR_ACTION_MAX; i++) + for (int i = 0; i < KEYPAIR_ACTION_MAX; i++) { - g_FP_instance.line_ids[i] = FS_register(fs, FS_STYLE_FIELD, FS_CALC_CURRENT, __str_stat_spec_map[i]); + g_FP_instance.column_ids[i] = fieldstat_easy_register_counter(fieldstat, __str_stat_spec_map[i]); } - FS_start(fs); - g_FP_instance.handle = fs; - for (i = 0; i <= KEYPAIR_ACTION_SIGN; i++) + for (int i = 0; i <= KEYPAIR_ACTION_SIGN; i++) { int size = strlen(__str_stat_spec_map[i]) + strlen("(us)"); char buff[size+1]; snprintf(buff,sizeof(buff),"%s(us)",(char*)__str_stat_spec_map[i]); - g_FP_instance.field_id[i]=FS_register_histogram(g_FP_instance.handle, g_FP_instance.favorite, buff, - 1, 30*1000,3); + g_FP_instance.histogram_column_ids[i] = fieldstat_easy_register_histogram(fieldstat, buff, 1, 500000, 1); } - return 0; + + fieldstat_easy_enable_auto_output(fieldstat, outpath, cycle); + g_FP_instance.fieldstat = fieldstat; + + return 0; } char *keyring_get_value_string(cJSON *pxy_profile_keyring, const char *keyword) @@ -2223,7 +2196,7 @@ char *keyring_get_value_string(cJSON *pxy_profile_keyring, const char *keyword) int keyring_get_value_number(cJSON *pxy_profile_keyring, const char *keyword) { cJSON *item = cJSON_GetObjectItem(pxy_profile_keyring, keyword); - if(item==NULL && item->type!=cJSON_Number) + if(item==NULL || item->type!=cJSON_Number) { return -1; } @@ -2451,7 +2424,7 @@ finish: int cert_store_session_init(const char *main_profile) { - kerying_fs_stat_init(main_profile); + kerying_fieldstat_easy_create(main_profile); kerying_profile_init(main_profile); diff --git a/resource/conf/cert_store.ini b/resource/conf/cert_store.ini index dd683f9..020e5f1 100644 --- a/resource/conf/cert_store.ini +++ b/resource/conf/cert_store.ini @@ -50,8 +50,9 @@ port = 6379 dbindex = 4 [stat] -statsd_server=192.168.10.72 -statsd_port=8126 -statsd_set_prometheus_port=9001 -statsd_set_prometheus_url_path=/certstore_prometheus +cycle=2 +app_name="certstore" +outpath="logs/certstore.fs4.json" + + diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt index 59d6d03..07ef7d7 100644 --- a/vendor/CMakeLists.txt +++ b/vendor/CMakeLists.txt @@ -131,9 +131,9 @@ add_library(maatframe SHARED IMPORTED GLOBAL) set_property(TARGET maatframe PROPERTY IMPORTED_LOCATION ${MESA_FRAMEWORK_LIB_DIR}/libmaatframe.so) set_property(TARGET maatframe PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MESA_FRAMEWORK_INCLUDE_DIR}) -add_library(MESA_field_stat SHARED IMPORTED GLOBAL) -set_property(TARGET MESA_field_stat PROPERTY IMPORTED_LOCATION ${MESA_FRAMEWORK_LIB_DIR}/libMESA_field_stat2.so) -set_property(TARGET MESA_field_stat PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MESA_FRAMEWORK_INCLUDE_DIR}) +add_library(fieldstat4 SHARED IMPORTED GLOBAL) +set_property(TARGET fieldstat4 PROPERTY IMPORTED_LOCATION ${MESA_FRAMEWORK_LIB_DIR}/libfieldstat4.so) +set_property(TARGET fieldstat4 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MESA_FRAMEWORK_INCLUDE_DIR}) add_library(cjson SHARED IMPORTED GLOBAL) set_property(TARGET cjson PROPERTY IMPORTED_LOCATION ${MESA_FRAMEWORK_LIB_DIR}/libcjson.so)