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.



git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@1393 8eb893ce-cfd4-0310-b710-fb5ebe64c474
sayer/1.4-spce2.6
Stefan Sayer 17 years ago
parent a932334e4d
commit 436cca698e

@ -63,6 +63,11 @@ Monitor::~Monitor() {
}
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 @@ void Monitor::invoke(const string& method,
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 @@ void Monitor::invoke(const string& method,
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,7 +192,19 @@ void Monitor::markFinished(const AmArg& args, AmArg& ret) {
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");

@ -68,6 +68,7 @@ class Monitor
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);

@ -30,10 +30,12 @@ This will remove all info about finished sessions preiodically.
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

Loading…
Cancel
Save