Module: sip-router Branch: tmp/k3.0_sr_backports Commit: 6b109fa2ae51e1b5676d163f015c8cda7ea4eef6 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=6b109fa2...
Author: Andrei Pelinescu-Onciul andrei@iptel.org Committer: Andrei Pelinescu-Onciul andrei@iptel.org Date: Mon Feb 1 18:20:10 2010 +0100
core: stats events cbs are called only if USE_CORE_STATS is defined
Use macros instead of triggering directly various SREV_CORE_STATS callbacks. This way if compiled without core stats support (USE_CORE_STATS), there will be no performance impact (the macros will be empty). All the macros are defined in core_stats.h.
---
core_stats.h | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++ forward.c | 11 ++++-- parser/msg_parser.c | 4 +- parser/parse_uri.c | 4 +- receive.c | 13 ++++--- 5 files changed, 117 insertions(+), 14 deletions(-)
diff --git a/core_stats.h b/core_stats.h new file mode 100644 index 0000000..729d73e --- /dev/null +++ b/core_stats.h @@ -0,0 +1,99 @@ +/* + * $Id$ + * + * Copyright (C) 2010 iptelorg GmbH + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +/** macros used for various core statistics. + * (if USE_CORE_STATS is not defined they won't do anything) + * @file core_stats.h + * @ingroup core + */ +/* + * History: + * -------- + * 2010-02-01 initial version (andrei) +*/ + +#ifndef __core_stats_h +#define __core_stats_h + +/* define USE_CORE_STATS to enable statistics events + (SREV_CORE_STATS callbacks) */ +/*#define USE_CORE_STATS */ + +#ifndef USE_CORE_STATS + +#define STATS_REQ_FWD_DROP() +#define STATS_REQ_FWD_OK() +#define STATS_RPL_FWD_DROP() +#define STATS_RPL_FWD_OK() +#define STATS_BAD_MSG() +#define STATS_BAD_RPL() +#define STATS_BAD_URI() +#define STATS_BAD_MSG_HDR() + +#else /* USE_CORE_STATS */ + +#include "events.h" + +/** called each time a received request is dropped. + * The request might be dropped explicitly (e.g. pre script callback) + * or there might be an error while trying to forward it (e.g. send). + */ +#define STATS_REQ_FWD_DROP() sr_event_exec(SREV_CORE_STATS, (void*)3) + + +/** called each time forwarding a request succeeds (send).*/ +#define STATS_REQ_FWD_OK() sr_event_exec(SREV_CORE_STATS, (void*)1) + + +/** called each time forwarding a reply fails. + * The reply forwarding might fail due to send errors, + * pre script callbacks (module denying forwarding) or explicit script + * drop (drop or module function returning 0). + */ +#define STATS_RPL_FWD_DROP() sr_event_exec(SREV_CORE_STATS, (void*)4) + + +/* called each time forwarding a reply succeeds. */ +#define STATS_RPL_FWD_OK() sr_event_exec(SREV_CORE_STATS, (void*)2) + + +/** called each time a received request is too bad to process. + * For now it's called in case the message does not have any via. + */ +#define STATS_BAD_MSG() sr_event_exec(SREV_CORE_STATS, (void*)5) + + +/** called each time a received reply is too bad to process. + * For now it's called in case the message does not have any via. + */ +#define STATS_BAD_RPL() sr_event_exec(SREV_CORE_STATS, (void*)6) + + +/** called each time uri parsing fails. */ +#define STATS_BAD_URI() sr_event_exec(SREV_CORE_STATS, (void*)7) + + +/** called each time parsing some header fails. */ +#define STATS_BAD_MSG_HDR() sr_event_exec(SREV_CORE_STATS, (void*)8) + + + +#endif /* USE_CORE_STATS */ + +#endif /*__core_stats_h*/ + +/* vi: set ts=4 sw=4 tw=79:ai:cindent: */ diff --git a/forward.c b/forward.c index 3a4fbf4..4b88780 100644 --- a/forward.c +++ b/forward.c @@ -94,6 +94,7 @@ #include "dst_blacklist.h" #endif #include "compiler_opt.h" +#include "core_stats.h"
#ifdef DEBUG_DMALLOC #include <dmalloc.h> @@ -582,10 +583,12 @@ end: #endif if (buf) pkg_free(buf); /* received_buf & line_buf will be freed in receive_msg by free_lump_list*/ +#if defined STATS_REQ_FWD_OK || defined STATS_REQ_FWD_DROP if(ret==0) - sr_event_exec(SREV_CORE_STATS, (void*)1); + STATS_REQ_FWD_OK(); else - sr_event_exec(SREV_CORE_STATS, (void*)3); + STATS_REQ_FWD_DROP(); +#endif /* STATS_REQ_FWD_* */ return ret; }
@@ -740,7 +743,7 @@ int forward_reply(struct sip_msg* msg) #endif if (msg_send(&dst, new_buf, new_len)<0) { - sr_event_exec(SREV_CORE_STATS, (void*)4); + STATS_RPL_FWD_DROP(); goto error; } #ifdef STATS @@ -751,7 +754,7 @@ int forward_reply(struct sip_msg* msg) msg->via2->host.len, msg->via2->host.s, (unsigned short) msg->via2->port);
- sr_event_exec(SREV_CORE_STATS, (void*)2); + STATS_RPL_FWD_OK(); pkg_free(new_buf); skip: return 0; diff --git a/parser/msg_parser.c b/parser/msg_parser.c index 48f666c..1cb530c 100644 --- a/parser/msg_parser.c +++ b/parser/msg_parser.c @@ -54,7 +54,7 @@ #include "../data_lump_rpl.h" #include "../mem/mem.h" #include "../error.h" -#include "../events.h" +#include "../core_stats.h" #include "../globals.h" #include "parse_hname2.h" #include "parse_uri.h" @@ -279,7 +279,7 @@ char* get_hdr_field(char* buf, char* end, struct hdr_field* hdr) return tmp; error: DBG("get_hdr_field: error exit\n"); - sr_event_exec(SREV_CORE_STATS, (void*)8); + STATS_BAD_MSG_HDR(); hdr->type=HDR_ERROR_T; hdr->len=tmp-hdr->name.s; return tmp; diff --git a/parser/parse_uri.c b/parser/parse_uri.c index efcc54b..47cb1bc 100644 --- a/parser/parse_uri.c +++ b/parser/parse_uri.c @@ -50,7 +50,7 @@ #include "../ut.h" /* q_memchr */ /* #endif */ #include "../error.h" -#include "../events.h" +#include "../core_stats.h"
/* buf= pointer to begining of uri (sip:x@foo.bar:5060;a=b?h=i) * len= len of uri @@ -1224,7 +1224,7 @@ error_bug: error_exit: ser_error=E_BAD_URI; uri->type=ERROR_URI_T; - sr_event_exec(SREV_CORE_STATS, (void*)7); + STATS_BAD_URI(); return E_BAD_URI; }
diff --git a/receive.c b/receive.c index 60eefa7..2496e41 100644 --- a/receive.c +++ b/receive.c @@ -64,6 +64,7 @@ #include "tcp_server.h" /* for tcpconn_add_alias */ #include "tcp_options.h" /* for access to tcp_accept_aliases*/ #include "cfg/cfg.h" +#include "core_stats.h"
#ifdef DEBUG_DMALLOC #include <mem/dmalloc.h> @@ -149,7 +150,7 @@ int receive_msg(char* buf, unsigned int len, struct receive_info* rcv_info) if ((msg->via1==0) || (msg->via1->error!=PARSE_OK)){ /* no via, send back error ? */ LOG(L_ERR, "ERROR: receive_msg: no via found in request\n"); - sr_event_exec(SREV_CORE_STATS, (void*)5); + STATS_BAD_MSG(); goto error02; } /* check if necessary to add receive?->moved to forward_req */ @@ -184,7 +185,7 @@ int receive_msg(char* buf, unsigned int len, struct receive_info* rcv_info) */ if (exec_pre_script_cb(msg, REQUEST_CB_TYPE)==0 ) { - sr_event_exec(SREV_CORE_STATS, (void*)3); + STATS_REQ_FWD_DROP(); goto end; /* drop the request */ }
@@ -212,7 +213,7 @@ int receive_msg(char* buf, unsigned int len, struct receive_info* rcv_info) if ((msg->via1==0) || (msg->via1->error!=PARSE_OK)){ /* no via, send back error ? */ LOG(L_ERR, "ERROR: receive_msg: no via found in reply\n"); - sr_event_exec(SREV_CORE_STATS, (void*)6); + STATS_BAD_RPL(); goto error02; }
@@ -230,8 +231,8 @@ int receive_msg(char* buf, unsigned int len, struct receive_info* rcv_info) */ if (exec_pre_script_cb(msg, ONREPLY_CB_TYPE)==0 ) { - sr_event_exec(SREV_CORE_STATS, (void*)4); - goto end; /* drop the request */ + STATS_RPL_FWD_DROP(); + goto end; /* drop the reply */ }
/* exec the onreply routing script */ @@ -246,7 +247,7 @@ int receive_msg(char* buf, unsigned int len, struct receive_info* rcv_info) }else #endif /* NO_ONREPLY_ROUTE_ERROR */ if (unlikely(ret==0 || (ctx.run_flags&DROP_R_F))){ - sr_event_exec(SREV_CORE_STATS, (void*)4); + STATS_RPL_FWD_DROP(); goto skip_send_reply; /* drop the message, no error */ } }