|
From: Chris B. <buc...@us...> - 2012-04-11 22:55:19
|
Update of /cvsroot/sblim/sfcb
In directory vz-cvs-3.sog:/tmp/cvs-serv32333
Modified Files:
ChangeLog NEWS httpAdapter.c sfcBroker.c httpComm.c
providerDrv.c providerMgr.c sfcb.cfg.pre.in trace.c trace.h
Log Message:
[ 3501314 ] Add dynamic logging and syslog output to sfcb trace
Index: providerDrv.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/providerDrv.c,v
retrieving revision 1.115
retrieving revision 1.116
diff -u -d -r1.115 -r1.116
--- providerDrv.c 30 Mar 2012 23:43:05 -0000 1.115
+++ providerDrv.c 11 Apr 2012 22:55:17 -0000 1.116
@@ -64,7 +64,7 @@
struct timeval sv,ev;
#define TIMING_START(req,pInfo) \
- if (pInfo && req->sessionId && (_sfcb_trace_mask & TRACE_RESPONSETIMING) ) {\
+ if (pInfo && req->sessionId && (*_ptr_sfcb_trace_mask & TRACE_RESPONSETIMING) ) {\
gettimeofday(&sv,NULL);\
getrusage(RUSAGE_SELF,&us);\
getrusage(RUSAGE_CHILDREN,&cs);\
@@ -72,7 +72,7 @@
}
#define TIMING_STOP(req,pInfo) \
- if (uset && (_sfcb_trace_mask & TRACE_RESPONSETIMING) ) { \
+ if (uset && (*_ptr_sfcb_trace_mask & TRACE_RESPONSETIMING) ) { \
gettimeofday(&ev,NULL); \
getrusage(RUSAGE_SELF,&ue); \
getrusage(RUSAGE_CHILDREN,&ce); \
Index: ChangeLog
===================================================================
RCS file: /cvsroot/sblim/sfcb/ChangeLog,v
retrieving revision 1.758
retrieving revision 1.759
diff -u -d -r1.758 -r1.759
--- ChangeLog 10 Apr 2012 15:49:56 -0000 1.758
+++ ChangeLog 11 Apr 2012 22:55:17 -0000 1.759
@@ -1,3 +1,11 @@
+2012-04-11 Chris Buccella <buc...@li...>
+
+ * Makefile.am, cimXmlRequest.c, httpAdapter.c, httpComm.c,
+ providerDrv.c, providerMgr.c, sfcBroker.c, sfcb.cfg.pre.in,
+ trace.c, trace.h:
+ [ 3501314 ] Add dynamic logging and syslog output to sfcb trace
+ (based on patch from Mike Lisanke)
+
2012-04-10 Chris Buccella <buc...@li...>
* cimXmlRequest.c, control.c, httpAdapter.c, sfcb.cfg.pre.in:
Index: sfcBroker.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/sfcBroker.c,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -d -r1.62 -r1.63
--- sfcBroker.c 5 Mar 2012 19:12:09 -0000 1.62
+++ sfcBroker.c 11 Apr 2012 22:55:17 -0000 1.63
@@ -243,6 +243,7 @@
free((void *)sfcBrokerStart);
pthread_mutex_unlock(&syncMtx);
+ _SFCB_TRACE_STOP();
if (restartBroker) {
char *emsg=strerror(errno);
@@ -707,19 +708,16 @@
/* trace mask not specified, check in config file */
getControlNum("traceMask",&tmask);
}
-
- if (tmask) {
- if (getControlNum("traceLevel",&tracelevel) || tracelevel == 0) {
- /* no tracelevel found in config file, use default */
- tracelevel = 1;
- }
- if (getenv("SFCB_TRACE_FILE") == NULL &&
- getControlChars("traceFile",&tracefile) == 0) {
- /* only set tracefile from config file if not specified via env */
- _SFCB_TRACE_SETFILE(tracefile);
- }
- _SFCB_TRACE_START(tracelevel,tmask);
+ if (getControlNum("traceLevel",&tracelevel) || tracelevel == 0) {
+ /* no tracelevel found in config file, use default */
+ tracelevel = 1;
}
+ if (getenv("SFCB_TRACE_FILE") == NULL &&
+ getControlChars("traceFile",&tracefile) == 0) {
+ /* only set tracefile from config file if not specified via env */
+ _SFCB_TRACE_SETFILE(tracefile);
+ }
+ _SFCB_TRACE_START(tracelevel,tmask);
// SFCB_DEBUG
#ifndef SFCB_DEBUG
Index: providerMgr.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/providerMgr.c,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -d -r1.81 -r1.82
--- providerMgr.c 12 Mar 2012 22:30:52 -0000 1.81
+++ providerMgr.c 11 Apr 2012 22:55:17 -0000 1.82
@@ -1167,7 +1167,7 @@
struct rusage us,ue;
struct timeval sv, ev;
- if (_sfcb_trace_mask & TRACE_RESPONSETIMING) {
+ if (*_ptr_sfcb_trace_mask & TRACE_RESPONSETIMING) {
gettimeofday(&sv,NULL);
getrusage(RUSAGE_SELF,&us);
}
@@ -1317,7 +1317,7 @@
releaseHeap(heapCtl);
#ifdef SFCB_DEBUG
- if (_sfcb_trace_mask & TRACE_RESPONSETIMING) {
+ if (*_ptr_sfcb_trace_mask & TRACE_RESPONSETIMING) {
gettimeofday(&ev,NULL);
getrusage(RUSAGE_SELF,&ue);
_sfcb_trace(1,__FILE__,__LINE__,
Index: trace.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/trace.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- trace.c 21 Jun 2011 22:53:50 -0000 1.17
+++ trace.c 11 Apr 2012 22:55:17 -0000 1.18
@@ -34,6 +34,9 @@
#include <sys/types.h>
#include <unistd.h>
#include <pthread.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <stdlib.h>
#include "config.h"
/* ---------------------------------------------------------------------------*/
@@ -47,7 +50,12 @@
int _sfcb_debug = 0;
unsigned long _sfcb_trace_mask = 0;
+/* use pointer indirect _sfcb_trace_mask to allow shared memory flag */
+unsigned long *_ptr_sfcb_trace_mask = &_sfcb_trace_mask;
+void *vpDP = NULL;
+int shmid;
char *_SFCB_TRACE_FILE = NULL;
+int _SFCB_TRACE_TO_SYSLOG = 0;
TraceId traceIds[]={
{"providerMgr", TRACE_PROVIDERMGR},
@@ -101,7 +109,8 @@
void _sfcb_trace_stop()
{
- _sfcb_debug = 0;
+ shmctl(shmid, IPC_RMID, 0);
+ _sfcb_debug = 0;
}
void _sfcb_trace_init()
@@ -110,6 +119,25 @@
char *var = NULL;
char *err = NULL;
FILE *ferr = NULL;
+ int tryid = 0xDEB001;
+
+ while ((shmid = shmget(tryid, sizeof(unsigned long), (IPC_CREAT | 0660))) < 0 && (errno == EEXIST)) tryid++;
+ mlogf(M_INFO,M_SHOW,"--- Shared memory ID for tracing: %x\n", tryid);
+ if (shmid < 0) {
+ mlogf(M_ERROR,M_SHOW, "shmget(%x) failed in %s at line %d.\n", tryid, __FILE__, __LINE__ );
+ abort();
+ }
+ else {
+ vpDP = shmat( shmid, NULL, 0 );
+
+ if (vpDP == (void*)-1) {// shmat returns an error
+ mlogf(M_ERROR,M_SHOW, "shmat(%u,) failed with errno = %s(%u) in %s at line %d.\n", shmid, strerror(errno), errno, __FILE__, __LINE__ );
+ abort();
+ }
+ else {
+ _ptr_sfcb_trace_mask = (unsigned long *)vpDP;
+ }
+ }
var = getenv("SFCB_TRACE");
if (var != NULL) {
@@ -176,15 +204,23 @@
strftime(tm, 20, "%m/%d/%Y %H:%M:%S", &cttm);
}
- if (colorTrace) {
- changeTextColor(0);
- fprintf(ferr, "[%i] [%s] %d/%p --- %s(%i) : %s\n", level, tm, currentProc, (void *)pthread_self(), file,
- line, msg);
- changeTextColor(1);
- }
- else {
- fprintf(ferr, "[%i] [%s] %d/%p --- %s(%i) : %s\n", level, tm, currentProc, (void *)pthread_self(), file,
+ if (*_ptr_sfcb_trace_mask) {
+ if (_SFCB_TRACE_TO_SYSLOG) {
+ /* ERROR is the default syslog level, if a user does not specify INFO or DEBUG.
+ ERROR guarantees output will end up in syslog */
+ mlogf(M_ERROR,M_SHOW,"[%i] [%s] %d/%p --- %s(%i) : %s\n", level, tm, currentProc, (void *)pthread_self(), file,
line, msg);
+ }
+ else if (colorTrace) {
+ changeTextColor(0);
+ fprintf(ferr, "[%i] [%s] %d/%p --- %s(%i) : %s\n", level, tm, currentProc, (void *)pthread_self(), file,
+ line, msg);
+ changeTextColor(1);
+ }
+ else {
+ fprintf(ferr, "[%i] [%s] %d/%p --- %s(%i) : %s\n", level, tm, currentProc, (void *)pthread_self(), file,
+ line, msg);
+ }
}
free(tm);
@@ -197,9 +233,10 @@
}
-extern void _sfcb_set_trace_mask(int n)
+extern void _sfcb_set_trace_mask(unsigned long n)
{
- _sfcb_trace_mask = n;
+ unsigned long *pulDP = (unsigned long*)vpDP;
+ *pulDP = n;
}
extern void _sfcb_set_trace_file(char * file)
@@ -207,7 +244,11 @@
if (_SFCB_TRACE_FILE) {
free (_SFCB_TRACE_FILE);
}
- if (strcmp(file,"stderr") == 0) {
+ if (strcmp(file, "syslog") == 0) {
+ _SFCB_TRACE_FILE = NULL;
+ _SFCB_TRACE_TO_SYSLOG = 1;
+ }
+ else if (strcmp(file,"stderr") == 0) {
_SFCB_TRACE_FILE = NULL;
} else {
_SFCB_TRACE_FILE = strdup(file);
Index: sfcb.cfg.pre.in
===================================================================
RCS file: /cvsroot/sblim/sfcb/sfcb.cfg.pre.in,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- sfcb.cfg.pre.in 10 Apr 2012 15:49:56 -0000 1.32
+++ sfcb.cfg.pre.in 11 Apr 2012 22:55:17 -0000 1.33
@@ -245,6 +245,7 @@
## Location of the trace file.
## Can be overriden by setting environment variable SFCB_TRACE_FILE
+## The special value "syslog" will send trace to the syslog
## Default is stderr
#traceFile: stderr
Index: httpAdapter.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/httpAdapter.c,v
retrieving revision 1.105
retrieving revision 1.106
diff -u -d -r1.105 -r1.106
--- httpAdapter.c 10 Apr 2012 15:49:56 -0000 1.105
+++ httpAdapter.c 11 Apr 2012 22:55:17 -0000 1.106
@@ -1071,13 +1071,13 @@
ctx.sessionId=sessionId;
#ifdef SFCB_DEBUG
- if ((_sfcb_trace_mask & TRACE_RESPONSETIMING) ) {
+ if ((*_ptr_sfcb_trace_mask & TRACE_RESPONSETIMING) ) {
gettimeofday(&sv,NULL);
getrusage(RUSAGE_SELF,&us);
uset=1;
}
- if ((_sfcb_trace_mask & TRACE_XMLIN) ) {
+ if ((*_ptr_sfcb_trace_mask & TRACE_XMLIN) ) {
_sfcb_trace(1,__FILE__,__LINE__,
_sfcb_format_trace("-#- xmlIn %d bytes:\n%*s",inBuf.content_length,
inBuf.content_length,(char*)inBuf.content));
@@ -1101,7 +1101,7 @@
releaseAuthHandle();
#ifdef SFCB_DEBUG
- if (uset && (_sfcb_trace_mask & TRACE_RESPONSETIMING) ) {
+ if (uset && (*_ptr_sfcb_trace_mask & TRACE_RESPONSETIMING) ) {
gettimeofday(&ev,NULL);
getrusage(RUSAGE_SELF,&ue);
_sfcb_trace(1,__FILE__,__LINE__,
Index: NEWS
===================================================================
RCS file: /cvsroot/sblim/sfcb/NEWS,v
retrieving revision 1.679
retrieving revision 1.680
diff -u -d -r1.679 -r1.680
--- NEWS 10 Apr 2012 15:49:56 -0000 1.679
+++ NEWS 11 Apr 2012 22:55:17 -0000 1.680
@@ -4,6 +4,7 @@
New features:
- 3440300 Allow forced chunked responses
+- 3501314 Add dynamic logging and syslog output to sfcb trace
Bugs fixed:
Index: trace.h
===================================================================
RCS file: /cvsroot/sblim/sfcb/trace.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- trace.h 6 Feb 2009 00:02:11 -0000 1.16
+++ trace.h 11 Apr 2012 22:55:17 -0000 1.17
@@ -28,7 +28,7 @@
#ifdef SFCB_DEBUG
#define _SFCB_TRACE(LEVEL,STR) \
- if ((_sfcb_trace_mask & __traceMask) && (LEVEL<=_sfcb_debug) && (LEVEL>0) ) \
+ if ((*_ptr_sfcb_trace_mask & __traceMask) && (LEVEL<=_sfcb_debug) && (LEVEL>0) ) \
_sfcb_trace(LEVEL,__FILE__,__LINE__,_sfcb_format_trace STR);
#define _SFCB_ENTER(n,f) \
@@ -59,7 +59,7 @@
#define _SFCB_TRACE_FUNCTION(LEVEL,f) \
_SFCB_TRACE(LEVEL,("Invoking trace function %s",#f)); \
- if ((_sfcb_trace_mask & __traceMask) && (LEVEL<=_sfcb_debug) && (LEVEL>0) ) { \
+ if ((*_ptr_sfcb_trace_mask & __traceMask) && (LEVEL<=_sfcb_debug) && (LEVEL>0) ) { \
f;}
#define _SFCB_ABORT() {\
@@ -70,14 +70,15 @@
_sfcb_trap(n);
extern int _sfcb_debug;
-extern unsigned long _sfcb_trace_mask;
+//MGL use pointer indirect _sfcb_trace_mask to allow shared memory flag
+extern unsigned long *_ptr_sfcb_trace_mask;
extern char *_sfcb_format_trace(char *fmt, ...);
extern void _sfcb_trace(int, char *, int, char *);
extern void _sfcb_trace_start(int l);
extern void _sfcb_trace_init();
extern void _sfcb_trace_stop();
-extern void _sfcb_set_trace_mask(int n);
+extern void _sfcb_set_trace_mask(unsigned long n);
extern void _sfcb_set_trace_file(char * file);
extern void _sfcb_trap(int n);
@@ -98,7 +99,7 @@
#define TRAP(n)
#endif
-extern void _sfcb_set_trace_mask(int n);
+extern void _sfcb_set_trace_mask(unsigned long n);
typedef struct traceId {
char *id;
@@ -140,8 +141,8 @@
#define TRACE_SOCKETS 16384
#define TRACE_MEMORYMGR 32768
#define TRACE_MSGQUEUE 65536
-#define TRACE_XMLPARSING 131072
-#define TRACE_RESPONSETIMING 262144
+#define TRACE_XMLPARSING 131072
+#define TRACE_RESPONSETIMING 262144
#define TRACE_DBPDAEMON 524288
#define TRACE_SLP 1048576
Index: httpComm.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/httpComm.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- httpComm.c 7 Nov 2008 17:00:44 -0000 1.12
+++ httpComm.c 11 Apr 2012 22:55:17 -0000 1.13
@@ -63,7 +63,7 @@
_SFCB_ENTER(TRACE_HTTPDAEMON | TRACE_XMLOUT, "commWrite");
#ifdef SFCB_DEBUG
- if ((_sfcb_trace_mask & TRACE_XMLOUT) ) {
+ if ((*_ptr_sfcb_trace_mask & TRACE_XMLOUT) ) {
char *mp,*m=alloca(count*2),*d=(char*)data;
int i;
_SFCB_TRACE(1,("->> xmlOut %d bytes:\n",count));
|