From 221af6f5c15ca02ddb79133a1a565839d41d7fa4 Mon Sep 17 00:00:00 2001 From: ivanr Date: Mon, 1 Feb 2010 12:10:28 +0000 Subject: [PATCH] Add PERF_ALL, sepearate PERF_STORAGE into PERF_SREAD and PERF_SWRITE. --- apache2/msc_logging.c | 16 ++++----- apache2/msc_util.h | 2 ++ apache2/re_variables.c | 79 ++++++++++++++++++++++++++++++++++++------ 3 files changed, 77 insertions(+), 20 deletions(-) diff --git a/apache2/msc_logging.c b/apache2/msc_logging.c index 2d76e224..0b4c6b50 100644 --- a/apache2/msc_logging.c +++ b/apache2/msc_logging.c @@ -771,16 +771,14 @@ void sec_audit_logger(modsec_rec *msr) { sec_auditlog_write(msr, text, strlen(text)); /* Stopwatch2 */ - - text = apr_psprintf(msr->mp, "Stopwatch2: %" APR_TIME_T_FMT " %" APR_TIME_T_FMT - "; p1=%" APR_TIME_T_FMT ", p2=%" APR_TIME_T_FMT ", p3=%" APR_TIME_T_FMT - ", p4=%" APR_TIME_T_FMT ", p5=%" APR_TIME_T_FMT ", s=%" APR_TIME_T_FMT - ", l=%" APR_TIME_T_FMT "\n", msr->request_time, (now - msr->request_time), - msr->time_phase1, msr->time_phase2, msr->time_phase3, msr->time_phase4, - msr->time_phase5, msr->time_storage_read + msr->time_storage_write, - msr->time_logging); + { + char *perf_all = format_all_performance_variables(msr, msr->mp); + + text = apr_psprintf(msr->mp, "Stopwatch2: %" APR_TIME_T_FMT " %" APR_TIME_T_FMT + "; %s\n", msr->request_time, (now - msr->request_time), perf_all); - sec_auditlog_write(msr, text, strlen(text)); + sec_auditlog_write(msr, text, strlen(text)); + } /* Our response body does not contain chunks */ /* ENH Only write this when the output was chunked. */ diff --git a/apache2/msc_util.h b/apache2/msc_util.h index 5ed6c925..909cda3c 100644 --- a/apache2/msc_util.h +++ b/apache2/msc_util.h @@ -105,4 +105,6 @@ apr_fileperms_t DSOLOCAL mode2fileperms(int mode); char DSOLOCAL *construct_single_var(modsec_rec *msr, char *name); +char DSOLOCAL *format_all_performance_variables(modsec_rec *msr, apr_pool_t *mp); + #endif diff --git a/apache2/re_variables.c b/apache2/re_variables.c index 0a82cea9..c3c132e9 100644 --- a/apache2/re_variables.c +++ b/apache2/re_variables.c @@ -1427,6 +1427,21 @@ static int var_urlencoded_error_generate(modsec_rec *msr, msre_var *var, msre_ru } } +apr_time_t calculate_perf_combined(modsec_rec *msr) { + return msr->time_phase1 + msr->time_phase2 + msr->time_phase3 + msr->time_phase4 + + msr->time_phase5 + msr->time_storage_write /* time_storage_read is already + included in phases */ + msr->time_logging; +} + +char *format_all_performance_variables(modsec_rec *msr, apr_pool_t *mp) { + return apr_psprintf(mp, "total=%" APR_TIME_T_FMT ", p1=%" APR_TIME_T_FMT + ", p2=%" APR_TIME_T_FMT ", p3=%" APR_TIME_T_FMT ", p4=%" APR_TIME_T_FMT + ", p5=%" APR_TIME_T_FMT ", sr=%" APR_TIME_T_FMT ", sw=%" APR_TIME_T_FMT + ", l=%" APR_TIME_T_FMT, calculate_perf_combined(msr), msr->time_phase1, + msr->time_phase2, msr->time_phase3, msr->time_phase4, msr->time_phase5, + msr->time_storage_read, msr->time_storage_write, msr->time_logging); +} + static int generate_performance_variable(modsec_rec *msr, msre_var *var, msre_rule *rule, apr_table_t *vartab, apr_pool_t *mptmp, apr_time_t value) { @@ -1441,16 +1456,28 @@ static int generate_performance_variable(modsec_rec *msr, msre_var *var, msre_ru return 1; } +/* PERF_ALL */ + +static int var_perf_all_generate(modsec_rec *msr, msre_var *var, msre_rule *rule, + apr_table_t *vartab, apr_pool_t *mptmp) +{ + msre_var *rvar = NULL; + + rvar = apr_pmemdup(mptmp, var, sizeof(msre_var)); + rvar->value = format_all_performance_variables(msr, mptmp); + rvar->value_len = strlen(rvar->value); + + apr_table_addn(vartab, rvar->name, (void *)rvar); + + return 1; +} + /* PERF_COMBINED */ static int var_perf_combined_generate(modsec_rec *msr, msre_var *var, msre_rule *rule, apr_table_t *vartab, apr_pool_t *mptmp) { - apr_time_t value = msr->time_phase1 + msr->time_phase2 + msr->time_phase3 + msr->time_phase4 - + msr->time_phase5 + msr->time_storage_write /* time_storage_read is already - included in phases */ + msr->time_logging; - - return generate_performance_variable(msr, var, rule, vartab, mptmp, value); + return generate_performance_variable(msr, var, rule, vartab, mptmp, calculate_perf_combined(msr)); } /* PERF_PHASE1 */ @@ -1493,12 +1520,20 @@ static int var_perf_phase5_generate(modsec_rec *msr, msre_var *var, msre_rule *r return generate_performance_variable(msr, var, rule, vartab, mptmp, msr->time_phase5); } -/* PERF_STORAGE */ +/* PERF_SREAD */ -static int var_perf_storage_generate(modsec_rec *msr, msre_var *var, msre_rule *rule, +static int var_perf_sread_generate(modsec_rec *msr, msre_var *var, msre_rule *rule, apr_table_t *vartab, apr_pool_t *mptmp) { - return generate_performance_variable(msr, var, rule, vartab, mptmp, msr->time_storage_read + msr->time_storage_write); + return generate_performance_variable(msr, var, rule, vartab, mptmp, msr->time_storage_read); +} + +/* PERF_SWRITE */ + +static int var_perf_swrite_generate(modsec_rec *msr, msre_var *var, msre_rule *rule, + apr_table_t *vartab, apr_pool_t *mptmp) +{ + return generate_performance_variable(msr, var, rule, vartab, mptmp, msr->time_storage_write); } /* PERF_LOGGING */ @@ -3118,6 +3153,17 @@ void msre_engine_register_default_variables(msre_engine *engine) { PHASE_RESPONSE_HEADERS ); + /* PERF_ALL */ + msre_engine_variable_register(engine, + "PERF_ALL", + VAR_SIMPLE, + 0, 0, + NULL, + var_perf_all_generate, + VAR_DONT_CACHE, + PHASE_REQUEST_HEADERS + ); + /* PERF_COMBINED */ msre_engine_variable_register(engine, "PERF_COMBINED", @@ -3195,13 +3241,24 @@ void msre_engine_register_default_variables(msre_engine *engine) { PHASE_REQUEST_HEADERS ); - /* PERF_STORAGE */ + /* PERF_SREAD */ msre_engine_variable_register(engine, - "PERF_STORAGE", + "PERF_SREAD", VAR_SIMPLE, 0, 0, NULL, - var_perf_storage_generate, + var_perf_sread_generate, + VAR_DONT_CACHE, + PHASE_REQUEST_HEADERS + ); + + /* PERF_SWRITE */ + msre_engine_variable_register(engine, + "PERF_SWRITE", + VAR_SIMPLE, + 0, 0, + NULL, + var_perf_swrite_generate, VAR_DONT_CACHE, PHASE_REQUEST_HEADERS );