Discussion:
[SR-Users] Adding IPs from which 503 messages originates to a database
aft
2014-09-03 07:39:10 UTC
Permalink
I'm trying to configure HOMER sip capture server to do some accounting
of the cases when "503 Service Unavailable" message arrives from
capture agents.

I've implemented the following to record the source IPs from which 503
message originates.




onreply_route {
......................
......................
......................

else if(status == "503") {
if($sht(a=>alarm::503) == $null) {
$sht(a=>alarm::503) = 0;
$sht(a=>alarm::$si::503) = 0;
}
xlog("Got 503");
xlog("($sht(a=>alarm::$si::503))");
$sht(a=>alarm::$si::503) = $sht(a=>alarm::$si::503) + 1;
}
...................
...................
...................

The following route supposed run periodically to update the databases.

}

route[TIMER_STATS] {

.....................
.....................

xlog("($sht(a=>alarm::$si::503))");
if($sht(a=>alarm::$si::503) > 0) {
sql_query("cb", "INSERT INTO alarm_data (create_date, type,
total, description, source_ip) VALUES(NOW(), 'Too Many 503',
$sht(a=>alarm::$si::503), 'service unavailable', $si)");
xlog("adding stuff to db");
}
$sht(a=>alarm::503) = 0;
$sht(a=>alarm::$si::503) = 0;


}


But the xlog("adding stuff to db") never executed. But in the first
block of code, the log message to print the value
$sht(a=>alarm::$si::503), which is shown to be non zero.

Don't understand why its not working.
--
-Cheers
-Arif
Daniel-Constantin Mierla
2014-09-03 17:36:38 UTC
Permalink
Hello,

The $si is the source ip of the sip packet. Bu in a rtimer route there is
no packet received from the network.

So your config is not going to work for what you want to do.

You can try to use mqueue to push sql queries from sip worker to rtimer as
you need to write something to database.

Cheers,
Daniel
Post by aft
I'm trying to configure HOMER sip capture server to do some accounting
of the cases when "503 Service Unavailable" message arrives from
capture agents.
I've implemented the following to record the source IPs from which 503
message originates.
onreply_route {
......................
......................
......................
else if(status == "503") {
if($sht(a=>alarm::503) == $null) {
$sht(a=>alarm::503) = 0;
$sht(a=>alarm::$si::503) = 0;
}
xlog("Got 503");
xlog("($sht(a=>alarm::$si::503))");
$sht(a=>alarm::$si::503) = $sht(a=>alarm::$si::503) + 1;
}
...................
...................
...................
The following route supposed run periodically to update the databases.
}
route[TIMER_STATS] {
.....................
.....................
xlog("($sht(a=>alarm::$si::503))");
if($sht(a=>alarm::$si::503) > 0) {
sql_query("cb", "INSERT INTO alarm_data (create_date, type,
total, description, source_ip) VALUES(NOW(), 'Too Many 503',
$sht(a=>alarm::$si::503), 'service unavailable', $si)");
xlog("adding stuff to db");
}
$sht(a=>alarm::503) = 0;
$sht(a=>alarm::$si::503) = 0;
}
But the xlog("adding stuff to db") never executed. But in the first
block of code, the log message to print the value
$sht(a=>alarm::$si::503), which is shown to be non zero.
Don't understand why its not working.
--
-Cheers
-Arif
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
--
Daniel-Constantin Mierla - http://www.asipto.com
http://twitter.com/#!/miconda - http://www.linkedin.com/in/micond
<http://www.linkedin.com/in/miconda>
aft
2014-09-06 08:11:42 UTC
Permalink
On Thu, Sep 4, 2014 at 1:57 PM, Daniel-Constantin Mierla
On Wed, Sep 3, 2014 at 11:36 PM, Daniel-Constantin Mierla
Post by Daniel-Constantin Mierla
Hello,
The $si is the source ip of the sip packet. Bu in a rtimer route there is
no
packet received from the network.
So your config is not going to work for what you want to do.
You can try to use mqueue to push sql queries from sip worker to rtimer as
you need to write something to database.
Should i push $si using mq_add() and fetch it using mq_fetch()?
It should work with pushing $si as well.
I was thinking to do the check in onreply route and push the entire sql
query, so the rtimer route just execute it.
Well i don't think it will work that way. Because :

[1] I need to access a=>alarm::$si::503 WHEN the timer goes off to see
how many 503s received. So if i push the sql array , i will not get
the correct value of a=>alarm::$si::503.

[2] Also I can't access alarm::$si::503. If i push $si to mqueue, then
only sensible key is $si itself. And i can't access $si in timer
route.

So I guess the only solution this, is not a hash table, but a array or
list of hashes, where i don't have to worry about "keys".

Like this :

An array of hashes will be made where key::value is like
"source_ip::number of 503s"

Whenever a 503 arrives, i will check if the ip is already in the
table. If not then i will add a new key value entry.

In timer route, i will just iterate over the array of hashes.

Now how should i achieve this?
Cheers,
Daniel
Post by Daniel-Constantin Mierla
Cheers,
Daniel
Post by aft
I'm trying to configure HOMER sip capture server to do some accounting
of the cases when "503 Service Unavailable" message arrives from
capture agents.
I've implemented the following to record the source IPs from which 503
message originates.
onreply_route {
......................
......................
......................
else if(status == "503") {
if($sht(a=>alarm::503) == $null) {
$sht(a=>alarm::503) = 0;
$sht(a=>alarm::$si::503) = 0;
}
xlog("Got 503");
xlog("($sht(a=>alarm::$si::503))");
$sht(a=>alarm::$si::503) = $sht(a=>alarm::$si::503) + 1;
}
...................
...................
...................
The following route supposed run periodically to update the databases.
}
route[TIMER_STATS] {
.....................
.....................
xlog("($sht(a=>alarm::$si::503))");
if($sht(a=>alarm::$si::503) > 0) {
sql_query("cb", "INSERT INTO alarm_data (create_date, type,
total, description, source_ip) VALUES(NOW(), 'Too Many 503',
$sht(a=>alarm::$si::503), 'service unavailable', $si)");
xlog("adding stuff to db");
}
$sht(a=>alarm::503) = 0;
$sht(a=>alarm::$si::503) = 0;
}
But the xlog("adding stuff to db") never executed. But in the first
block of code, the log message to print the value
$sht(a=>alarm::$si::503), which is shown to be non zero.
Don't understand why its not working.
--
-Cheers
-Arif
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
--
Daniel-Constantin Mierla - http://www.asipto.com
http://twitter.com/#!/miconda - http://www.linkedin.com/in/micond
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
--
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Next Kamailio Advanced Trainings 2014 - http://www.asipto.com
Sep 22-25, Berlin, Germany
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
--
-Cheers
-Arif
Loading...