You are viewing a plain text version of this content. The canonical link for it is here.
Posted to websh-cvs@tcl.apache.org by ro...@apache.org on 2005/10/28 00:01:04 UTC

svn commit: r328961 - in /tcl/websh/trunk/src/generic: log.c log.h modwebsh_ap.c modwebsh_cgi.c

Author: ronnie
Date: Thu Oct 27 15:00:55 2005
New Revision: 328961

URL: http://svn.apache.org/viewcvs?rev=328961&view=rev
Log:
- added keep flag to LogDest and LogLevel structs to
  keep track of levels and filters to keep across requests
  (the ones created in web::initializer code)
- added special command to delete all but these levels and filters
  (web::logfilter delete -requests and web::logdest delete -requests)
  to be used in web::ap::perReqCleanup
- adapted Web_Initializer to accommodate this functionality

Modified:
    tcl/websh/trunk/src/generic/log.c
    tcl/websh/trunk/src/generic/log.h
    tcl/websh/trunk/src/generic/modwebsh_ap.c
    tcl/websh/trunk/src/generic/modwebsh_cgi.c

Modified: tcl/websh/trunk/src/generic/log.c
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/log.c?rev=328961&r1=328960&r2=328961&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/log.c (original)
+++ tcl/websh/trunk/src/generic/log.c Thu Oct 27 15:00:55 2005
@@ -147,6 +147,7 @@
 
 	HashUtlAllocInit(logData->listOfPlugIns, TCL_STRING_KEYS);
 	logData->logSubst = 0;
+	logData->keep = 0;
     }
 
     return logData;
@@ -224,6 +225,7 @@
     logLevel = WebAllocInternalData(LogLevel);
     if (logLevel != NULL) {
 
+	logLevel->keep = 0;
 	logLevel->facility = NULL;
 	logLevel->minSeverity = -1;
 	logLevel->maxSeverity = -1;
@@ -347,14 +349,14 @@
 /* ----------------------------------------------------------------------------
  * createLogDest --
  * ------------------------------------------------------------------------- */
-LogDest *createLogDest(void)
+LogDest *createLogDest()
 {
 
     LogDest *logDest = NULL;
 
     logDest = WebAllocInternalData(LogDest);
 
-    logDest->filter = NULL;
+    logDest->keep = 0;
     logDest->format = NULL;
     logDest->maxCharInMsg = -1;	/* Tcl_Append... --> -1 is all chars */
     logDest->plugIn = NULL;
@@ -613,6 +615,7 @@
 	    logDest->plugIn = logPlugIn;
 	    logDest->plugInData = logPlugInData;
 	    logDest->maxCharInMsg = maxCharInMsg;
+	    logDest->keep = logData->keep;
 
 	    /* ----------------------------------------------------------
 	     * and add to list
@@ -685,20 +688,32 @@
 
 	    switch (objc) {
 	    case 3: {
-	      int inx = getIndexFromLogName(LOG_DEST_PREFIX"%d", Tcl_GetString(objv[2]));
 	      LogDest ** logDests = logData->listOfDests;
-	      if (inx < 0 
-		  || inx >= logData->destSize
-		  || logDests[inx] == NULL) {
-		Tcl_SetResult(interp, "no such log destination \"", NULL);
-		Tcl_AppendResult(interp, Tcl_GetString(objv[2]), "\"",
-				     NULL);
-		return TCL_ERROR;
+	      if (!strcmp("-requests", Tcl_GetString(objv[2]))) {
+		/* special case: delete all destinations NOT created during web::initializer */
+		int i;
+		for (i = 0; i < logData->destSize; i++) {
+		  if (logDests[i] != NULL && !logDests[i]->keep) {
+		    destroyLogDest(logDests[i], interp);
+		    logDests[i] = NULL;
+		  }
+		}
+		return TCL_OK;
+	      } else {
+		int inx = getIndexFromLogName(LOG_DEST_PREFIX"%d", Tcl_GetString(objv[2]));
+		if (inx < 0 
+		    || inx >= logData->destSize
+		    || logDests[inx] == NULL) {
+		  Tcl_SetResult(interp, "no such log destination \"", NULL);
+		  Tcl_AppendResult(interp, Tcl_GetString(objv[2]), "\"",
+				   NULL);
+		  return TCL_ERROR;
+		}
+		destroyLogDest(logDests[inx], interp);
+		logDests[inx] = NULL;
+		return TCL_OK;
+		break;
 	      }
-	      destroyLogDest(logDests[inx], interp);
-	      logDests[inx] = NULL;
-	      return TCL_OK;
-	      break;
 	    }
 	    case 2:
 		/* --------------------------------------------------------
@@ -798,6 +813,7 @@
 		WebFreeIfNotNull(name);
 		return TCL_ERROR;
 	    }
+	    logLevel->keep = logData->keep;
 
 	    /* ------------------------------------------------------------------------
 	     * and add to list
@@ -871,20 +887,32 @@
 
 	    switch (objc) {
 	    case 3: {
-	      int inx = getIndexFromLogName(LOG_FILTER_PREFIX"%d", Tcl_GetString(objv[2]));
 	      LogLevel ** logLevels = logData->listOfFilters;
-	      if (inx < 0 
-		  || inx >= logData->filterSize
-		  || logLevels[inx] == NULL) {
-		Tcl_SetResult(interp, "no such log filter \"", NULL);
-		Tcl_AppendResult(interp, Tcl_GetString(objv[2]), "\"",
-				     NULL);
-		return TCL_ERROR;
+	      if (!strcmp("-requests", Tcl_GetString(objv[2]))) {
+		/* special case: delete all levels NOT created during web::initializer */
+		int i;
+		for (i = 0; i < logData->filterSize; i++) {
+		  if (logLevels[i] != NULL && !logLevels[i]->keep) {
+		    destroyLogLevel(logLevels[i], interp);
+		    logLevels[i] = NULL;
+		  }
+		}
+		return TCL_OK;
+	      } else {
+		int inx = getIndexFromLogName(LOG_FILTER_PREFIX"%d", Tcl_GetString(objv[2]));
+		if (inx < 0 
+		    || inx >= logData->filterSize
+		    || logLevels[inx] == NULL) {
+		  Tcl_SetResult(interp, "no such log filter \"", NULL);
+		  Tcl_AppendResult(interp, Tcl_GetString(objv[2]), "\"",
+				   NULL);
+		  return TCL_ERROR;
+		}
+		destroyLogLevel(logLevels[inx], interp);
+		logLevels[inx] = NULL;
+		return TCL_OK;
+		break;
 	      }
-	      destroyLogLevel(logLevels[inx], interp);
-	      logLevels[inx] = NULL;
-	      return TCL_OK;
-	      break;
 	    }
 	    case 2:
 		/* -----------------------------------------------------

Modified: tcl/websh/trunk/src/generic/log.h
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/log.h?rev=328961&r1=328960&r2=328961&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/log.h (original)
+++ tcl/websh/trunk/src/generic/log.h Thu Oct 27 15:00:55 2005
@@ -103,6 +103,7 @@
  * ------------------------------------------------------------------------- */
 typedef struct LogLevel
 {
+    int keep;
     char *facility;
     Severity minSeverity;
     Severity maxSeverity;	/* only used for filter */
@@ -140,6 +141,7 @@
  * ------------------------------------------------------------------------- */
 typedef struct LogDest
 {
+    int keep;
     LogLevel *filter;
     char *format;
     long maxCharInMsg;
@@ -165,6 +167,7 @@
   int destSize; /* site of destination list */
   Tcl_HashTable *listOfPlugIns;
   int logSubst;	/* 1: subst log message, 0: don't (default 0) */
+  int keep;  /* flag for log config to keep during initializer code */
   /* needed so that global settings can be accessed */
   RequestData * requestData;
 }

Modified: tcl/websh/trunk/src/generic/modwebsh_ap.c
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/modwebsh_ap.c?rev=328961&r1=328960&r2=328961&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/modwebsh_ap.c (original)
+++ tcl/websh/trunk/src/generic/modwebsh_ap.c Thu Oct 27 15:00:55 2005
@@ -45,9 +45,18 @@
 
     if (webInterp->numrequests == 0) {
 
+	/* keep track of log stuff */
+	LogData * logData = (LogData *) Tcl_GetAssocData(interp, WEB_LOG_ASSOC_DATA, NULL);
+	if (logData != NULL)
+	  logData->keep = 1;
+
 	Tcl_IncrRefCount(objv[1]);
 	res = Tcl_EvalObjEx(interp, objv[1], 0);
 	Tcl_DecrRefCount(objv[1]);
+
+	/* reset log flag */
+	if (logData != NULL)
+	  logData->keep = 0;
 
 	if (res != TCL_OK) {
 

Modified: tcl/websh/trunk/src/generic/modwebsh_cgi.c
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/modwebsh_cgi.c?rev=328961&r1=328960&r2=328961&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/modwebsh_cgi.c (original)
+++ tcl/websh/trunk/src/generic/modwebsh_cgi.c Thu Oct 27 15:00:55 2005
@@ -28,11 +28,22 @@
     if (objc != 2) {
       Tcl_WrongNumArgs(interp, 1, objv, "code");
       return TCL_ERROR;
-    }
 
-    Tcl_IncrRefCount(objv[1]);
-    res = Tcl_EvalObjEx(interp, objv[1], 0);
-    Tcl_DecrRefCount(objv[1]);
+    } else {
+
+      /* keep track of log stuff */
+      LogData * logData = (LogData *) Tcl_GetAssocData(interp, WEB_LOG_ASSOC_DATA, NULL);
+      if (logData != NULL)
+	logData->keep = 1;
+
+      Tcl_IncrRefCount(objv[1]);
+      res = Tcl_EvalObjEx(interp, objv[1], 0);
+      Tcl_DecrRefCount(objv[1]);
+
+      /* reset log flag */
+      if (logData != NULL)
+	logData->keep = 0;
+    }
 
     return res;
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: websh-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: websh-cvs-help@tcl.apache.org