On Fri, 2020-09-25 at 15:34 +0000, 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 may also want to look at benchmarking: https://www.kamailio.org/docs/modules/stable/modules/benchmark.html
As for the data formatting, I'm sure you can accomplish what you'd like with transformations, but that being said, it might also be beneficial to just mark the info and then use an outside script or programs to calculate the data.
--fred