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