123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
- <book id="timer" xmlns:xi="http://www.w3.org/2001/XInclude">
- <bookinfo>
- <title>timer module</title>
- <authorgroup>
- <author>
- <firstname>Tomas</firstname>
- <surname>Mandys</surname>
- <affiliation><orgname>Iptel.org</orgname></affiliation>
- <address>
- <email>tomas dot mandys at iptel dot org</email>
- </address>
- </author>
- </authorgroup>
- <copyright>
- <year>2007</year>
- <holder>iptelorg GmbH</holder>
- </copyright>
- </bookinfo>
- <toc></toc>
- <chapter>
- <title>Admin Guide</title>
- <section id="timer.overview">
- <title>Overview</title>
- <para>
- The module supports triggering specific route block on timer.
- </para>
- </section>
- <section id="timer.dep">
- <title>Dependencies</title>
-
- <para>
- none
- </para>
- </section>
- <section id="timer.syntax">
- <title>ABNF syntax</title>
- <programlisting>
- timer_id = alphanum
- slow_fast = "slow" | "fast"
- declare_timer_syntax = timer_id "=" (route#|route_name) "," interval "," slow_fast "," ["enable"]
- enable_disable = "0" | "1"
- </programlisting>
- </section>
- <section id="timer.parameters">
- <title>Parameters</title>
- <section id="timer.p.declare_timer">
- <title><varname>declare_timer</varname> (string)</title>
- <para>
- Declares timer route which will be called in specific interval.
- </para>
- <para>
- The format is:
- </para>
- <programlisting>
- declare_timer = declare_timer_syntax
- </programlisting>
- <para>
- <emphasis>timer_id</emphasis> is timer identifier, <emphasis>route</emphasis> is handler to be called when
- timer is triggered, <emphasis>interval</emphasis> is timer interval in milliseconds, <emphasis>slow_fast</emphasis>
- determines if handler will be hooked in slow or fast timer queue, fast timer handler returns
- as quickly as possible, slow timer handler may spend longer time, see ser/doc/timers.txt documentation. Use <emphasis>enable</emphasis>
- to enable timer when ser is starting, otherwise use <function>timer_enable</function> to start it later.
- </para>
- <example>
- <title>Example <varname>declare_timer</varname></title>
- <programlisting>
- ...
- modparam("timer", "declare_timer", "MY_TIMER=MY_TIMER_ROUTE,10,slow,enable");
- ...
- </programlisting>
- </example>
- </section>
- </section>
- <section id="timer.functions">
- <title>Functions</title>
- <section id="timer.p.timer_enable">
- <title>
- <function>timer_enable(timer_id, enable_disable)</function>
- </title>
- <para>
- Enable/disable timer route specified by <varname>timer_id</varname>. Because of timer core API the callback
- is not disabled immediately but is removed from handler by itself not to decrease performance.
- Disabling and enabling in sequence may be tricky.
-
- <emphasis>timer_id</emphasis> references to timer declared by <varname>declare_timer</varname>.
- </para>
- <example>
- <title><function>timer_enable</function> usage</title>
- <programlisting>
- ...
- timer_enable("MY_TIMER", 1);
- ...
- </programlisting>
- </example>
- </section>
- <section id="timer.timer.timer_id.enabled">
- <title>
- <function>@timer.timer.timer_id.enabled</function>
- </title>
- <para>
- Return true ("1") if timer specified by <varname>timer_id</varname> is enabled,
- otherwise returns false ("0").
- </para>
- <example>
- <title><function>timer.timer.timer_id.enabled</function> usage</title>
- <programlisting>
- if (@timer.timer.MY_TIMER.enabled == "1") {
- ....
- }
- </programlisting>
- </example>
- </section>
- <section id="timer.executed">
- <title>
- <function>@timer.executed</function>
- </title>
- <para>
- Returns name of timer which has been executed, i.e. non empty value is returned only
- when handler is being processed.
- </para>
- <example>
- <title><function>timer.executed</function> usage</title>
- <programlisting>
- if (@timer.executed != "") {
- # timer is being handled
- ....
- }
- </programlisting>
- </example>
- </section>
- </section>
- <section id="timer.examples">
- <title>Examples</title>
- <example>
- <title>timer common example</title>
- <programlisting>
- loadmodule "modules/xprint/xprint.so"
- loadmodule "modules/timer/timer.so"
- modparam("timer", "declare_timer", "tmr1=ONTIMER,1000");
- modparam("timer", "declare_timer", "tmr2=ONTIMER2,2000,slow,enable");
- route["print"] {
- xplog("L_INFO", "fired: %@timer.executed\n");
- }
- route["ONTIMER"] {
- # do something
- route("print");}
- route["ONTIMER2"] {
- # do something
- timer_enable("tmr1", 0);
- route("print");
- }
- </programlisting>
- </example>
- <example>
- <title>Using timer module for testing a functionality</title>
- <para>
- The timer module may be used to test a functionality being developed and
- not requiring real request.A developer may put tested code in route section
- which is called once after ser starts.
- </para>
- <programlisting>
-
- loadmodule "timer";
- loadmodule "xprint";
- modparam("timer", "declare_timer", "TIMER_TEST=TEST,100,,enable");
- route {
- xplog("L_E","main route");
- }
-
- route[TEST] {
- timer_enable("TIMER_TEST", "0");
- xplog("L_E","test start\n");
-
- # add here tested functionality
-
- xplog("L_E","test end\n");
- }
- </programlisting>
- </example>
- </section>
- </chapter>
- </book>
|