TSG-13626 tsg-service-chaining-engine发送Metrics
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include "sce.h"
|
||||
#include "log.h"
|
||||
#include "utils.h"
|
||||
#include "sf_metrics.h"
|
||||
#include "health_check.h"
|
||||
#include "global_metrics.h"
|
||||
|
||||
@@ -45,6 +46,13 @@ static void *worker_thread_cycle(void *arg)
|
||||
session_table_reset(thread_ctx->session_table);
|
||||
__atomic_fetch_and(&thread_ctx->session_table_need_reset, 0, __ATOMIC_RELAXED);
|
||||
}
|
||||
|
||||
if (__atomic_fetch_add(&thread_ctx->sf_metrics_need_send, 0, __ATOMIC_RELAXED) > 0)
|
||||
{
|
||||
sf_metrics_send(thread_ctx->sf_metrics);
|
||||
sf_metrics_reset(thread_ctx->sf_metrics);
|
||||
__atomic_fetch_and(&thread_ctx->sf_metrics_need_send, 0, __ATOMIC_RELAXED);
|
||||
}
|
||||
}
|
||||
|
||||
LOG_ERROR("%s: worker thread %d exiting", LOG_TAG_SCE, thread_ctx->thread_index);
|
||||
@@ -81,11 +89,13 @@ int main(int argc, char **argv)
|
||||
ctx->work_threads[i].tid = 0;
|
||||
ctx->work_threads[i].thread_index = i;
|
||||
ctx->work_threads[i].session_table = session_table_create();
|
||||
ctx->work_threads[i].sf_metrics = sf_metrics_create(profile);
|
||||
ctx->work_threads[i].ref_io = ctx->io;
|
||||
ctx->work_threads[i].ref_metrics = ctx->metrics;
|
||||
ctx->work_threads[i].ref_enforcer = ctx->enforcer;
|
||||
ctx->work_threads[i].ref_sce_ctx = ctx;
|
||||
ctx->work_threads[i].session_table_need_reset = 0;
|
||||
ctx->work_threads[i].sf_metrics_need_send = 0;
|
||||
}
|
||||
|
||||
for (int i = 0; i < ctx->nr_worker_threads; i++)
|
||||
@@ -98,10 +108,34 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
struct timespec current_time;
|
||||
struct timespec g_metrics_last_send_time;
|
||||
struct timespec sf_metrics_last_send_time;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, ¤t_time);
|
||||
clock_gettime(CLOCK_MONOTONIC, &g_metrics_last_send_time);
|
||||
clock_gettime(CLOCK_MONOTONIC, &sf_metrics_last_send_time);
|
||||
|
||||
while (1)
|
||||
{
|
||||
global_metrics_dump(ctx->metrics);
|
||||
sleep(ctx->metrics->config.statsd_cycle);
|
||||
if (current_time.tv_sec - g_metrics_last_send_time.tv_sec >= ctx->metrics->config.statsd_cycle)
|
||||
{
|
||||
clock_gettime(CLOCK_MONOTONIC, &g_metrics_last_send_time);
|
||||
global_metrics_dump(ctx->metrics);
|
||||
}
|
||||
|
||||
if (current_time.tv_sec - sf_metrics_last_send_time.tv_sec >= sf_metrics_get_interval(ctx->work_threads[0].sf_metrics))
|
||||
{
|
||||
clock_gettime(CLOCK_MONOTONIC, &sf_metrics_last_send_time);
|
||||
for (int i = 0; i < ctx->nr_worker_threads; i++)
|
||||
{
|
||||
struct thread_ctx *thread_ctx = &ctx->work_threads[i];
|
||||
__atomic_fetch_add(&thread_ctx->sf_metrics_need_send, 1, __ATOMIC_RELAXED);
|
||||
}
|
||||
}
|
||||
|
||||
sleep(MIN(ctx->metrics->config.statsd_cycle, sf_metrics_get_interval(ctx->work_threads[0].sf_metrics)));
|
||||
clock_gettime(CLOCK_MONOTONIC, ¤t_time);
|
||||
}
|
||||
|
||||
error_out:
|
||||
@@ -109,6 +143,7 @@ error_out:
|
||||
{
|
||||
struct thread_ctx *thread_ctx = &ctx->work_threads[i];
|
||||
session_table_destory(thread_ctx->session_table);
|
||||
sf_metrics_destory(thread_ctx->sf_metrics);
|
||||
}
|
||||
sce_ctx_destory(ctx);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user