8 Commits

10 changed files with 284 additions and 242 deletions

View File

@@ -1,57 +1,100 @@
image: "git.mesalab.cn:7443/mesa_platform/build-env:master"
variables: variables:
GIT_STRATEGY: "clone" GIT_STRATEGY: "clone"
BUILD_IMAGE_CENTOS7: "git.mesalab.cn:7443/mesa_platform/build-env:master"
BUILD_IMAGE_CENTOS8: "git.mesalab.cn:7443/mesa_platform/build-env:rockylinux"
BUILD_PADDING_PREFIX: /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX/ BUILD_PADDING_PREFIX: /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX/
INSTALL_PREFIX: "/opt/MESA/lib/" INSTALL_DEPENDENCY_LIBRARY: libasan
INSTALL_DEPENDENCY_LIBRARY: ""
stages: stages:
- build - build
- test
.build_by_travis: .build_before_script:
before_script: before_script:
- mkdir -p $BUILD_PADDING_PREFIX/$CI_PROJECT_NAMESPACE/ - mkdir -p $BUILD_PADDING_PREFIX/$CI_PROJECT_NAMESPACE/
- ln -s $CI_PROJECT_DIR $BUILD_PADDING_PREFIX/$CI_PROJECT_PATH - ln -s $CI_PROJECT_DIR $BUILD_PADDING_PREFIX/$CI_PROJECT_PATH
- cd $BUILD_PADDING_PREFIX/$CI_PROJECT_PATH - cd $BUILD_PADDING_PREFIX/$CI_PROJECT_PATH
- chmod +x ./ci/travis.sh - chmod +x ./ci/travis.sh
- yum makecache
- yum install -y elfutils-libelf-devel
.build_by_travis_for_centos7:
stage: build
image: $BUILD_IMAGE_CENTOS7
extends: .build_before_script
script: script:
- wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo - yum install -y libmnl-devel
- yum makecache fast - yum install -y libnfnetlink-devel
- ./ci/travis.sh - ./ci/travis.sh
- cd build - cd build
tags: tags:
- share - share
branch_build_debug: .build_by_travis_for_centos8:
stage: build stage: build
extends: .build_by_travis image: $BUILD_IMAGE_CENTOS8
extends: .build_before_script
script:
- dnf --enablerepo=powertools install -y libmnl-devel
- dnf --enablerepo=powertools install -y libnfnetlink-devel
- ./ci/travis.sh
tags:
- share
run_test_for_centos7:
stage: test
image: $BUILD_IMAGE_CENTOS7
extends: .build_by_travis_for_centos7
script:
- yum makecache
- ./ci/travis.sh
- cd build
- ctest --verbose
run_test_for_centos8:
stage: test
image: $BUILD_IMAGE_CENTOS8
extends: .build_by_travis_for_centos8
script:
- yum makecache
- ./ci/travis.sh
- cd build
- ctest --verbose
branch_build_debug_for_centos7:
stage: build
extends: .build_by_travis_for_centos7
variables: variables:
BUILD_TYPE: Debug BUILD_TYPE: Debug
except: except:
- /^develop.*$/i
- /^master.*$/i
- /^dev*.*$/i - /^dev*.*$/i
- /^rel*.*$/i - /^rel*.*$/i
- /^master.*$/i
- tags - tags
branch_build_release: branch_build_release_for_centos7:
stage: build stage: build
variables: variables:
BUILD_TYPE: RelWithDebInfo BUILD_TYPE: RelWithDebInfo
extends: .build_by_travis extends: .build_by_travis_for_centos7
except: except:
- /^develop.*$/i
- /^master.*$/i
- /^dev*.*$/i - /^dev*.*$/i
- /^rel*.*$/i - /^rel*.*$/i
- /^master.*$/i
- tags - tags
develop_build_debug: develop_build_debug_for_centos7:
stage: build stage: build
extends: .build_by_travis extends: .build_by_travis_for_centos7
variables: variables:
BUILD_TYPE: Debug BUILD_TYPE: Debug
PACKAGE: 1 PACKAGE: 1
UPLOAD_RPM: 1 UPLOAD_RPM: 1
ASAN_OPTION: ADDRESS ASAN_OPTION: ADDRESS
TESTING_VERSION_BUILD: 1
PULP3_REPO_NAME: framework-testing-x86_64.el7 PULP3_REPO_NAME: framework-testing-x86_64.el7
PULP3_DIST_NAME: framework-testing-x86_64.el7 PULP3_DIST_NAME: framework-testing-x86_64.el7
artifacts: artifacts:
@@ -59,18 +102,19 @@ develop_build_debug:
paths: paths:
- build/*.rpm - build/*.rpm
only: only:
- /^develop.*$/i
- /^master.*$/i
- /^dev*.*$/i - /^dev*.*$/i
- /^rel*.*$/i - /^rel*.*$/i
- /^master.*$/i
develop_build_release: develop_build_release_for_centos7:
stage: build stage: build
extends: .build_by_travis extends: .build_by_travis_for_centos7
variables: variables:
BUILD_TYPE: RelWithDebInfo BUILD_TYPE: RelWithDebInfo
PACKAGE: 1 PACKAGE: 1
UPLOAD_RPM: 1 UPLOAD_RPM: 1
ASAN_OPTION: "OFF" TESTING_VERSION_BUILD: 1
PULP3_REPO_NAME: framework-testing-x86_64.el7 PULP3_REPO_NAME: framework-testing-x86_64.el7
PULP3_DIST_NAME: framework-testing-x86_64.el7 PULP3_DIST_NAME: framework-testing-x86_64.el7
artifacts: artifacts:
@@ -78,12 +122,12 @@ develop_build_release:
paths: paths:
- build/*.rpm - build/*.rpm
only: only:
- /^develop.*$/i
- /^master.*$/i
- /^dev*.*$/i - /^dev*.*$/i
- /^rel*.*$/i - /^rel*.*$/i
- /^master.*$/i
release_build_debug_for_centos7:
release_build_debug:
stage: build stage: build
variables: variables:
BUILD_TYPE: Debug BUILD_TYPE: Debug
@@ -91,15 +135,15 @@ release_build_debug:
UPLOAD_RPM: 1 UPLOAD_RPM: 1
PULP3_REPO_NAME: framework-stable-x86_64.el7 PULP3_REPO_NAME: framework-stable-x86_64.el7
PULP3_DIST_NAME: framework-stable-x86_64.el7 PULP3_DIST_NAME: framework-stable-x86_64.el7
extends: .build_by_travis extends: .build_by_travis_for_centos7
artifacts: artifacts:
name: "MESA_handle_logger-$CI_COMMIT_REF_NAME-release" name: "MESA_handle_logger-$CI_COMMIT_REF_NAME-debug"
paths: paths:
- build/*.rpm - build/*.rpm
only: only:
- tags - tags
release_build_release: release_build_release_for_centos7:
stage: build stage: build
variables: variables:
BUILD_TYPE: RelWithDebInfo BUILD_TYPE: RelWithDebInfo
@@ -109,7 +153,106 @@ release_build_release:
SYMBOL_TARGET: libMESA_handle_logger SYMBOL_TARGET: libMESA_handle_logger
PULP3_REPO_NAME: framework-stable-x86_64.el7 PULP3_REPO_NAME: framework-stable-x86_64.el7
PULP3_DIST_NAME: framework-stable-x86_64.el7 PULP3_DIST_NAME: framework-stable-x86_64.el7
extends: .build_by_travis extends: .build_by_travis_for_centos7
artifacts:
name: "MESA_handle_logger-$CI_COMMIT_REF_NAME-release"
paths:
- build/*.rpm
only:
- tags
branch_build_debug_for_centos8:
stage: build
extends: .build_by_travis_for_centos8
variables:
BUILD_TYPE: Debug
except:
- /^develop.*$/i
- /^master.*$/i
- /^dev*.*$/i
- /^rel*.*$/i
- tags
branch_build_release_for_centos8:
stage: build
variables:
BUILD_TYPE: RelWithDebInfo
extends: .build_by_travis_for_centos8
except:
- /^develop.*$/i
- /^master.*$/i
- /^dev*.*$/i
- /^rel*.*$/i
- tags
develop_build_debug_for_centos8:
stage: build
extends: .build_by_travis_for_centos8
variables:
BUILD_TYPE: Debug
PACKAGE: 1
UPLOAD_RPM: 1
ASAN_OPTION: ADDRESS
TESTING_VERSION_BUILD: 1
PULP3_REPO_NAME: framework-testing-x86_64.el8
PULP3_DIST_NAME: framework-testing-x86_64.el8
artifacts:
name: "MESA_handle_logger-$CI_COMMIT_REF_NAME-debug"
paths:
- build/*.rpm
only:
- /^develop.*$/i
- /^master.*$/i
- /^dev*.*$/i
- /^rel*.*$/i
develop_build_release_for_centos8:
stage: build
extends: .build_by_travis_for_centos8
variables:
BUILD_TYPE: RelWithDebInfo
PACKAGE: 1
UPLOAD_RPM: 1
TESTING_VERSION_BUILD: 1
PULP3_REPO_NAME: framework-testing-x86_64.el8
PULP3_DIST_NAME: framework-testing-x86_64.el8
artifacts:
name: "MESA_handle_logger-$CI_COMMIT_REF_NAME-release"
paths:
- build/*.rpm
only:
- /^develop.*$/i
- /^master.*$/i
- /^dev*.*$/i
- /^rel*.*$/i
release_build_debug_for_centos8:
stage: build
variables:
BUILD_TYPE: Debug
PACKAGE: 1
UPLOAD_RPM: 1
PULP3_REPO_NAME: framework-stable-x86_64.el8
PULP3_DIST_NAME: framework-stable-x86_64.el8
extends: .build_by_travis_for_centos8
artifacts:
name: "MESA_handle_logger-$CI_COMMIT_REF_NAME-debug"
paths:
- build/*.rpm
only:
- tags
release_build_release_for_centos8:
stage: build
variables:
BUILD_TYPE: RelWithDebInfo
PACKAGE: 1
UPLOAD_RPM: 1
UPLOAD_SYMBOL_FILES: 1
SYMBOL_TARGET: libMESA_handle_logger
PULP3_REPO_NAME: framework-stable-x86_64.el8
PULP3_DIST_NAME: framework-stable-x86_64.el8
extends: .build_by_travis_for_centos8
artifacts: artifacts:
name: "MESA_handle_logger-$CI_COMMIT_REF_NAME-release" name: "MESA_handle_logger-$CI_COMMIT_REF_NAME-release"
paths: paths:

View File

@@ -69,4 +69,9 @@ install(FILES conf/MESA_handle_logger.conf DESTINATION /usr/lib/tmpfiles.d/ COMP
add_executable(${lib_name}_demo demo/test_handle_logger.c) add_executable(${lib_name}_demo demo/test_handle_logger.c)
target_link_libraries(${lib_name}_demo pthread ${lib_name}_shared) target_link_libraries(${lib_name}_demo pthread ${lib_name}_shared)
enable_testing()
add_test(NAME test_compatible_mode COMMAND MESA_handle_logger_demo 1 ./demo_zlog.conf 1 100 0)
add_test(NAME test_perf COMMAND MESA_handle_logger_demo 2 ./demo_zlog.conf 1 1000 0)
include(Package) include(Package)

View File

@@ -37,7 +37,7 @@ if [ -n "${INSTALL_DEPENDENCY_LIBRARY}" ]; then
yum install -y $INSTALL_DEPENDENCY_LIBRARY yum install -y $INSTALL_DEPENDENCY_LIBRARY
fi fi
if [ $ASAN_OPTION ];then if [ $ASAN_OPTION ] && [ -f "/opt/rh/devtoolset-7/enable" ] ;then
source /opt/rh/devtoolset-7/enable source /opt/rh/devtoolset-7/enable
fi fi

View File

@@ -12,36 +12,32 @@ set(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}")
set(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}.${VERSION_BUILD}") set(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}.${VERSION_BUILD}")
set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
set(CPACK_PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_BUILD}") set(CPACK_PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_BUILD}")
execute_process(COMMAND bash -c "echo -ne \"`uname -r | awk -F'.' '{print $5\".\"$6\".\"$7}'`\"" OUTPUT_VARIABLE SYSTEM_VERSION)
execute_process(COMMAND sh changelog.sh ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/cmake) execute_process(COMMAND sh changelog.sh ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/cmake)
SET(CPACK_RPM_CHANGELOG_FILE ${CMAKE_BINARY_DIR}/changelog.txt) SET(CPACK_RPM_CHANGELOG_FILE ${CMAKE_BINARY_DIR}/changelog.txt)
# RPM Build # RPM Build
set(CPACK_GENERATOR "RPM") set(CPACK_GENERATOR "RPM")
set(CPACK_RPM_AUTO_GENERATED_FILE_NAME ON)
set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
set(CPACK_RPM_PACKAGE_VENDOR "MESA") set(CPACK_RPM_PACKAGE_VENDOR "MESA")
set(CPACK_RPM_PACKAGE_AUTOREQPROV "yes") set(CPACK_RPM_PACKAGE_AUTOREQPROV "yes")
set(CPACK_RPM_PACKAGE_RELEASE_LIBRARY "on") set(CPACK_RPM_PACKAGE_RELEASE_DIST "on")
set(CPACK_RPM_DEBUGINFO_PACKAGE "on") set(CPACK_RPM_DEBUGINFO_PACKAGE "on")
set(CPACK_RPM_PACKAGE_DEBUG 1)
set(CPACK_RPM_COMPONENT_INSTALL ON) set(CPACK_RPM_COMPONENT_INSTALL ON)
set(CPACK_COMPONENTS_IGNORE_GROUPS 1) set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
set(CPACK_COMPONENTS_GROUPING ONE_PER_GROUP) set(CPACK_COMPONENTS_GROUPING ONE_PER_GROUP)
set(CPACK_COMPONENT_HEADER_DISPLAY_NAME "develop") set(CPACK_COMPONENT_HEADER_DISPLAY_NAME "develop")
set(CPACK_COMPONENT_LIBRARIES_REQUIRED TRUE) set(CPACK_COMPONENT_LIBRARIES_REQUIRED TRUE)
set(CPACK_RPM_LIBRARIES_PACKAGE_NAME ${MY_RPM_NAME_PREFIX})
set(CPACK_COMPONENT_LIBRARIES_GROUP "LIBRARIES")
set(CPACK_COMPONENT_EXECUTABLE_GROUP "LIBRARIES")
set(CPACK_COMPONENT_PROFILE_GROUP "LIBRARIES")
set(CPACK_COMPONENT_HEADER_REQUIRED TRUE) set(CPACK_COMPONENT_HEADER_REQUIRED TRUE)
set(CPACK_RPM_HEADER_PACKAGE_NAME "${MY_RPM_NAME_PREFIX}-devel") set(CPACK_RPM_HEADER_PACKAGE_NAME "${MY_RPM_NAME_PREFIX}-devel")
set(CPACK_RPM_LIBRARIES_PACKAGE_NAME ${MY_RPM_NAME_PREFIX})
set(CPACK_RPM_FILE_NAME "${CPACK_RPM_LIBRARIES_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${SYSTEM_VERSION}.rpm")
set(CPACK_RPM_LIBRARIES_DEBUGINFO_FILE_NAME "${CPACK_RPM_LIBRARIES_PACKAGE_NAME}-debuginfo-${CPACK_PACKAGE_VERSION}-${SYSTEM_VERSION}.rpm")
set(CPACK_COMPONENT_LIBRARIES_GROUP "libraries")
set(CPACK_COMPONENT_EXECUTABLE_GROUP "libraries")
set(CPACK_COMPONENT_PROFILE_GROUP "libraries")
set(CPACK_RPM_HEADER_FILE_NAME "${CPACK_RPM_HEADER_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${SYSTEM_VERSION}.rpm")
set(CPACK_RPM_HEADER_DEBUGINFO_FILE_NAME "${CPACK_RPM_HEADER_PACKAGE_NAME}-debuginfo-${CPACK_PACKAGE_VERSION}-${SYSTEM_VERSION}.rpm")
set(CPACK_COMPONENT_HEADER_GROUP "header") set(CPACK_COMPONENT_HEADER_GROUP "header")
set(CPACK_RPM_HEADER_PACKAGE_REQUIRES_PRE ${CPACK_RPM_LIBRARIES_PACKAGE_NAME}) set(CPACK_RPM_HEADER_PACKAGE_REQUIRES_PRE ${CPACK_RPM_LIBRARIES_PACKAGE_NAME})

View File

@@ -16,12 +16,12 @@ void *test_handle = NULL;
int g_mode = 0; int g_mode = 0;
int g_log_num = 0; int g_log_num = 0;
int g_thread_num = 0; int g_thread_num = 0;
int g_log_print_way = 0; int g_sleep_interval = 0;
const char *g_zlog_conf = NULL; const char *g_zlog_conf = NULL;
volatile long g_start_time = 0; volatile long g_start_time = 0;
volatile long g_end_time = 0; volatile long g_end_time = 0;
void call_logger(int log_num, int thread_num, int way) void call_logger(int log_num, int thread_num)
{ {
int i = 0; int i = 0;
struct timespec start, end; struct timespec start, end;
@@ -41,25 +41,16 @@ void call_logger(int log_num, int thread_num, int way)
} }
for(i = 0; i < log_num; i++) for(i = 0; i < log_num; i++)
{ {
switch (way) MESA_handle_runtime_log(sample_handle, RLOG_LV_DEBUG, "sample", "sample_handle MESA_handle_runtime_log, i = %d, thread_num = %d", i, thread_num);
{
case 1:
MESA_handle_runtime_log(sample_handle, RLOG_LV_DEBUG, "sample", "sample_handle RUNTIEM_LOG test, i = %d, thread_num = %d", i, thread_num);
MESA_handle_runtime_log(test_handle, RLOG_LV_INFO, "test", "test_handle MESA_handle_runtime_log, i = %d, thread_num = %d", i, thread_num);
break;
case 2:
MESA_HANDLE_RUNTIME_LOG_RATELIMIT(sample_handle, RLOG_LV_DEBUG, "sample", "sample_handle RUNTIEM_LOG test, i = %d, thread_num = %d", i, thread_num);
MESA_HANDLE_RUNTIME_LOG_RATELIMIT(test_handle, RLOG_LV_INFO, "test", "test_handle RUNTIEM_LOG test, i = %d, thread_num = %d", i, thread_num);
break;
case 3:
MESA_HANDLE_RUNTIME_LOG(sample_handle, RLOG_LV_DEBUG, "sample", "sample_handle RUNTIEM_LOG test, i = %d, thread_num = %d", i, thread_num);
MESA_HANDLE_RUNTIME_LOG(test_handle, RLOG_LV_INFO, "test", "test_handle RUNTIEM_LOG test, i = %d, thread_num = %d", i, thread_num);
break;
default:
break;
}
// if (i % 10000 == 0)
//sleep(1); //sleep(1);
MESA_handle_runtime_log(test_handle, RLOG_LV_INFO, "test", "test_handle MESA_handle_runtime_log, i = %d, thread_num = %d", i, thread_num);
//MESA_HANDLE_RUNTIME_LOG(sample_handle, RLOG_LV_FATAL, "sample", "sample_handle RUNTIEM_LOG test, i = %d, thread_num = %d", i, thread_num);
if(g_sleep_interval > 0)
{
printf("MESA_handle_runtime_log_level_enabled(%d) return %d\n", RLOG_LV_DEBUG, MESA_handle_runtime_log_level_enabled(test_handle, RLOG_LV_DEBUG));
sleep(g_sleep_interval);
}
//MESA_HANDLE_RUNTIME_LOG(test_handle, RLOG_LV_FATAL, "test", "test_handle RUNTIEM_LOG test, i = %d, thread_num = %d", i, thread_num);
} }
clock_gettime(CLOCK_MONOTONIC, &end); clock_gettime(CLOCK_MONOTONIC, &end);
end_time = end.tv_sec*1000000 + end.tv_nsec/1000; end_time = end.tv_sec*1000000 + end.tv_nsec/1000;
@@ -74,8 +65,9 @@ void call_logger(int log_num, int thread_num, int way)
g_end_time = end_time; g_end_time = end_time;
} }
} }
time_cost = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_nsec - start.tv_nsec) / 1000 ; time_cost = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_nsec - start.tv_nsec) / 1000 - g_sleep_interval * 1000000 ;
printf("THREAD %d write %d log using %ld us, avg speed %f /s, %ld -> %ld\n", thread_num, log_num, time_cost, ((float)log_num/(float)time_cost)*1000000, start_time, end_time); printf("THREAD %d write %d log using %ld us, avg speed %f /s, %ld -> %ld\n", thread_num, log_num, time_cost, ((float)log_num/(float)time_cost)*1000000, start_time, end_time);
printf("MESA_handle_runtime_log_level_enabled(%d) return %d\n", RLOG_LV_DEBUG, MESA_handle_runtime_log_level_enabled(test_handle, RLOG_LV_DEBUG));
return; return;
} }
@@ -84,7 +76,7 @@ void *thread_logger(void *arg)
{ {
int thread_num = (int)(unsigned long long)arg; int thread_num = (int)(unsigned long long)arg;
printf("thread %d created! \n", thread_num); printf("thread %d created! \n", thread_num);
call_logger(g_log_num, thread_num, g_log_print_way); call_logger(g_log_num, thread_num);
printf("thread %d finished! \n", thread_num); printf("thread %d finished! \n", thread_num);
return NULL; return NULL;
} }
@@ -110,39 +102,22 @@ void sig_hup_handler(int sig)
MESA_handle_runtime_log_reconstruction(g_zlog_conf); MESA_handle_runtime_log_reconstruction(g_zlog_conf);
} }
void sig_user1_handler(int sig)
{
printf("SIGUSR1 recviced! set interval:3 burst:5\n");
MESA_set_runtime_log_handle_ratelimit(sample_handle, 3, 5);
}
void sig_user2_handler(int sig)
{
printf("SIGUSR2 recviced! set interval:5 burst:3\n");
MESA_set_runtime_log_handle_ratelimit(sample_handle, 5, 3);
}
void sig_min_handler(int sig)
{
printf("SIGRTMIN recviced! unlimit\n");
MESA_set_runtime_log_handle_ratelimit(sample_handle, 0, 3);
}
int main(int argc, char ** args) int main(int argc, char ** args)
{ {
pthread_t t[MAX_THREAD_NUM]; pthread_t t[MAX_THREAD_NUM];
int i = 0; int i = 0;
int ret =0;
if (argc != 6) if (argc != 6)
{ {
printf("Usage: ./($app) $mode[1 or 2] $zlog_conf_path $thread_num $log_num $log_print_way[1 2 3]\n"); printf("Usage: ./($app) $version_mode[1 or 2] $zlog_conf_path $thread_num $log_num $sleep_interval\n");
return -1; return -1;
} }
g_mode = atoi(args[1]); g_mode = atoi(args[1]);
g_zlog_conf = args[2]; g_zlog_conf = args[2];
g_thread_num = atoi(args[3]); g_thread_num = atoi(args[3]);
g_log_num = atoi(args[4]); g_log_num = atoi(args[4]);
g_log_print_way = atoi(args[5]); g_sleep_interval = atoi(args[5]);
if(g_thread_num <= 0 || g_log_num <= 0) if(g_thread_num <= 0 || g_log_num <= 0)
{ {
@@ -177,11 +152,17 @@ int main(int argc, char ** args)
} }
signal(SIGINT, sig_int_handler); signal(SIGINT, sig_int_handler);
signal(SIGHUP, sig_hup_handler); signal(SIGHUP, sig_hup_handler);
signal(SIGUSR1, sig_user1_handler);
signal(SIGUSR2, sig_user2_handler); // 等待所有线程结束并回收
signal(SIGRTMIN, sig_min_handler); for (i = 0; i < g_thread_num; ++i) {
while(1) ret = pthread_join(t[i], NULL);
; if (ret != 0) {
fprintf(stderr, "Failed to join thread %d\n", i);
return 1;
}
}
printf("All threads finished\n");
// MESA_destroy_runtime_log_handle(sample_handle); // MESA_destroy_runtime_log_handle(sample_handle);
// MESA_destroy_runtime_log_handle(test_handle); // MESA_destroy_runtime_log_handle(test_handle);
// sample_handle = NULL; // sample_handle = NULL;

View File

@@ -14,39 +14,26 @@ extern "C"
{ {
#endif #endif
#include <pthread.h>
#define RLOG_LV_DEBUG 10 #define RLOG_LV_DEBUG 10
#define RLOG_LV_INFO 20 #define RLOG_LV_INFO 20
#define RLOG_LV_FATAL 30 #define RLOG_LV_FATAL 30
typedef struct log_ratelimit_s
{
int interval;
int burst;
int printed;
int missed;
long begin;
pthread_mutex_t mutex;
}log_ratelimit_t;
int MESA_handle_runtime_log_creation(const char *conf_path); int MESA_handle_runtime_log_creation(const char *conf_path);
int MESA_handle_runtime_log_reconstruction(const char *conf_path); int MESA_handle_runtime_log_reconstruction(const char *conf_path);
void MESA_handle_runtime_log_destruction(); void MESA_handle_runtime_log_destruction();
#define MESA_HANDLE_RUNTIME_LOG(handle, lv, mod, fmt, args...) \ #define MESA_HANDLE_RUNTIME_LOG(handle, level, module, format, ...) \
MESA_handle_runtime_log((handle), (lv), (mod), "file %s, line %d, " fmt, \ do \
__FILE__, __LINE__, ##args) { \
if (MESA_handle_runtime_log_level_enabled(handle, level)) \
#define MESA_HANDLE_RUNTIME_LOG_RATELIMIT(handle, lv, mod, fmt, args...) \ { \
({ \ MESA_handle_runtime_log(handle, level, module, "file %s, line %d, " format, \
static log_ratelimit_t _rs = { \ __FILE__, __LINE__, ##__VA_ARGS__); \
.mutex = PTHREAD_MUTEX_INITIALIZER, \ } \
}; \ } while (0)
if (MESA_runtime_log_ratelimit((handle), (&_rs), (lv), (mod), (__func__))) \
MESA_handle_runtime_log((handle), (lv), (mod), fmt, ##args); \
})
int MESA_handle_runtime_log_level_enabled(void *handle, const int level);
/* /*
* name: MESA_create_runtime_log_handle * name: MESA_create_runtime_log_handle
* functionality: get runtime_log handle; * functionality: get runtime_log handle;
@@ -83,18 +70,6 @@ void MESA_handle_runtime_log(void *handle, int level, const char *module, const
*/ */
void MESA_destroy_runtime_log_handle(void *handle); void MESA_destroy_runtime_log_handle(void *handle);
/*
* name: MESA_set_runtime_log_handle_ratelimit
* functionality: set not more than @burst in every @interval when appends log message
* params:
* handle: runtime log handle which is going to be released;
* interval: interval time(second). if set '0', it means unlimit.
* burst: in interval time max count
* returns:
* none;
*/
void MESA_set_runtime_log_handle_ratelimit(void *handle, int interval, int burst);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -9,24 +9,18 @@
#include <time.h> #include <time.h>
#define MAX_HANDLE_LOG_PATH 4096 #define MAX_HANDLE_LOG_PATH 4096
#define DEFAULT_BURST 10
#define DEFAULT_INTERVAL 5
static int g_zlog_inited = 0; static int g_zlog_inited = 0;
static int g_zlog_conf_fp = -1; static int g_zlog_conf_fp = -1;
static char global_conf_filepath[MAX_HANDLE_LOG_PATH] = ""; static char global_conf_filepath[MAX_HANDLE_LOG_PATH] = "";
static char tmp_conf_filepath[MAX_HANDLE_LOG_PATH] = ""; static char tmp_conf_filepath[MAX_HANDLE_LOG_PATH] = "";
typedef struct log_handle_t struct log_handle_t
{ {
int interval;
int burst;
pthread_mutex_t mutex;
int runtime_log_level; int runtime_log_level;
zlog_category_t *zc; zlog_category_t *zc;
const char *global_conf_path; const char *global_conf_path;
char runtime_log_file[MAX_HANDLE_LOG_PATH]; char runtime_log_file[MAX_HANDLE_LOG_PATH];
} log_handle_t; };
@@ -53,6 +47,7 @@ static __attribute__((__used__)) const char * GIT_VERSION_UNKNOWN = NULL;
} }
#endif #endif
static int create_dir(const char *dir_path, int path_len) static int create_dir(const char *dir_path, int path_len)
{ {
if(dir_path == NULL) if(dir_path == NULL)
@@ -168,60 +163,6 @@ static void snapshot_handle_info(const char *handle_name, const char *log_path,
return; return;
} }
static void log_update_time(log_handle_t *p_handle, log_ratelimit_t *rs, int level, const char *module, const char *func)
{
struct timespec current = {0, 0};
clock_gettime(CLOCK_MONOTONIC, &current);
if (((long)(rs->begin + rs->interval - current.tv_sec)) < 0)
{
if (rs->missed)
{
zlog(p_handle->zc, p_handle->runtime_log_file, strlen(p_handle->runtime_log_file), module, strlen(module), __LINE__, level, "%s: %d callbacks suppressed\n", func, rs->missed);
rs->missed = 0;
}
rs->begin = current.tv_sec;
rs->printed = 0;
}
return ;
}
int MESA_runtime_log_ratelimit(void *handle, log_ratelimit_t *rs, int level, const char *module, const char *func)
{
int ret = 0;
struct timespec timer = {0, 0};
log_handle_t *p_handle = (log_handle_t *)handle;
if (pthread_mutex_lock(&rs->mutex) != 0)return 0;
if (!rs->begin)
{
clock_gettime(CLOCK_MONOTONIC, &timer);
rs->begin = timer.tv_sec;
}
rs->burst = p_handle->burst;
rs->interval = p_handle->interval;
if (!rs->interval)
{
pthread_mutex_unlock(&rs->mutex);
return 1;
}
log_update_time(p_handle, rs, level, module, func);
if (rs->burst && rs->burst > rs->printed)
{
rs->printed++;
ret = 1;
}
else
{
rs->missed++;
ret = 0;
}
pthread_mutex_unlock(&rs->mutex);
return ret;
}
void *MESA_create_runtime_log_handle(const char *file_path, int level) void *MESA_create_runtime_log_handle(const char *file_path, int level)
{ {
if(file_path == NULL) if(file_path == NULL)
@@ -230,11 +171,11 @@ void *MESA_create_runtime_log_handle(const char *file_path, int level)
int rc = -1; int rc = -1;
zlog_category_t *zc = NULL; zlog_category_t *zc = NULL;
FILE *fp = NULL; FILE *fp = NULL;
log_handle_t *p_handle = NULL; struct log_handle_t *handle = NULL;
char handle_name[MAX_HANDLE_LOG_PATH]; char handle_name[MAX_HANDLE_LOG_PATH];
char *p_path_end = rindex(file_path, '/'); char *p_path_end = rindex(file_path, '/');
char *p_name = p_path_end+1; char *p_name;
strcpy(handle_name, file_path); strcpy(handle_name, file_path);
escape_for_zlog(handle_name, strlen(handle_name)); escape_for_zlog(handle_name, strlen(handle_name));
@@ -254,23 +195,17 @@ void *MESA_create_runtime_log_handle(const char *file_path, int level)
{ {
fprintf(stderr,"[MESA_create_runtime_log_handle], get zlog category (%s) in global_conf_filepath(%s) fail\n", p_name, global_conf_filepath); fprintf(stderr,"[MESA_create_runtime_log_handle], get zlog category (%s) in global_conf_filepath(%s) fail\n", p_name, global_conf_filepath);
} }
p_handle = (log_handle_t *)calloc(sizeof(log_handle_t), 1); handle = (struct log_handle_t *)calloc(sizeof(struct log_handle_t), 1);
strncpy(p_handle->runtime_log_file, file_path, sizeof(p_handle->runtime_log_file) - 1); strncpy(handle->runtime_log_file, file_path, sizeof(handle->runtime_log_file) - 1);
p_handle->runtime_log_level = level; handle->runtime_log_level = level;
p_handle->zc = zc; handle->zc = zc;
p_handle->burst = DEFAULT_BURST; return (void *)handle;
p_handle->interval = DEFAULT_INTERVAL;
pthread_mutex_init(&p_handle->mutex, NULL);
return (void *)p_handle;
} }
void MESA_destroy_runtime_log_handle(void *handle) void MESA_destroy_runtime_log_handle(void *handle)
{ {
log_handle_t *p_handle = (log_handle_t *)handle;
if(handle != NULL) if(handle != NULL)
{ {
pthread_mutex_destroy(&p_handle->mutex);
free(handle); free(handle);
handle = NULL; handle = NULL;
} }
@@ -278,39 +213,45 @@ void MESA_destroy_runtime_log_handle(void *handle)
return; return;
} }
void MESA_handle_runtime_log(void *handle, int level, const char *module, const char *fmt, ...)
int MESA_handle_runtime_log_level_enabled(void *v_handle, const int level)
{
struct log_handle_t *handle = (struct log_handle_t *)v_handle;
if(handle == NULL || handle->runtime_log_file == NULL)return;
if(handle->zc == NULL) return;
return zlog_level_enabled(handle->zc, level);
}
void MESA_handle_runtime_log(void *v_handle, int level, const char *module, const char *fmt, ...)
{
struct log_handle_t *handle = (struct log_handle_t *)v_handle;
if(handle == NULL || handle->runtime_log_file == NULL)return;
if(handle->zc == NULL)return;
if (zlog_level_enabled(handle->zc, level))
{ {
va_list ap; va_list ap;
log_handle_t *p_handle = (log_handle_t *)handle;
if(p_handle == NULL || p_handle->runtime_log_file == NULL)return;
if(p_handle->zc == NULL)return;
va_start(ap, fmt); va_start(ap, fmt);
vzlog(p_handle->zc, p_handle->runtime_log_file, strlen(p_handle->runtime_log_file), module, strlen(module), __LINE__, level, fmt, ap); vzlog(handle->zc, handle->runtime_log_file, strlen(handle->runtime_log_file), module, strlen(module), __LINE__, level, fmt, ap);
va_end(ap); va_end(ap);
}
return ; return ;
} }
void MESA_set_runtime_log_handle_ratelimit(void *handle, int interval, int burst)
{
log_handle_t *p_handle = (log_handle_t *)handle;
if ((p_handle == NULL) || (interval < 0) || (burst < 0))return;
pthread_mutex_lock(&p_handle->mutex);
p_handle->interval = interval;
p_handle->burst = burst;
pthread_mutex_unlock(&p_handle->mutex);
return;
}
int MESA_handle_runtime_log_creation(const char *conf_path) int MESA_handle_runtime_log_creation(const char *conf_path)
{ {
char *env = getenv("ZLOG_CONF_PATH"); char *env = getenv("ZLOG_CONF_PATH");
int rc = 0; int rc = 0;
if(g_zlog_inited == 1)
{
rc = zlog_reload(conf_path);
zlog_profile();
return rc;
}
if (conf_path == NULL || (access(conf_path, R_OK) != 0)) if (conf_path == NULL || (access(conf_path, R_OK) != 0))
{ {
fprintf(stderr,"[MESA_handle_runtime_log_creation], PATH (%s) unable to access, will output log to STDOUT or Using ZLOG_CONF_PATH (%s) !\n", conf_path, env); fprintf(stderr,"[MESA_handle_runtime_log_creation], PATH (%s) unable to access, will output log to STDOUT or Using ZLOG_CONF_PATH (%s) !\n", conf_path, env);
@@ -403,4 +344,5 @@ void MESA_handle_runtime_log_destruction()
unlink(tmp_conf_filepath); unlink(tmp_conf_filepath);
close(g_zlog_conf_fp); close(g_zlog_conf_fp);
} }
g_zlog_inited=0;
} }

View File

@@ -3,8 +3,8 @@ cmake_minimum_required (VERSION 3.5)
include(ExternalProject) include(ExternalProject)
ExternalProject_Add(zlog PREFIX zlog ExternalProject_Add(zlog PREFIX zlog
URL ${CMAKE_CURRENT_SOURCE_DIR}/zlog-1.2.15.tar.gz URL ${CMAKE_CURRENT_SOURCE_DIR}/zlog-1.2.16.tar.gz
URL_MD5 5e79f8d08744c7fef8528dd55a3bcd2d URL_MD5 4dcfe75a1acbb5c4513bbe168f935993
CONFIGURE_COMMAND "" CONFIGURE_COMMAND ""
BUILD_COMMAND make BUILD_COMMAND make
INSTALL_COMMAND "" INSTALL_COMMAND ""

Binary file not shown.

BIN
zlog/zlog-1.2.16.tar.gz Normal file

Binary file not shown.