Author: sayer
Date: 2009-05-19 16:38:59 +0200 (Tue, 19 May 2009)
New Revision: 1393

Modified:
   trunk/apps/monitoring/Monitoring.cpp
   trunk/apps/monitoring/Monitoring.h
   trunk/doc/Readme.monitoring
Log:
setExpiration function. Using this together with garbage collector log, 
items in monitoring memory storage can be set as soft state. 

This work was kindly sponsored by Teltech Systems Inc.



Modified: trunk/apps/monitoring/Monitoring.cpp
===================================================================
--- trunk/apps/monitoring/Monitoring.cpp        2009-05-19 14:23:37 UTC (rev 
1392)
+++ trunk/apps/monitoring/Monitoring.cpp        2009-05-19 14:38:59 UTC (rev 
1393)
@@ -63,6 +63,11 @@
 }
 
 int Monitor::onLoad() {
+  AmArg a;
+  a.assertArray();
+  AmArg b;
+  a.pop(b);
+
   // todo: if GC configured, start thread
   AmConfigReader cfg;
   if(cfg.loadFile(AmConfig::ModConfigPath + string(MOD_NAME ".conf"))) {
@@ -92,6 +97,8 @@
     logAdd(args,ret);
   } else if(method == "markFinished"){
     markFinished(args,ret);
+  } else if(method == "setExpiration"){
+    setExpiration(args,ret);
   } else if(method == "get"){
     get(args,ret);
   } else if(method == "getAttribute"){
@@ -120,6 +127,7 @@
     ret.push(AmArg("log"));
     ret.push(AmArg("logAdd"));
     ret.push(AmArg("markFinished"));
+    ret.push(AmArg("setExpiration"));
     ret.push(AmArg("erase"));
     ret.push(AmArg("clear"));
     ret.push(AmArg("clearFinished"));
@@ -184,12 +192,24 @@
   LogBucket& bucket = getLogBucket(args[0].asCStr());
   bucket.log_lock.lock();
   if (!bucket.log[args[0].asCStr()].finished)
-    bucket.log[args[0].asCStr()].finished  = time(0);
+    bucket.log[args[0].asCStr()].finished = time(0);
   bucket.log_lock.unlock();
   ret.push(0);
   ret.push("OK");
 }
 
+void Monitor::setExpiration(const AmArg& args, AmArg& ret) {
+  assertArgCStr(args[0]);
+  assertArgInt(args[1]);
+
+  LogBucket& bucket = getLogBucket(args[0].asCStr());
+  bucket.log_lock.lock();
+  bucket.log[args[0].asCStr()].finished = args[1].asInt();
+  bucket.log_lock.unlock();
+  ret.push(0);
+  ret.push("OK");
+}
+
 void Monitor::erase(const AmArg& args, AmArg& ret) {
   assertArgCStr(args[0]);
   LogBucket& bucket = getLogBucket(args[0].asCStr());

Modified: trunk/apps/monitoring/Monitoring.h
===================================================================
--- trunk/apps/monitoring/Monitoring.h  2009-05-19 14:23:37 UTC (rev 1392)
+++ trunk/apps/monitoring/Monitoring.h  2009-05-19 14:38:59 UTC (rev 1393)
@@ -68,6 +68,7 @@
   void log(const AmArg& args, AmArg& ret);
   void logAdd(const AmArg& args, AmArg& ret);
   void markFinished(const AmArg& args, AmArg& ret);
+  void setExpiration(const AmArg& args, AmArg& ret);
   void clear(const AmArg& args, AmArg& ret);
   void clearFinished(const AmArg& args, AmArg& ret);
   void erase(const AmArg& args, AmArg& ret);

Modified: trunk/doc/Readme.monitoring
===================================================================
--- trunk/doc/Readme.monitoring 2009-05-19 14:23:37 UTC (rev 1392)
+++ trunk/doc/Readme.monitoring 2009-05-19 14:38:59 UTC (rev 1393)
@@ -30,10 +30,12 @@
 
 DI API
 ------
-functions to log, e.g. from inside SEMS:
+functions to log, e.g. from inside SEMS (but may also be like memcache from 
outside):
  log(ID, key, value [, key, value [, key, value [...]]])  - set one or 
multiple AVPs
  logAdd(ID, key, value)   - add a value to a AVPs
  markFinished(ID) - mark call as finished
+ setExpiration(ID, time) - set expiration of item identified with ID to time 
+                           in seconds since the Epoch (like time(2))
 
 functions to get log, e.g. from the outside:
  list()            - list IDs of calls

_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to