[Freeswitch-users] Which Lua script am I?

Mike van Lammeren mike at van.lammeren.net
Fri Mar 5 11:38:37 PST 2010


So much for theory!

Take a look at this sample script.

-- math.randomseed(os.time())

for i=1,9 do -- final version will loop forever
    freeswitch.consoleLog("info", "wake-up #" .. i .. ", random number: " ..
math.random(111,999) .. "\n")
    -- Sleep for a while
    freeswitch.msleep(5000)
end

freeswitch.consoleLog("warning", "Script end.\n")

return 0


If I launch 10 copies of this Lua script with FreeSWITCH, with the
'startup-script' param in lua.conf.xml, then it turns out that each time
through the loop for each script does actually produce a unique random
number. If I comment out the first line, thus seeding the random number
generator, then all 10 scripts give the same 'random' number the first time
through the loop, then a unique random number for each subsequent loop!

Apparently, I don't really have the problem I thought I had.

All the same, I'm still open to suggestions on better ways to achieve my
ultimate goals!

Mike van Lammeren


On Fri, Mar 5, 2010 at 2:32 PM, Mike van Lammeren <mike at van.lammeren.net>wrote:

> I can only talk about the project in vague terms, due to client
> confidentiality, but here goes:
>
> Many thousands of devices will be reporting events, via HTTP Post, to a
> central server farm. There will be at least 5 or 6 web servers recording
> these events, and a similar number of VoIP servers running FreeSWITCH.
> Communication between the web servers and VoIP servers is via a shared MySQL
> Cluster. Certain events will result in FreeSWITCH originating a phone call,
> playing a voice message to a human, then recording a number typed in by that
> human.
>
> It is important that each event result in just one phone call. We don't
> want people bothered with multiple, simultaneous calls, and we don't want
> things to be missed, either.
>
> What do you think?
>
>
> On Fri, Mar 5, 2010 at 2:16 PM, Michael Collins <msc at freeswitch.org>wrote:
>
>> May I ask what the end goal is? It could be that there are better tools in
>> the toolbox to help you...
>>
>> -MC
>>
>> On Fri, Mar 5, 2010 at 11:04 AM, Mike van Lammeren <mike at van.lammeren.net
>> > wrote:
>>
>>> Hello!
>>>
>>> I am working on a high-availability system and need a Lua script that can
>>> run in the background and loop forever, periodically waking up to accomplish
>>> some tasks. I would like to be able to handle at least 10 concurrent tasks.
>>>
>>> My first idea was to have a simple background script that would call
>>> another script, let's call it the 'task' script, every 5 seconds or so. This
>>> would spread the work around, and if any task script quit with an error, the
>>> background script would remain running, and would continue to launch new
>>> task scripts.
>>>
>>> However, I can see no way for the background script to launch other Lua
>>> scripts. Am I missing something? I need something like session:execute(),
>>> but unfortunately this background script has no session, and I'm not sure if
>>> session:execute() can even make a call like the "luarun" console command.
>>>
>>> So, my next ideas was to have 10 copies of the background script. Each
>>> script would loop forever. Upon launch, each script would perform a single
>>> task, then sleep for 60 seconds. This allows handling of 10 concurrent
>>> tasks.
>>>
>>> However, there are some problems with running 10 copies of the same
>>> script, which I believe can be solved if each script could be given a unique
>>> identifier. One problem is that I would like the scripts to actually sleep
>>> for a variable amount of time, say between 55 and 65 seconds, so that the
>>> workload would spread around. Another, similar problem, is that each script
>>> needs to 'claim' a number of database records from a table that is queuing
>>> up work for the scripts. Once again, if each script had a unique identifier,
>>> then I could use an update query to effectively 'set and test' a record that
>>> would be tied to that script instance.
>>>
>>> I could use a random number to identify each script, but since
>>> math.random is seeded with a timestamp that only resolves to seconds, then
>>> all 10 scripts will be given the same sequence of random numbers, and all 10
>>> will run in lock-step with each other. So, random numbers are out. (If I had
>>> a unique ID to seed the random number generator, then I could just use that
>>> unique ID and wouldn't need random numbers.)
>>>
>>> Is there a way of uniquely identifying 10 Lua scripts that FreeSWITCH
>>> launches at startup?
>>>
>>> Or is there a better way of handling this situation altogether? I'm open
>>> to any suggestions that people would care to make!
>>>
>>> (I would entertain the idea of a single script that would start with
>>> FreeSWITCH, then launch 10 other scripts, giving each a unique identifier,
>>> but that brings me back to the original problem of not knowing how to launch
>>> other Lua scripts under FreeSWITCH.)
>>>
>>> Mike van Lammeren
>>>
>>>
>>> _______________________________________________
>>> FreeSWITCH-users mailing list
>>> FreeSWITCH-users at lists.freeswitch.org
>>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>>> http://www.freeswitch.org
>>>
>>>
>>
>> _______________________________________________
>> FreeSWITCH-users mailing list
>> FreeSWITCH-users at lists.freeswitch.org
>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>> http://www.freeswitch.org
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20100305/f7c304ff/attachment-0002.html 


More information about the FreeSWITCH-users mailing list