TSG-23843 请sce提供健康状态查询的HTTP服务

This commit is contained in:
luwenpeng
2024-11-20 14:27:40 +08:00
parent 1372b39994
commit 5ae3220e13
10 changed files with 150 additions and 3 deletions

View File

@@ -1,6 +1,6 @@
add_library(common src/session_table.cpp src/packet.cpp src/control_packet.cpp src/bfd.cpp src/utils.cpp src/vxlan.cpp src/log.cpp src/timestamp.cpp src/mpack.cpp src/kafka.cpp)
add_library(common src/session_table.cpp src/packet.cpp src/control_packet.cpp src/bfd.cpp src/utils.cpp src/vxlan.cpp src/log.cpp src/timestamp.cpp src/mpack.cpp src/kafka.cpp src/http_healthcheck.cpp)
target_link_libraries(common PUBLIC cjson)
target_link_libraries(common PUBLIC MESA_handle_logger rdkafka uuid)
target_link_libraries(common PUBLIC MESA_handle_logger MESA_prof_load rdkafka uuid libevent-static)
target_include_directories(common PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include)

View File

@@ -0,0 +1,24 @@
#ifndef _HTTP_HEALTHCHECK_H
#define _HTTP_HEALTHCHECK_H
#ifdef __cplusplus
extern "C"
{
#endif
/*
* [http_healthcheck_server]
* enable=1
* port=8080
* addr="0.0.0.0"
* path="/status"
*/
void http_healthcheck_server_start(const char *profile);
void http_healthcheck_server_stop();
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,66 @@
#include <string.h>
#include <limits.h>
#include <pthread.h>
#include "event2/event.h"
#include "event2/buffer.h"
#include "event2/http.h"
#include "http_healthcheck.h"
#include <MESA/MESA_prof_load.h>
struct http_status_ctx
{
pthread_t pthread;
struct event_base *base;
unsigned int enable;
unsigned int port;
char addr[PATH_MAX];
char path[PATH_MAX];
uint64_t is_error;
} g_ctx = {0};
static void http_callback(struct evhttp_request *req, void *arg)
{
evhttp_send_reply(req, HTTP_OK, "", NULL);
}
static void *http_healthcheck_thread(void *arg)
{
printf("http_healthcheck_thread running (%s:%d/%s)\n", g_ctx.addr, g_ctx.port, g_ctx.path);
g_ctx.base = event_base_new();
struct evhttp *http = evhttp_new(g_ctx.base);
evhttp_set_cb(http, g_ctx.path, http_callback, NULL);
evhttp_bind_socket(http, g_ctx.addr, g_ctx.port);
event_base_dispatch(g_ctx.base);
evhttp_free(http);
event_base_free(g_ctx.base);
printf("http_healthcheck_thread exit\n");
return NULL;
}
void http_healthcheck_server_start(const char *profile)
{
MESA_load_profile_uint_def(profile, "http_healthcheck_server", "enable", &g_ctx.enable, 0);
MESA_load_profile_uint_def(profile, "http_healthcheck_server", "port", &g_ctx.port, 8080);
MESA_load_profile_string_def(profile, "http_healthcheck_server", "addr", g_ctx.addr, sizeof(g_ctx.addr), "127.0.0.1");
MESA_load_profile_string_def(profile, "http_healthcheck_server", "path", g_ctx.path, sizeof(g_ctx.path), "/status");
if (!g_ctx.enable)
{
return;
}
pthread_create(&g_ctx.pthread, NULL, http_healthcheck_thread, (void *)&g_ctx);
}
void http_healthcheck_server_stop()
{
if (g_ctx.enable)
{
event_base_loopbreak(g_ctx.base);
pthread_join(g_ctx.pthread, NULL);
}
}

View File

@@ -46,6 +46,14 @@ add_executable(gtest_health_check_table gtest_health_check_table.cpp)
target_include_directories(gtest_health_check_table PUBLIC ${CMAKE_SOURCE_DIR}/common/include ${CMAKE_SOURCE_DIR}/platform/include)
target_link_libraries(gtest_health_check_table common gtest platform)
###############################################################################
# gtest_http_healthcheck
###############################################################################
add_executable(gtest_http_healthcheck gtest_http_healthcheck.cpp)
target_include_directories(gtest_http_healthcheck PUBLIC ${CMAKE_SOURCE_DIR}/common/include ${CMAKE_SOURCE_DIR}/platform/include)
target_link_libraries(gtest_http_healthcheck common gtest platform)
###############################################################################
# gtest_discover_tests
###############################################################################
@@ -57,3 +65,5 @@ gtest_discover_tests(gtest_packet)
gtest_discover_tests(gtest_utils)
gtest_discover_tests(gtest_vxlan)
gtest_discover_tests(gtest_health_check_table)
file(COPY ./conf/ DESTINATION ./conf/)

View File

@@ -0,0 +1,5 @@
[http_healthcheck_server]
enable=1
port=8080
addr="0.0.0.0"
path="/status"

View File

@@ -0,0 +1,15 @@
#include <unistd.h>
#include <stdio.h>
#include "http_healthcheck.h"
int main(int argc, char **argv)
{
http_healthcheck_server_start("./conf/http_healthcheck.conf");
sleep(30);
http_healthcheck_server_stop();
return 0;
}