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