DSM: sys.getTimestamp() and sys.subTimestamp()

development of this was sponsored by TelTech Systems Inc
sayer/1.4-spce2.6
Stefan Sayer 16 years ago
parent cad6589d67
commit 63d5b66d31

@ -47,6 +47,10 @@ MOD_ACTIONEXPORT_BEGIN(MOD_CLS_NAME) {
DEF_CMD("sys.unlinkArray", SCUnlinkArrayAction);
DEF_CMD("sys.tmpnam", SCTmpNamAction);
DEF_CMD("sys.popen", SCPopenAction);
DEF_CMD("sys.getTimestamp", SCSysGetTimestampAction);
DEF_CMD("sys.subTimestamp", SCSysSubTimestampAction);
} MOD_ACTIONEXPORT_END;
MOD_CONDITIONEXPORT_BEGIN(MOD_CLS_NAME) {
@ -258,7 +262,6 @@ EXEC_ACTION_START(SCTmpNamAction) {
}
} EXEC_ACTION_END;
CONST_ACTION_2P(SCPopenAction, '=', false);
EXEC_ACTION_START(SCPopenAction) {
string dst_var = par1;
@ -300,3 +303,59 @@ EXEC_ACTION_START(SCPopenAction) {
DBG("child process returned status %d\n", status);
} EXEC_ACTION_END;
EXEC_ACTION_START(SCSysGetTimestampAction) {
string varname = resolveVars(arg, sess, sc_sess, event_params);
struct timeval tv;
gettimeofday(&tv, NULL);
// long unsigned msecs = tv.tv_sec * 1000 + tv.tv_usec / 1000;
char ms_buf[40];
snprintf(ms_buf, 40, "%lu", tv.tv_sec);
sc_sess->var[varname+".tv_sec"] = ms_buf;
snprintf(ms_buf, 40, "%lu", tv.tv_usec);
sc_sess->var[varname+".tv_usec"] = ms_buf;
DBG("got timestamp $%s=%s, $%s=%s, \n",
(varname+".tv_sec").c_str(), sc_sess->var[varname+".tv_sec"].c_str(),
(varname+".tv_usec").c_str(), sc_sess->var[varname+".tv_usec"].c_str()
);
} EXEC_ACTION_END;
CONST_ACTION_2P(SCSysSubTimestampAction, ',', false);
EXEC_ACTION_START(SCSysSubTimestampAction) {
string t1 = resolveVars(par1, sess, sc_sess, event_params);
string t2 = resolveVars(par2, sess, sc_sess, event_params);
struct timeval tv1;
struct timeval tv2;
tv1.tv_sec = atol(sc_sess->var[t1+".tv_sec"].c_str());
tv1.tv_usec = atol(sc_sess->var[t1+".tv_usec"].c_str());
tv2.tv_sec = atol(sc_sess->var[t2+".tv_sec"].c_str());
tv2.tv_usec = atol(sc_sess->var[t2+".tv_usec"].c_str());
struct timeval diff;
timersub(&tv1,&tv2,&diff);
char ms_buf[40];
snprintf(ms_buf, 40, "%lu", diff.tv_sec);
sc_sess->var[t1+".tv_sec"] = ms_buf;
snprintf(ms_buf, 40, "%lu", diff.tv_usec);
sc_sess->var[t1+".tv_usec"] = ms_buf;
// may be overflowing - use only if timestamps known
snprintf(ms_buf, 40, "%lu", diff.tv_sec * 1000 + diff.tv_usec / 1000);
sc_sess->var[t1+".msec"] = ms_buf;
DBG("sub $%s = %s, $%s = %s, $%s = %s\n",
(t1+".tv_sec").c_str(), sc_sess->var[t1+".tv_sec"].c_str(),
(t1+".tv_usec").c_str(), sc_sess->var[t1+".tv_usec"].c_str(),
(t1+".msec").c_str(), sc_sess->var[t1+".msec"].c_str()
);
} EXEC_ACTION_END;

@ -40,4 +40,7 @@ DEF_ACTION_1P(SCUnlinkAction);
DEF_ACTION_2P(SCUnlinkArrayAction);
DEF_ACTION_1P(SCTmpNamAction);
DEF_ACTION_2P(SCPopenAction);
DEF_ACTION_1P(SCSysGetTimestampAction);
DEF_ACTION_2P(SCSysSubTimestampAction);
#endif

@ -7,7 +7,6 @@ Actions:
Array version of unlink (prefix/filename_0 .. prefix/filename_$filename_size)
sys.tmpnam(string varname)
sys.popen($var="command")
execute a command (using popen) and save result in $var
example:
@ -16,7 +15,12 @@ Actions:
#type=="popen", #cause==reason if fails to exec
#type=="pclose", #cause==reason if fails to close pipe
sys.getTimestamp(string varname) - get timestamp in varname.tv_sec/varname.tv_usec
sys.subTimestamp(ts1, ts2) - subtract $ts2 from $ts1, save result in
$ts1.sec, $ts1.msec and $ts1.usec
Conditions:
sys.file_exists(string fname)
sys.file_not_exists(string fname)

Loading…
Cancel
Save