[sr-dev] git:tmp/k3.0_sr_backports: core: stats events cbs are called only if USE_CORE_STATS is defined

Andrei Pelinescu-Onciul andrei at iptel.org
Mon Feb 1 18:25:56 CET 2010


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=6b109fa2ae51e1b5676d163f015c8cda7ea4eef6

Author: Andrei Pelinescu-Onciul <andrei at iptel.org>
Committer: Andrei Pelinescu-Onciul <andrei at 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 at 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 */
 			}
 		}




More information about the sr-dev mailing list