增加HTTP业务层和缓存运行状态统计。业务层状态输出到tfe.fieldstat,缓存输出到cache.fieldstat。增加缓存开关。
This commit is contained in:
@@ -194,29 +194,35 @@ static void * __thread_ctx_entry(void * arg)
|
||||
return (void *)NULL;
|
||||
}
|
||||
|
||||
struct tfe_thread_ctx * __thread_ctx_create(struct tfe_proxy * proxy, unsigned int thread_id)
|
||||
|
||||
void tfe_proxy_work_thread_create_ctx(struct tfe_proxy * proxy)
|
||||
{
|
||||
struct tfe_thread_ctx * __thread_ctx = ALLOC(struct tfe_thread_ctx, 1);
|
||||
assert(__thread_ctx != NULL);
|
||||
|
||||
__thread_ctx->thread_id = thread_id;
|
||||
__thread_ctx->evbase = event_base_new();
|
||||
|
||||
int ret = pthread_create(&__thread_ctx->thr, NULL, __thread_ctx_entry, (void *)__thread_ctx);
|
||||
if (unlikely(ret < 0))
|
||||
unsigned int i=0;
|
||||
for(i=0; i<proxy->nr_work_threads;i++)
|
||||
{
|
||||
TFE_LOG_ERROR(proxy->logger, "Failed at pthread_create() for thread %d: %s",errno, strerror(errno));
|
||||
goto __errout;
|
||||
proxy->work_threads[i]=ALLOC(struct tfe_thread_ctx, 1);
|
||||
proxy->work_threads[i]->thread_id = i;
|
||||
proxy->work_threads[i]->evbase = event_base_new();
|
||||
}
|
||||
|
||||
return __thread_ctx;
|
||||
|
||||
__errout:
|
||||
if (__thread_ctx != NULL && __thread_ctx->evbase != NULL) event_base_free(__thread_ctx->evbase);
|
||||
if (__thread_ctx != NULL) free(__thread_ctx);
|
||||
return NULL;
|
||||
return;
|
||||
}
|
||||
int tfe_proxy_work_thread_run(struct tfe_proxy * proxy)
|
||||
{
|
||||
struct tfe_thread_ctx * __thread_ctx=NULL;
|
||||
unsigned int i=0;
|
||||
int ret=0;
|
||||
for(i=0; i<proxy->nr_work_threads;i++)
|
||||
{
|
||||
__thread_ctx=proxy->work_threads[i];
|
||||
ret = pthread_create(&__thread_ctx->thr, NULL, __thread_ctx_entry, (void *)__thread_ctx);
|
||||
if (unlikely(ret < 0))
|
||||
{
|
||||
TFE_LOG_ERROR(proxy->logger, "Failed at pthread_create() for thread %d, error %d: %s", i, errno, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tfe_proxy_config(struct tfe_proxy * proxy, const char * profile)
|
||||
{
|
||||
/* Worker threads */
|
||||
@@ -304,7 +310,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
/* SSL INIT */
|
||||
g_default_proxy->ssl_mgr_handler = ssl_manager_init(main_profile, "ssl",
|
||||
g_default_proxy->evbase, g_default_logger, g_default_proxy->fs_handle);
|
||||
g_default_proxy->evbase, g_default_logger);
|
||||
CHECK_OR_EXIT(g_default_proxy->ssl_mgr_handler, "Failed at init SSL manager. Exit.");
|
||||
|
||||
for (size_t i = 0; i < (sizeof(signals) / sizeof(int)); i++)
|
||||
@@ -317,15 +323,9 @@ int main(int argc, char *argv[])
|
||||
struct timeval gc_delay = {2, 0};
|
||||
evtimer_add(g_default_proxy->gcev , &gc_delay);
|
||||
|
||||
/* WORKER THREAD */
|
||||
//TODO: Split ctx_create functioin to create and Run.
|
||||
for(unsigned tid = 0; tid < g_default_proxy->nr_work_threads; tid++)
|
||||
{
|
||||
g_default_proxy->work_threads[tid] = __thread_ctx_create(g_default_proxy, tid);
|
||||
CHECK_OR_EXIT(g_default_proxy->work_threads[tid], "Failed at creating thread %u", tid);
|
||||
}
|
||||
|
||||
|
||||
/* WORKER THREAD CTX Create */
|
||||
tfe_proxy_work_thread_create_ctx(g_default_proxy);
|
||||
|
||||
/* ACCEPTOR INIT */
|
||||
g_default_proxy->kni_acceptor_handler = kni_acceptor_init(g_default_proxy, main_profile, g_default_logger);
|
||||
CHECK_OR_EXIT(g_default_proxy->kni_acceptor_handler, "Failed at init KNI acceptor. Exit. ");
|
||||
@@ -341,21 +341,31 @@ int main(int argc, char *argv[])
|
||||
TFE_LOG_INFO(g_default_logger, "Plugin %s initialized. ", plugin_iter->symbol);
|
||||
}
|
||||
|
||||
|
||||
|
||||
ret=tfe_proxy_work_thread_run(g_default_proxy);
|
||||
CHECK_OR_EXIT(ret==0, "Failed at creating thread. Exit.");
|
||||
|
||||
TFE_LOG_ERROR(g_default_logger, "Tango Frontend Engine initialized. ");
|
||||
event_base_dispatch(g_default_proxy->evbase);
|
||||
|
||||
return 0;
|
||||
}
|
||||
unsigned int tfe_proxy_get_thread_count(void)
|
||||
unsigned int tfe_proxy_get_work_thread_count(void)
|
||||
{
|
||||
return g_default_proxy->nr_work_threads;
|
||||
}
|
||||
struct event_base * tfe_proxy_get_evbase(unsigned int thread_id)
|
||||
struct event_base * tfe_proxy_get_work_thread_evbase(unsigned int thread_id)
|
||||
{
|
||||
assert(thread_id<g_default_proxy->nr_work_threads);
|
||||
return g_default_proxy->work_threads[thread_id]->evbase;
|
||||
}
|
||||
struct event_base * tfe_proxy_get_gc_evbase(void)
|
||||
{
|
||||
return g_default_proxy->evbase;
|
||||
}
|
||||
|
||||
screen_stat_handle_t tfe_proxy_get_fs_handle(void)
|
||||
{
|
||||
return g_default_proxy->fs_handle;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <tfe_stream.h>
|
||||
#include <tfe_utils.h>
|
||||
#include <tfe_future.h>
|
||||
#include <tfe_proxy.h>
|
||||
#include <key_keeper.h>
|
||||
#include <ssl_sess_cache.h>
|
||||
#include <ssl_utils.h>
|
||||
@@ -207,6 +208,22 @@ struct fs_spec
|
||||
enum ssl_stream_stat id;
|
||||
const char* name;
|
||||
};
|
||||
/*
|
||||
* Garbage collection handler.
|
||||
*/
|
||||
static void
|
||||
ssl_stream_gc_cb(evutil_socket_t fd, short what, void * arg)
|
||||
{
|
||||
struct ssl_mgr *mgr=(struct ssl_mgr *)arg;
|
||||
int i=0;
|
||||
ssl_sess_cache_stat(mgr->up_sess_cache, &(mgr->stat_val[SSL_UP_CACHE_SZ]), &(mgr->stat_val[SSL_UP_CACHE_QUERY]), &(mgr->stat_val[SSL_UP_CACHE_HIT]));
|
||||
ssl_sess_cache_stat(mgr->down_sess_cache, &(mgr->stat_val[SSL_DOWN_CACHE_SZ]), &(mgr->stat_val[SSL_DOWN_CACHE_QUERY]), &(mgr->stat_val[SSL_DOWN_CACHE_HIT]));
|
||||
for(i=0;i<SSL_STAT_MAX;i++)
|
||||
{
|
||||
FS_operate(mgr->fs_handle, mgr->fs_id[i], 0, FS_OP_SET, ATOMIC_READ(&(mgr->stat_val[i])));
|
||||
}
|
||||
return;
|
||||
}
|
||||
void ssl_stat_init(struct ssl_mgr * mgr)
|
||||
{
|
||||
int i=0;
|
||||
@@ -288,6 +305,11 @@ void ssl_stat_init(struct ssl_mgr * mgr)
|
||||
FS_CALC_CURRENT,
|
||||
"dtkt_hit");
|
||||
}
|
||||
|
||||
struct timeval gc_delay = {0, 500*1000}; //Microseconds, we set 500 miliseconds here.
|
||||
mgr->gcev = event_new(mgr->ev_base_gc, -1, EV_PERSIST, ssl_stream_gc_cb, mgr);
|
||||
evtimer_add(mgr->gcev, &gc_delay);
|
||||
|
||||
return;
|
||||
}
|
||||
static SSL * downstream_ssl_create(struct ssl_mgr * mgr, struct keyring * crt);
|
||||
@@ -424,27 +446,11 @@ void ssl_manager_destroy(struct ssl_mgr * mgr)
|
||||
}
|
||||
free(mgr);
|
||||
}
|
||||
/*
|
||||
* Garbage collection handler.
|
||||
*/
|
||||
static void
|
||||
ssl_stream_gc_cb(evutil_socket_t fd, short what, void * arg)
|
||||
{
|
||||
struct ssl_mgr *mgr=(struct ssl_mgr *)arg;
|
||||
int i=0;
|
||||
ssl_sess_cache_stat(mgr->up_sess_cache, &(mgr->stat_val[SSL_UP_CACHE_SZ]), &(mgr->stat_val[SSL_UP_CACHE_QUERY]), &(mgr->stat_val[SSL_UP_CACHE_HIT]));
|
||||
ssl_sess_cache_stat(mgr->down_sess_cache, &(mgr->stat_val[SSL_DOWN_CACHE_SZ]), &(mgr->stat_val[SSL_DOWN_CACHE_QUERY]), &(mgr->stat_val[SSL_DOWN_CACHE_HIT]));
|
||||
for(i=0;i<SSL_STAT_MAX;i++)
|
||||
{
|
||||
FS_operate(mgr->fs_handle, mgr->fs_id[i], 0, FS_OP_SET, ATOMIC_READ(&(mgr->stat_val[i])));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
struct ssl_mgr * ssl_manager_init(const char * ini_profile, const char * section,
|
||||
struct event_base * ev_base_gc, void * logger, screen_stat_handle_t fs)
|
||||
struct event_base * ev_base_gc, void * logger)
|
||||
{
|
||||
struct timeval gc_delay = {0, 500*1000}; //Microseconds, we set 500 miliseconds here.
|
||||
unsigned char key_name[]="!mesalab-tfe3a~&";
|
||||
unsigned char aes_key_def[]={0xC5,0xAC,0xC1,0xA6,0xB2,0xBB,0xCA,0xC7,0xE3,0xBE,0xE3,0xB2,0xC6,0xA3,0xB1,0xB9
|
||||
,0xA3,0xAC,0xB6,0xF8,0xCA,0xC7,0xD1,0xDB,0xBE,0xA6,0xC0,0xEF,0xD3,0xD0,0xB9,0x84};
|
||||
@@ -456,7 +462,6 @@ struct ssl_mgr * ssl_manager_init(const char * ini_profile, const char * section
|
||||
char version_str[TFE_SYMBOL_MAX];
|
||||
mgr->logger = logger;
|
||||
mgr->ev_base_gc=ev_base_gc;
|
||||
mgr->fs_handle=fs;
|
||||
MESA_load_profile_string_def(ini_profile, section, "ssl_min_version", version_str, sizeof(version_str), "ssl3");
|
||||
mgr->ssl_min_version = sslver_str2num(version_str);
|
||||
MESA_load_profile_string_def(ini_profile, section, "ssl_max_version", version_str, sizeof(version_str), "tls12");
|
||||
@@ -538,15 +543,10 @@ struct ssl_mgr * ssl_manager_init(const char * ini_profile, const char * section
|
||||
}
|
||||
|
||||
memcpy(mgr->ssl_session_context, "mesa-tfe", sizeof(mgr->ssl_session_context));
|
||||
mgr->fs_handle=fs;
|
||||
mgr->fs_handle=tfe_proxy_get_fs_handle();
|
||||
ssl_stat_init(mgr);
|
||||
|
||||
mgr->gcev = event_new(mgr->ev_base_gc, -1, EV_PERSIST, ssl_stream_gc_cb, mgr);
|
||||
if (!mgr->gcev)
|
||||
{
|
||||
goto error_out;
|
||||
}
|
||||
evtimer_add(mgr->gcev, &gc_delay);
|
||||
|
||||
|
||||
return mgr;
|
||||
|
||||
@@ -1490,6 +1490,7 @@ retry:
|
||||
|
||||
if (ctx->retries++ >= MAX_NET_RETRIES)
|
||||
{
|
||||
/*
|
||||
struct tfe_stream_addr* addr=tfe_stream_addr_create_by_fd(fd, ctx->s_stream->dir);
|
||||
char* addr_string=tfe_stream_addr_to_str(addr);
|
||||
TFE_LOG_ERROR(logger, "Failed to shutdown %s SSL connection cleanly: %s "
|
||||
@@ -1498,6 +1499,7 @@ retry:
|
||||
addr_string, fd);
|
||||
tfe_stream_addr_free(addr);
|
||||
free(addr_string);
|
||||
*/
|
||||
if(ctx->s_stream->dir==CONN_DIR_DOWNSTREAM)
|
||||
{
|
||||
ATOMIC_INC(&(mgr->stat_val[SSL_DOWN_DIRTY_CLOSED]));
|
||||
|
||||
Reference in New Issue
Block a user