[asterisk-users] Time of Day Routing
Don Kelly
dk at donkelly.biz
Fri Aug 14 08:08:11 CDT 2009
Tony Mountifield wrote:
> In article <05D03313-994B-4892-B045-F61332DDB273 at geekinter.net>,
> Steve Howes <steve at geekinter.net> wrote:
>
>> On 14 Aug 2009, at 09:17, Neeraj Chand wrote:
>>
>>
>>> Asterisk version 1.4
>>> From: Neeraj Chand
>>> Sent: Friday, 14 August 2009 8:17 PM
>>> To: 'asterisk-users at lists.digium.com'
>>> Subject: [asterisk-users] Time of Day Routing
>>>
>>> Hi David,
>>>
>>> With this:
>>> ifTime(00:00-12:00|*|*|*)
>>>
>>> Whatever time you specify at the end, I believe asterisk continues
>>> to evaluate this condition as true for 2 more minutes.
>>>
>>> So in this case, it will be valid for 00:00-12:02, even though
>>> you've specified 12:00
>>>
>>> Cheers!
>>>
>>> Neeraj
>>>
>>>
>> Post a few hours ago..
>>
>> "Actually, that's 12:02, because times before 1.6.2 are only accurate
>> down
>> to the 2-minute interval. So 12:01 is treated the same as 12:00.
>> Starting
>> with 1.6.2, times are accurate down to the minute."
>>
>
> Hmm, I would still consider it a bug, whether on 1 or 2 minute resolution.
> The example condition should start being true at 00:00 exactly, and stop
> being true at 12:00 exactly. So at 12:00:01 it should NOT match:
>
> if (now >= start_time && now < end_time)
>
> This then is independent of the resolution, provided the end time is an
> exact multiple of that resolution.
>
> After all, if a shop shuts at 5pm prompt, and you get there at 10 seconds
> after 5pm, it is shut, not open until 5:00:59.999999 or whenever.
>
> Cheers
> Tony
>
> ------------------------------------------------------------------------
We're talking precision here, though. With a 2-minute precision, you
have to understand that there IS no 12:00:01 as far as Asterisk is
concerned. There is simply 12:00 and 12:02. At exactly 12:00, it
evaluates true, just as has been put in the if statement. It checks
again at 12:02 and it evaluates false.
That's not a bug. That's just a lack of precision in checking. It can't
check ALL the time without devoting cycles to checking, which takes
cycles away from other things. Think cron on a unix system. Nothing
happens in 30-second increments. Things happen in 1 minute increments at
the smallest because that's the maximum precision that's built into the
program. You could WRITE a cron that checks every 5 seconds, but it's
not a bug in cron that it only checks every 1 minute. That's simply the
way it works.
N.
This explanation about precision doesn't seem to apply to the case
ifTime(00:00-12:00|*|*|*)
This expression can be evaluated at the instant of interest--it doesn't
require wasting cycles for checking (as for a poll or cron) at fixed
intervals.
--Don
More information about the asterisk-users
mailing list