From ec07b96a934fce1793203d6f2531486ec6811aaa Mon Sep 17 00:00:00 2001 From: arjen Date: Wed, 9 Jul 2003 07:25:02 +0000 Subject: [PATCH] Gcm_daemon gathers statistics on parameters, notifications, etc. for all objects. --- src/gcm_daemon/gcm_daemon.php | 126 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 120 insertions(+), 6 deletions(-) diff --git a/src/gcm_daemon/gcm_daemon.php b/src/gcm_daemon/gcm_daemon.php index c83c654..25cc4ee 100755 --- a/src/gcm_daemon/gcm_daemon.php +++ b/src/gcm_daemon/gcm_daemon.php @@ -19,7 +19,10 @@ Gnucomo-0.0.3: December 6th 2002 $Log: gcm_daemon.php,v $ - Revision 1.10 2003-03-29 08:33:58 arjen + Revision 1.11 2003-07-09 07:25:02 arjen + Gcm_daemon gathers statistics on parameters, notifications, etc. for all objects. + + Revision 1.10 2003/03/29 08:33:58 arjen In phpclasses/db.class.php: Added the database connection string as an argument to the function copy_db_class. Fixed the PHP member function db::db_connect(). The Postgres connection @@ -31,7 +34,7 @@ */ -// $Id: gcm_daemon.php,v 1.10 2003-03-29 08:33:58 arjen Exp $ +// $Id: gcm_daemon.php,v 1.11 2003-07-09 07:25:02 arjen Exp $ ini_set('include_path', '.:./classes:../phpclasses'); @@ -48,10 +51,10 @@ require_once "gnucomo.process_log.php"; $project_name = "gnucomo"; //name of the entire project $app_name = "gcm_daemon"; //name of the application running $developrelease = "TRUE"; //Indicates if special debug settings are needed -$db_version = 36; //The db_version indicates what the level of +$db_version = 41; //The db_version indicates what the level of //the database should be. If the database is //old an update will be generated. -$gcmd_version = 3; //This value indicates the active version of the gcm_daemon, +$gcmd_version = 5; //This value indicates the active version of the gcm_daemon, //which is saved in the database. Log records that were not //recognized before will now be recognized. The version doesn't //mean anything in the overall gnucomo project. @@ -128,9 +131,20 @@ if ($dbms->fetch_row() == "TRUE") { do { + // Gather the statistics for each object + + $obj_result = $dbms->query("SELECT objectid FROM object"); + for ($obj = 0; $obj < $dbms->num_rows($obj_result); $obj++) + { + $object = $dbms->fetch_object($obj_result, $obj); + echo "Gathering statistics for object " . $object->objectid . "\n"; + GatherStatistics($object->objectid); + } + //At this place we start processing new log-lines process_log (); - notificationstats(); + //notificationstats(); // This function is obsolete + find_notifications(); $keep_running = 'FALSE'; @@ -256,7 +270,87 @@ function process_log () { } -function notificationstats () { +/* + * Update a single statistic for some object. + * If it does not yet exist, it will be created. + */ + +function UpdateStatistic($objectid, $name, $value) +{ + global $dbms; + + $result = $dbms->query("SELECT objectid FROM object_statistics WHERE + objectid='$objectid' AND statname='$name'"); + if ($dbms->num_rows() == 0) + { + $dbms->query("INSERT INTO object_statistics VALUES + ('$objectid', '$name', '$value')"); + } + else + { + $dbms->query("UPDATE object_statistics SET statvalue='$value' WHERE + statname='$name' AND objectid='$objectid'"); + } +} + +/* + * Gather the statistics for a single object ($objectid). + * We count the number of parameters, removed parameters, notifications + * closed notifications and log entries. The totals of these are + * maintained in a separate table: object_statistics. + */ + +function GatherStatistics($objectid) +{ + global $dbms; + + // Gather statistics on parameters + + $r = $dbms->query("SELECT paramid FROM parameter WHERE objectid=CAST('" + . $objectid . "' AS BIGINT)"); + $nr_parameters = $dbms->num_rows($r); + + $removed_parameters = 0; + for ($p = 0; $p < $nr_parameters; $p++) + { + $param = pg_fetch_object($r, $p); + $qry ="select change_nature from history where paramid= CAST('"; + $qry .= $param->paramid . "' AS BIGINT) order by modified desc"; + $rhist = $dbms->query($qry); + $hist = $dbms->fetch_object($rhist, 0); + if ($hist->change_nature == "REMOVED") + { + $removed_parameters++; + } + } + + UpdateStatistic($objectid, 'parameters', $nr_parameters); + UpdateStatistic($objectid, 'removed_parameters', $removed_parameters); + + // Gather statistics on notifications + + $r = $dbms->query("SELECT count(notificationid) FROM notification WHERE + objectid = CAST('" . $objectid . "' AS BIGINT)"); + $cnt = $dbms->fetch_object($r, 0); + UpdateStatistic($objectid, 'notifications', $cnt->count); + + $r = $dbms->query("SELECT count(notificationid) FROM notification WHERE + objectid = CAST('" . $objectid . "' AS BIGINT) AND statuscode ='cls'"); + $cnt = $dbms->fetch_object($r, 0); + UpdateStatistic($objectid, 'closed_notifications', $cnt->count); + + // Gather statistics on log entries + + $r = $dbms->query("SELECT count(logid) FROM log WHERE + objectid = CAST('" . $objectid . "' AS BIGINT)"); + $cnt = $dbms->fetch_object($r, 0); + UpdateStatistic($objectid, 'logs', $cnt->count); +} + +function notificationstats () +{ + + // OBSOLETE // /* This routine will determine how many new notifications have arrived and will * update the statistics in the object-table to keep the performance acceptable @@ -308,5 +402,25 @@ function notificationstats () { } } +function find_notifications () { + +/* + * Do something with notification checks. + * + * INPUT : NONE + * OUTPUT : NONE + */ + + global $dbms; + + //Find checks that have to be executed. + $local_sql = "select * from notification_check where age(last_execution) > time_between_executions"; + $dbms->query($local_sql); + for ($i=0; $i<$dbms->num_rows(); $i++) { + //A check has been found that has to be executed + $dbms->fetch_row(); + } +} + ?> -- 2.11.0