Dear all, Daniel

we have been testing this module with the following setup
kamailio 5.3.2
evapi params
modparam("evapi", "workers", 4)
modparam("evapi", "netstring_format", 0)
modparam("evapi", "bind_addr", "127.0.0.1:8448")
modparam("evapi", "max_clients", 32)

then in the configuration we do evapi_relay of avp including a json data (which can be quite long), like this
{"key" : "aarp2q0tcpqhs0cpucuhukjs2ah2j00q@10.18.5.64" , "msg" : {"rg_in":"701","ani_init":{"ani_source":"pai", ....... }}}

We have an application listening on the tcp socket and writing those messages to a kafka cluster, and this works ok, and in the previous manual tests we have done no issue was found.
But when making some load tests, and passing some live traffic we see some issues

seems like some times, when there are messages to be sent to the tcp socket at the same time, they are sent in the same message, when normally each data sent using evapi_relay is sent in 1 message
We do sometimes see something like this on the application consuming from the tcp socket
2020-11-25 15:20:01.744 UTC [error] <0.706.0>@evapi_kafka_listener:handle_info:167 body "{\"key\" : \"6142651aa63616c6c04a783cd@72.21.24.130\" , \"msg\" : {\"rg_in\":\"677\",\"ani_init\":{\"ani_source\":\"fro\",.......}}}{\"key\" : \"isbc7caT4001915251VabcGhEfHdNiF0i@172.16.120.1\" , \"msg\" : {\"rg_in\":\"22\",\"ani_init\":{\"ani_source\":\"pai\", ....... ,\"translate" not valid json; error = {691,invalid_trailing_data}
2020-11-25 15:20:01.745 UTC [error] <0.706.0>@evapi_kafka_listener:handle_info:167 body "dPartition\":\"-1\",......}}}" not valid json; error = {1,invalid_json}

and we do see that the application cannot parse the json message fine, because we have like 2 json objects together ......{\"ani_source\":\"fro\",.......}}}{\"key\" : \"isbc7caT4001915251Vabc............
This happens with 2 different UDP receivers processing messages and calling evapi_relay at the same time. But i don't think this happens all the time. Seems like some issue when several processes try to use evapi workers at the same time.
We tried to increase evapi workers and it's the same

We also saw another issue I think. Seems when the avp sent to evapi socket is bigger than ~1680 char, the json is also truncated, and also happens when we use the socket in Lo interface which has an MTU of 65535.

Could you please take a look to see if there is any problem or limitation, or if we are using something wrong?

thanks and best regards 
david

El mar, 29 sept 2020 a las 13:40, David Escartin (<descartin@sonoc.io>) escribió:
hello Daniel

thanks, finally i could do that, i was struggling with this because in kamailio 5.4 there was not being created a socket on the bindaddr param when starting kamailio. (that's why i even tried to start to listen on a regular tcp socket to connect there an application)
But in 5.5 and 5.3 it does, so i could move forward and send the events to an external application

best regards
david

El lun., 21 sept. 2020 a las 9:45, Daniel-Constantin Mierla (<miconda@gmail.com>) escribió:

Hello,

you must have a different socket in modparam("evapi", "bind_addr", "...") than the core listen parameter for sip tcp traffic. The connect with your evapi app to the socket specified in modparam.

Cheers,
Daniel

On 15.09.20 09:29, David Escartin wrote:
hello Daniel

i have tried the directive
listen=127.0.0.1:8448 and listen=tcp:127.0.0.1:8448
and i tried now  for example to connect with a tcp client from port 48583 (randomly selected when i made the tcp connect i guess)

tcp        0      0 127.0.0.1:8448          127.0.0.1:48583         ESTABLISHED 4508/kamailio        keepalive (2.24/0/0)

i configured the kernel to send keep alives 30secs after the tcp connection

should this be ok?

best regards
david

El lun., 14 sept. 2020 a las 18:50, Daniel-Constantin Mierla (<miconda@gmail.com>) escribió:

Hello,

to what port do you connect for evapi?

The logs indicate connection to sip tcp port.

Cheers,
Daniel

On 14.09.20 18:06, David Escartin wrote:
Dear all

We are trying to use the evapi module to send some data to an external application but I'm having problems getting the clients connected.

I have the kamailio (version 5.3) running with a  tcp socket 127.0.0.1:8228, and the evapi params are just
modparam("evapi", "workers", 4)
modparam("evapi", "netstring_format", 0)
modparam("evapi", "bind_addr", "127.0.0.1:8448")
modparam("evapi", "max_clients", 32)

I tried a different number of workers and netstring_format 1 too.
When I start the kamailio i added some debug to the code, and seems when doing the mod init of the evapi dispatcher
38(4779) DEBUG: <core> [core/sr_module.c:779]: init_mod_child(): idx 38 rank -2: evapi [EvAPI Dispatcher]
it reaches to 
        while(1) {
                ev_loop (loop, 0);
        }
at evapi_run_dispatcher function.
I guess if I connected to the tcp socket and sent some event, I would see the client accepted and the event route evapi:connection-new would be triggered. But i'm not able to do that.
I tried to use the prime option, a tcp input client connection from logstash, so i could relay the data to the logstash using the evapi relay, but i only see the tcp socket being created but no client accepted.
I also tried to connect with an erlang gen_tcp client, but it's the same
i only see

47(4798) DEBUG: <core> [core/ip_addr.c:229]: print_ip(): tcpconn_new: new tcp connection: 127.0.0.1
47(4798) DEBUG: <core> [core/tcp_main.c:1174]: tcpconn_new(): on port 54537, type 2, socket 105
47(4798) DEBUG: <core> [core/tcp_main.c:1497]: tcpconn_add(): hashes: 1117:1187:1505, 1
47(4798) DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xad0880, 105, 2, 0x7fc211712d58), fd_no=53
and if i try to send any data

47(4798) DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xad0880, 105, -1, 0x0) fd_no=54 called
47(4798) DEBUG: <core> [core/tcp_main.c:4456]: handle_tcpconn_ev(): sending to child, events 1
47(4798) DEBUG: <core> [core/tcp_main.c:4129]: send2child(): selected tcp worker idx:0 proc:43 pid:4791 for activity on [tcp:127.0.0.1:8448], 0x7fc211712d58
43(4791) DEBUG: <core> [core/tcp_read.c:1749]: handle_io(): received n=8 con=0x7fc211712d58, fd=39
43(4791) DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xb3c720, 39, 2, 0x7fc211712d58), fd_no=1
43(4791) DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xb3c720, 39, -1, 0x10) fd_no=2 called
43(4791) DEBUG: <core> [core/tcp_read.c:1671]: release_tcpconn(): releasing con 0x7fc211712d58, state 1, fd=39, id=1 ([127.0.0.1]:54537 -> [127.0.0.1]:8448)
43(4791) DEBUG: <core> [core/tcp_read.c:1672]: release_tcpconn(): extra_data (nil)
47(4798) DEBUG: <core> [core/tcp_main.c:3559]: handle_tcp_child(): reader response= 7fc211712d58, 1 from 0
47(4798) DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xad0880, 105, 2, 0x7fc211712d58), fd_no=53
47(4798) DEBUG: <core> [core/tcp_main.c:3686]: handle_tcp_child(): CONN_RELEASE  0x7fc211712d58 refcnt= 1

and when i try to send any data
38(10867) DEBUG: evapi [evapi_dispatch.c:610]: evapi_recv_notify(): received [0x7f17d23fc628] [{"test" : "1.1.1.1", "uuid" : "1-31629@3.3.3.3" , "pdd" : "4"}] (75)
38(10867) DEBUG: evapi [evapi_dispatch.c:316]: evapi_dispatch_notify(): the message was sent to 0 clients

I don't know what i'm missing, or if i'm understanding the use of the module correctly

could you please take a look?
thanks a lot
David


--
Logo

David Escartín Almudévar
VoIP/Switch Engineer
descartin@sonoc.io

SONOC
C/ Josefa Amar y Borbón, 10, 4ª · 50001 Zaragoza, España
Tlf: +34 917019888 ·
 www.sonoc.io


_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
-- 
Daniel-Constantin Mierla -- www.asipto.com
www.twitter.com/miconda -- www.linkedin.com/in/miconda
Funding: https://www.paypal.me/dcmierla


--
Logo

David Escartín Almudévar
VoIP/Switch Engineer
descartin@sonoc.io

SONOC
C/ Josefa Amar y Borbón, 10, 4ª · 50001 Zaragoza, España
Tlf: +34 917019888 ·
 www.sonoc.io

-- 
Daniel-Constantin Mierla -- www.asipto.com
www.twitter.com/miconda -- www.linkedin.com/in/miconda
Funding: https://www.paypal.me/dcmierla


--
Logo

David Escartín Almudévar
VoIP/Switch Engineer
descartin@sonoc.io

SONOC
C/ Josefa Amar y Borbón, 10, 4ª · 50001 Zaragoza, España
Tlf: +34 917019888 ·
 www.sonoc.io



--
Logo

David Escartín Almudévar
VoIP/Switch Engineer
descartin@sonoc.io

SONOC
C/ Josefa Amar y Borbón, 10, 4ª · 50001 Zaragoza, España
Tlf: +34 917019888 ·
 www.sonoc.io