OSDN Git Service

adjust logmode and logtable
[opengatem/opengatem.git] / mdsrc / managementdb.c
index a7b5ef4..68c1257 100644 (file)
@@ -41,8 +41,8 @@ int initMngDb(void){
   char *user =  GetConfValue("MySqlDb/User");
   char *password = GetConfValue("MySqlDb/Password");
   char *database = GetConfValue("MySqlDb/Database");
-  char *saveLogStr = GetConfValue("SaveLogToMngDb");
   my_bool reconnect;
+  char *confStr;
 
 /* initialize mysql */
   mysql_library_init(-1,NULL,NULL);
@@ -64,10 +64,14 @@ int initMngDb(void){
   reconnect = TRUE;
   mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect);
 
-  /* read a flag from conf file and hold in a variable */
-  if(isNull(saveLogStr)) saveLogToMngDb = 0;
-  else saveLogToMngDb = strtol(saveLogStr, NULL, 2);
+  /* read logmode flag from conf file and hold in a variable */
+  confStr = GetConfValue("SaveLogToMngDb");
+  if(isNull(confStr)) saveLogToMngDb = 0;  /* no conf means no-log */
+  else                saveLogToMngDb = strtol(confStr, NULL, 2);
 
+  /* adjust relation of logmode in conf and logtable in mngdb */
+  AdjustLogModeAndLogTable();
+  
   return TRUE;
 }
 
@@ -269,25 +273,19 @@ int isAllFoundInWatchlistTable(void){
 
   /* send SQL query */
   if (mysql_query(&mysql, queryStr)){
-
-    /* lost of 'watchlist table' is ignored */ 
-    if(strcmp(mysql_error(&mysql), 
-             "Table 'opengatem.watchlist' doesn't exist")!=0){
-     err_msg("ERR at %s#%d: mysql query: %s",__FILE__,__LINE__,
+    err_msg("ERR at %s#%d: mysql query: %s",__FILE__,__LINE__,
             mysql_error(&mysql));
-    }
     return ERROR;
   }
 
-
   res = mysql_use_result(&mysql);
 
   /* output table name */
   row = mysql_fetch_row(res);
 
   /* if not found, row is NULL */
-  if(row==NULL)  found=FALSE;
-  else found=TRUE;
+  if(row==NULL) found=FALSE;
+  else          found=TRUE;
 
   mysql_free_result(res);
 
@@ -295,8 +293,85 @@ int isAllFoundInWatchlistTable(void){
   return found;
 }
 
+/******************************************
+is found table in management db
+input=table name
+return value: 1=found,0=not found or error
+******************************************/
+int isTableFoundInMngDb(char* table){
+  MYSQL_RES *res;
+  MYSQL_ROW row;
+  int found=FALSE;
+  char queryStr[BUFFMAXLN];
+
+  /* if no table, return false */
+  if(isNull(table)) return FALSE;
+  
+  /* prepare query string */
+  snprintf(queryStr, BUFFMAXLN, 
+          "show tables like '%s'", table);
+
+  /* send SQL query */
+  if (mysql_query(&mysql, queryStr)){
+     err_msg("ERR at %s#%d: mysql query: %s",__FILE__,__LINE__,
+            mysql_error(&mysql));
+     return ERROR;
+  }
+  res = mysql_use_result(&mysql);
+  
+  /* output table row */
+  row = mysql_fetch_row(res);
+
+  /* row==NULL means getting no record */
+  if(row==NULL) found=FALSE;
+  else          found=TRUE;
+
+  mysql_free_result(res);
+  return found;
+}
+
+/******************************************
+set closeTime to unclosed sessions in mngdb
+return value: 1=success, 0=error
+******************************************/
+int updateCloseTimeToUnclosedSessionInMngDb(void){
+  
+  char* queryStr="update sessionmd set closeTime=now() where closeTime=0";
+
+  /* send SQL query */
+  if (mysql_query(&mysql, queryStr)){
+     err_msg("ERR at %s#%d: mysql query: %s",__FILE__,__LINE__,
+            mysql_error(&mysql));
+     return FALSE;
+  }
+
+  return TRUE;
+}
+
+/**********************************************************
+adjust the relation of logmode(SaveLogToMngDb) in conf file 
+and logtable(sessionmd) in management db 
+***********************************************************/
+void adjustLogModeAndLogTable(void){
+
+  /* check the existence of table sessionmd in management.db */
+  int isSessionTableFoundInMngDb = IsTableFoundInMngDb("sessionmd");
+
+  /* if logmode=off and session table exists, cleanup all sessions */
+  if(!saveLogToMngDb && isSessionTableFoundInMngDb){
+    UpdateCloseTimeToUnclosedSessionInMngDb();
+  }
+
+  /* if logmode=on and session table does not exist, write error */
+  if(saveLogToMngDb && !isSessionTableFoundInMngDb){
+     err_msg("ERR at %s#%d: please create mysql table. sample script is found in archive",
+            __FILE__,__LINE__);
+  }
+}
+
+
 /********************************************
- routines for debugging output
+ routines for debugging 
 ********************************************/
 int QueryMacFromMngDb(char* macAddress, char* userId, char* extraId){
   int ret;
@@ -354,9 +429,31 @@ int IsAllFoundInWatchlistTable(void){
 }
 
 int DelOldSessionLogInMngDb(void){
-    int ret;
+  int ret;
   if(debug>1) err_msg("DEBUG:=>delOldSessionLogInMngDb()");
   ret = delOldSessionLogInMngDb();
   if(debug>1) err_msg("DEBUG:(%d)<=delOldSessionLogInMngDb()", ret);
   return ret;
 }
+
+int IsTableFoundInMngDb(char* table){
+  int ret;
+  if(debug>1) err_msg("DEBUG:=>isTableFoundInMngDb(%s)", table);
+  ret = isTableFoundInMngDb(table);
+  if(debug>1) err_msg("DEBUG:(%d)<=isTableFoundInMngDb()", ret);
+  return ret;
+}
+
+int UpdateCloseTimeToUnclosedSessionInMngDb(void){
+  int ret;
+  if(debug>1) err_msg("DEBUG:=>updateCloseTimeToUnclosedSessionInMngDb()");
+  ret = updateCloseTimeToUnclosedSessionInMngDb();
+  if(debug>1) err_msg("DEBUG:(%d)<=updateCloseTimeToUnclosedSessionInMngDb()", ret);
+  return ret;
+}
+
+void AdjustLogModeAndLogTable(void){
+  if(debug>1) err_msg("DEBUG:=>adjustLogModeAndLogTable()");
+  adjustLogModeAndLogTable();
+  if(debug>1) err_msg("DEBUG:<=adjustLogModeAndLogTable()");
+}