On 25.09.20 17:34, Chaigneau, Nicolas wrote:
--snip I would like to compute a time difference (with microseconds precision) when handling a stateless SIP request. --snip
Welcome!
Take a look at: https://www.kamailio.org/wiki/cookbooks/5.4.x/pseudovariables#timeval
You can get down to the microsecond level.
Thanks!
Looking at src\modules\pv\pv_time.c, it seems TV functions just use "gettimeofday". I was looking for a time difference based on a monotonically increasing clock (to avoid possible NTP drifting imprecision).
I've looked at the "benchmark" module which seems to do something like that, but I don't think I can use it for what I need...
Anyhow, I have another question. Using the TV I've come up with the following. This works, except that I don't know how to convert an int to a string padded with zeroes (e.g. 51 => "051"). Is there a transformation that allows to do that?
$var(start_time) = $TV(Sn); # allows to cache $TV(s) and $TV(u)
(...)
$var(end_time) = $TV(Sn); $var(end_s) = $TV(sn); $var(end_us) = $TV(un); $var(diff_us) = $var(end_us) - $TV(u) + (1000000 * ($var(end_s) - $TV(s)));
# convert this to ms (integer part) and us (fractional part) $var(diff_ms) = $var(diff_us) / 1000; $var(diff_us_f) = $var(diff_us) - (1000 * $var(diff_ms));
$var(diff_ms_us) = $var(diff_ms) + "." + $var(diff_us_f); # need to format on 3 digits... can we do the equivalent of sprintf("%03u") somehow ?
You can try with concatenating a variable set to "000" stripped by the length of milliseconds string with the value of the milliseconds string -- see the transformations cookbook for strip variant.
Also, useful for complex operations, have in mind that you can combine use of kamailio cfg scripting language with other embedded interpreters, such as app_jsdt, app_lua, app_python, ...
On the other hand, if you just want to log how long it takes to execute config for a request or a reply, then you can get it by tuning the value of core parameter:
* https://www.kamailio.org/wiki/cookbooks/5.4.x/core#latency_cfg_log
Cheers, Daniel