[SR-Users] siremis CDR gneration procedure
Klaus Darilion
klaus.mailinglists at pernau.at
Mon Feb 18 18:35:58 CET 2013
On 12.02.2013 10:32, Daniel-Constantin Mierla wrote:
>
> On 2/4/13 5:17 PM, Klaus Darilion wrote:
>>
>>
>> On 28.01.2013 10:32, Daniel-Constantin Mierla wrote:
>>> Hello,
>>>
>>> On 1/17/13 3:38 PM, Klaus Darilion wrote:
>>>> Hi!
>>>>
>>>> IMO the siremis CDR generation procedure is buggy:
>>>>
>>>> CREATE PROCEDURE `kamailio_cdrs`()
>>>> DECLARE inv_cursor CURSOR FOR SELECT src_user, src_domain, dst_user,
>>>> dst_domain, dst_ouser, time, callid,from_tag, to_tag, src_ip
>>>> FROM acc
>>>> where method='INVITE' and cdr_id='0';
>>>> ...
>>>> REPEAT
>>>> FETCH inv_cursor INTO v_src_user,
>>>> v_src_domain, v_dst_user, v_dst_domain,
>>>> v_dst_ouser, v_inv_time, v_callid, v_from_tag,
>>>> v_to_tag, v_src_ip;
>>>> IF NOT done THEN
>>>> SET bye_record = 0;
>>>> SELECT 1, time INTO bye_record, v_bye_time FROM acc WHERE
>>>> method='BYE' AND callid=v_callid AND
>>>> ((from_tag=v_from_tag AND to_tag=v_to_tag)
>>>> OR (from_tag=v_to_tag AND to_tag=v_from_tag))
>>>> ORDER BY time ASC LIMIT 1;
>>>> IF bye_record = 1 THEN
>>>> INSERT INTO cdrs (src_username,src_domain,dst_username,
>>>> dst_domain,dst_ousername,call_start_time,
>>>> duration,sip_call_id,
>>>> sip_from_tag,sip_to_tag,src_ip,created) VALUES
>>>> (v_src_user, v_src_domain,v_dst_user,
>>>> v_dst_domain,v_dst_ouser,v_inv_time,
>>>> UNIX_TIMESTAMP(v_bye_time)-UNIX_TIMESTAMP(v_inv_time),
>>>> v_callid,v_from_tag,v_to_tag,v_src_ip,NOW());
>>>> UPDATE acc SET cdr_id=last_insert_id() WHERE callid=v_callid
>>>> AND from_tag=v_from_tag AND to_tag=v_to_tag;
>>>> END IF;
>>>> SET done = 0;
>>>> END IF;
>>>> UNTIL done END REPEAT;
>>>> ...
>>>>
>>>> 1. The UPDATE query will not UPDATE BYE records which were sent from
>>>> CALLEE to CALLER. This can be easily fixed with:
>>>>
>>>> UPDATE acc SET cdr_id=last_insert_id() WHERE callid=v_callid
>>>> AND ( (from_tag=v_from_tag AND to_tag=v_to_tag) OR
>>>> (to_tag=v_from_tag AND from_tag=v_to_tag) );
>>>>
>>>>
>>> the idea is to update the INVITE record not to select it in future
>>> executions.
>>
>> I do not get that. AFAIS it will only UPDATE the INVITE, but not the BYE.
> BYE does not need to be updated, because the cursor goes on INVITE
> records that have cdr_id=0, then will search for a matching BYE on
> callid and tags.
>
> Putting cdr for all BYEs can be just for aesthetic purposes, but will
> not affect CDRs in a bad or good way.
>
> Or do you see another reason why the BYE record needs the cdr_id?
I just found that it is strange that some BYEs have a cdr_id and others
don't. IMO it would nice to set cdr_id in all transactions which were
sucessfully used to generate a call-CDR.
regards
Klaus
More information about the sr-users
mailing list