[svn-commits] r197 - in branches/advisor/src: back/scf/scm front/st/shell_unix

thial01 at ingres.com thial01 at ingres.com
Sat Aug 23 10:37:10 PDT 2008


Author: thial01
Date: 2008-08-23 10:37:10 -0700 (Sat, 23 Aug 2008)
New Revision: 197

Modified:
   branches/advisor/src/back/scf/scm/scmonitor.sc
   branches/advisor/src/back/scf/scm/workloaddb.sql
   branches/advisor/src/front/st/shell_unix/iisudbms.sh
Log:
Adding alerter to monitordb. Triggers on workloaddb can now alert the DBA - see #174


Modified: branches/advisor/src/back/scf/scm/scmonitor.sc
===================================================================
--- branches/advisor/src/back/scf/scm/scmonitor.sc	2008-08-23 13:36:51 UTC (rev 196)
+++ branches/advisor/src/back/scf/scm/scmonitor.sc	2008-08-23 17:37:10 UTC (rev 197)
@@ -102,6 +102,9 @@
 i4		deadlocks = 0;
 i4		lock_wait = 0;
 
+/* This will hold the external command we call when a dbevent is raised */
+char		alert_cmd[1000];
+
 /*{
 **
 **  Name: get_statements() -   read statements from IMA
@@ -161,7 +164,7 @@
         {
             break;
         }
-        else if (sqlca.sqlcode != 0)
+        else if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
         {
             SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
             PCexit(FAIL);
@@ -253,7 +256,7 @@
         		values (:statement);
         }
         	
-		if (sqlca.sqlcode != 0)
+	if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
         {
             SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
             PCexit(FAIL);
@@ -337,7 +340,7 @@
         {
             break;
         }
-        else if (sqlca.sqlcode != 0)
+        else if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
         {
             SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
             PCexit(FAIL);
@@ -415,8 +418,8 @@
         	exec sql insert into workload
         		values (:workload);
         		
-			if (sqlca.sqlcode != 0)
-    	    {
+	if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
+	{
         	    SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
             	PCexit(FAIL);
         	}
@@ -494,7 +497,7 @@
         {
             break;
         }
-        else if (sqlca.sqlcode != 0)
+        else if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
         {
             SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
             PCexit(FAIL);
@@ -595,7 +598,7 @@
         		values (:table);
         }
         	
-		if (sqlca.sqlcode != 0)
+	if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
         {
             SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
             PCexit(FAIL);
@@ -673,7 +676,7 @@
         {
             break;
         }
-        else if (sqlca.sqlcode != 0)
+        else if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
         {
             SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
             PCexit(FAIL);
@@ -769,7 +772,7 @@
         		values (:attribute);
         }
         	
-		if (sqlca.sqlcode != 0)
+	if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
         {
             SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
             PCexit(FAIL);
@@ -847,7 +850,7 @@
         {
             break;
         }
-        else if (sqlca.sqlcode != 0)
+        else if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
         {
             SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
             PCexit(FAIL);
@@ -943,7 +946,7 @@
         		values (:index);
         }
         	
-		if (sqlca.sqlcode != 0)
+	if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
         {
             SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
             PCexit(FAIL);
@@ -1022,7 +1025,7 @@
         {
             break;
         }
-        else if (sqlca.sqlcode != 0)
+        else if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
         {
             SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
             PCexit(FAIL);
@@ -1103,7 +1106,7 @@
         		values (:reference);
         }
         	
-		if (sqlca.sqlcode != 0)
+	if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
         {
             SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
             PCexit(FAIL);
@@ -1166,7 +1169,7 @@
 			into :statistics
 			from ima_scm_statistics;
 		
-	if (sqlca.sqlcode != 100 && sqlca.sqlcode != 0)
+	if (sqlca.sqlcode != 100 && sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
 	{
 		SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
 		PCexit(FAIL);
@@ -1266,7 +1269,7 @@
    	exec sql insert into statistics
    		values (:statistics, :time);
         	
-	if (sqlca.sqlcode != 0)
+	if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
 	{
 		SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
 		PCexit(FAIL);
@@ -1345,6 +1348,75 @@
 
 /*{
 **
+**  Name: check_alert() -   check for a raised db event
+**
+**  Description:
+**	Checks if there is a queued db event raised by a trigger on the workload db 
+**
+**  Inputs:
+**		none
+**
+**  Outputs:
+**	Returns:
+**	    none
+**	Exceptions:
+**
+**  History:
+**      23-Aug-2008 (thial01)
+**          Created
+*/
+
+VOID
+check_alert( VOID ) 
+{
+
+#ifdef DEBUG 
+	SIprintf("check_alert\n");
+#endif
+
+	exec sql begin declare section;
+		char		text[255];
+	exec sql end declare section;
+
+	for (;;) {
+		text[0] = '\0';
+
+		exec sql get dbevent;
+		exec sql inquire_sql (:text = dbeventtext);
+
+		if (text[0] != '\0') {
+			
+			/* Check if we were asked to call an external command */
+			if (alert_cmd[0] != '\0') {
+
+				char	*argv[4];
+				i4	argc = 2;
+				PID	pid;
+
+				argv[0] = alert_cmd;
+				argv[1] = text;
+				argv[2] = '\0';
+
+#ifdef DEBUG
+				SIprintf("calling %s '%s'\n", alert_cmd, text);
+#endif
+
+				PCspawn(argc, argv, PC_NO_WAIT, (LOCATION *)NULL, (LOCATION *)NULL, &pid);
+
+			}
+		} else 
+		{
+			/* No events in the queue */
+			break;
+		}
+	} 
+
+	return;
+}
+
+
+/*{
+**
 **  Name: main() -   main entry point to the tool.
 **
 **  Description:
@@ -1390,20 +1462,30 @@
     MEadvise(ME_INGRES_ALLOC); 
 
 	/* Process the command line to get all the necessary parameters */	
-    if (argc != 2)
+    if (argc != 2 && argc != 4)
     {
     	SIprintf("Invalid number of parameters given\n");
     	SIprintf("Usage:\n");
-    	SIprintf("  %s database_name\n", argv[0]);
+    	SIprintf("  %s [-e event_handler] database_name\n", argv[0]);
+	SIprintf("    event_handler	external command called when\n");
+	SIprintf("			workloaddb alert is raised\n");
     	PCexit(FAIL);
     }
+
+	alert_cmd[0] = '\0';
+
+	if (argc == 4) 
+	{
+		STncpy(alert_cmd, argv[2], 1000);
+		alert_cmd[999] = '\0';
+	} 
   			
-	STncpy(db_name, argv[1], DB_MAXNAME);
+	STncpy(db_name, argv[argc-1], DB_MAXNAME);
     db_name[DB_MAXNAME-1] = '\0';
     
     /* Let's see if the database is valid */
     exec sql connect :db_name;
-	if (sqlca.sqlcode != 0)
+	if (sqlca.sqlcode != 0 && sqlca.sqlcode != 710)
 	{
 		SIprintf("Error: %s\n", sqlca.sqlerrm.sqlerrmc);
 		PCexit(FAIL);
@@ -1440,6 +1522,7 @@
 
 	exec sql connect workloaddb session 2;	/* Session 2 for the workload db */
 	exec sql set autocommit on;
+	exec sql register dbevent monitor_alert;
 	
 	exec sql set_sql(session = 1);
 	
@@ -1491,6 +1574,9 @@
 			put_references();
 			put_statistics();
 			
+			/* Check dbevent for queued alert */
+			check_alert();
+
 			/* 
 			** Let's delete old entries
 			** to avoid an infinitely growing DB

Modified: branches/advisor/src/back/scf/scm/workloaddb.sql
===================================================================
--- branches/advisor/src/back/scf/scm/workloaddb.sql	2008-08-23 13:36:51 UTC (rev 196)
+++ branches/advisor/src/back/scf/scm/workloaddb.sql	2008-08-23 17:37:10 UTC (rev 197)
@@ -141,6 +141,26 @@
 ) 
 \p\g
 
+drop dbevent monitor_alert\p\g
+
+create dbevent monitor_alert\p\g
+
+drop procedure alert\p\g
+
+create procedure alert 
+    (text varchar(1000) not null) as 
+begin 
+    raise dbevent monitor_alert :text; 
+end
+\p\g
+
+/*
+create rule example_rule after insert 
+  of statistics
+  where new.current_sessions = new.max_sessions
+  execute procedure alert('Maximum number of sessions reached!')\p\g
+*/
+
 grant all privileges on statements to public with grant option\p\g
 grant all privileges on workload to public with grant option\p\g
 grant all privileges on tables to public with grant option\p\g
@@ -148,4 +168,6 @@
 grant all privileges on indexes to public with grant option\p\g
 grant all privileges on references to public with grant option\p\g
 grant all privileges on statistics to public with grant option\p\g
+grant raise, register on dbevent monitor_alert to public with grant option\p\g
+grant execute on procedure alert to public with grant option\p\g
 

Modified: branches/advisor/src/front/st/shell_unix/iisudbms.sh
===================================================================
--- branches/advisor/src/front/st/shell_unix/iisudbms.sh	2008-08-23 13:36:51 UTC (rev 196)
+++ branches/advisor/src/front/st/shell_unix/iisudbms.sh	2008-08-23 17:37:10 UTC (rev 197)
@@ -3696,7 +3696,7 @@
 !
 	[ -f "$II_SYSTEM/ingres/files/iianalyze/workloaddb.sql" ] &&
 	    ( $DOIT cd "$II_SYSTEM/ingres/files/iianalyze" ; \
-		$DOIT sql workloaddb < workloaddb.sql ) ||
+		$DOIT sql workloaddb < workloaddb.sql > /dev/null ) ||
 		{
 		    WKLDBDB_ERROR=Y
 		    NONFATAL_ERROR=Y




More information about the svn-commits mailing list