SUPPORT-8592. Добавлен location для получения номера версии приложения

This commit is contained in:
alashkova 2024-10-22 16:40:03 +03:00
parent 5a4ee2cb69
commit 3acd286ae0
4 changed files with 97 additions and 0 deletions

View file

@ -0,0 +1,60 @@
#include "service_version.h"
#include "version.h"
#include "fcgisrv/fcgi_utils.h"
#include "utils/logger.h"
#include <assert.h>
#define VERSION_TEXT \
"Content-type: text/plain" CRLF CRLF \
APP_VERSION
static const str_t VERSION_CONF_DEFAULT_LOCATION = str_t_const("/version");
int
version_conf_load(version_conf_t *conf)
{
LOG_TRACE("version_conf_load enter");
assert(conf != NULL);
conf->location = &VERSION_CONF_DEFAULT_LOCATION;
LOG_TRACE("version_conf_load exit");
return 0;
}
void
version_conf_clear(version_conf_t *conf)
{
LOG_TRACE("version_conf_load enter");
if (conf != NULL) {
conf->location = NULL;
}
LOG_TRACE("version_conf_load exit");
}
fcgi_handler_status_t
fcgi_version_handler(FCGX_Request* request, void* ctx)
{
LOG_TRACE("fcgi_version_handler enter");
assert(request != NULL);
if (request == NULL) {
LOG_ERROR("fcgi_version_handler failed: request is NULL");
return HANDLER_ERROR;
}
FCGX_FPrintF(request->out, VERSION_TEXT);
LOG_TRACE("fcgi_version_handler exit");
return HANDLER_SUCCESS;
}

View file

@ -0,0 +1,22 @@
#ifndef SERVICE_VERSION_H_INCLUDED
#define SERVICE_VERSION_H_INCLUDED
#include "fcgisrv/fcgi_server.h"
#include "utils/str_t.h"
typedef struct version_conf_s {
const str_t *location;
} version_conf_t;
int version_conf_load(version_conf_t *conf);
void version_conf_clear(version_conf_t *conf);
fcgi_handler_status_t fcgi_version_handler(FCGX_Request* request, void* ctx);
#endif // SERVICE_VERSION_H_INCLUDED

View file

@ -166,6 +166,11 @@ service_manager_load_conf(const char* config_file_name, service_manager_conf_t*
goto error; goto error;
} }
if (version_conf_load(&services_cf->version_cf)) {
LOG_ERROR("Show version service configuraton loading failed");
goto error;
}
conf_file_close_file(conf_file); conf_file_close_file(conf_file);
LOG_TRACE("service_manager_load_conf exit with success"); LOG_TRACE("service_manager_load_conf exit with success");
@ -185,6 +190,7 @@ service_manager_clear_conf(service_manager_conf_t* services_cf)
{ {
assert(services_cf != NULL); assert(services_cf != NULL);
version_conf_clear(&services_cf->version_cf);
sign_conf_clear(&services_cf->sign_cf); sign_conf_clear(&services_cf->sign_cf);
verify_conf_clear(&services_cf->verify_cf); verify_conf_clear(&services_cf->verify_cf);
fcgi_clear_conf(&services_cf->fcgi_cf); fcgi_clear_conf(&services_cf->fcgi_cf);
@ -256,6 +262,13 @@ init_services(service_manager_t* services, const service_manager_conf_t* service
goto error; goto error;
} }
/* show version service */
if (register_service(services, services_cf, fcgi_version_handler, NULL,
services_cf->version_cf.location)) {
LOG_ERROR("Could not register 'show version service'");
goto error;
}
/* run fastcgi server */ /* run fastcgi server */
if (fcgi_run_server(services->hfcgi) != 0) { if (fcgi_run_server(services->hfcgi) != 0) {
LOG_ERROR("Could not run FastCGI server"); LOG_ERROR("Could not run FastCGI server");

View file

@ -9,6 +9,7 @@
#include "modules/service_sign.h" #include "modules/service_sign.h"
#include "modules/service_verify.h" #include "modules/service_verify.h"
#include "modules/service_version.h"
struct service_s; struct service_s;
@ -48,6 +49,7 @@ typedef struct service_manager_conf_s {
main_conf_t main_cf; main_conf_t main_cf;
sign_conf_t sign_cf; sign_conf_t sign_cf;
verify_conf_t verify_cf; verify_conf_t verify_cf;
version_conf_t version_cf;
} service_manager_conf_t; } service_manager_conf_t;