[Freeswitch-users] "show channels" command with duration - patch included

Michael S Collins msc at freeswitch.org
Thu Jul 16 07:50:28 PDT 2009


I wonder if it would make sense to create a separate sub-command like  
"show channels stats" or something. That way we could put all sorts of  
nifty info there without breaking the existing command.

Thoughts?
-MC

Sent from my iPhone

On Jul 16, 2009, at 7:37 AM, Apostolos Pantsiopoulos <regs at kinetix.gr>  
wrote:

> Now that I come to think of it...
>
> It would be useful if we had the timestamp (and epoch)
> of the events PROGRESS and PROGRESS WITH MEDIA so that we can extract
> the PDD (Post Dial Delay) which is a very useful statistic.
>
> Adding the user's (for the incoming) and the gateway's (for the
> outbound) id would also be useful. In case these fields are empty the
> show channels command could ommit the (empty string).
>
> Are you planning to implement them yourselves or should I begin  
> looking
> at the code?
>
>
> Anthony Minessale wrote:
>> I'm ok with the idea as long as it's thoroughly tested.
>> If there is any more info you want to save from those events you  
>> should
>> consider it now while we are modifying it.
>>
>>
>> On Thu, Jul 16, 2009 at 9:02 AM, <freeswitch-users at lists.freeswitch.org
>> <mailto:freeswitch-users at lists.freeswitch.org>> wrote:
>>
>>    Hi,
>>
>>    I usually find it very useful when I can retrieve a list of the
>>    currents calls along with durations. I noticed that the 'show
>>    channels' format does not include the duration (or the answered
>>    timestamp - so that one can extract it from there). So, I made a
>>    patch that includes the answered timestamp, the answered timestamp
>>    in epoch, and the duration in seconds. Of course these fields  
>> remain
>>    empty when the call hasn't been
>>    answered yet.
>>
>>    I don't know if anyone else finds this functionality useful, so  
>> I am
>>    posting this patch here first (instead of JIRA) in order to get
>>    feedback from the users. If many of you (or the maintainers)  
>> find it
>>    interesting I can then proceed in posting it to JIRA.
>>
>>    --
>>    -------------------------------------------
>>    Apostolos Pantsiopoulos
>>    Kinetix Tele.com R & D
>>    email: regs at kinetix.gr <mailto:regs at kinetix.gr>
>>    -------------------------------------------
>>
>>    Index: src/mod/applications/mod_commands/mod_commands.c
>>     
>> ===================================================================
>>    --- src/mod/applications/mod_commands/mod_commands.c     
>> (revision 14256)
>>    +++ src/mod/applications/mod_commands/mod_commands.c    (working  
>> copy)
>>    @@ -2827,10 +2827,10 @@
>>                                   }
>>                           }
>>                           if (strchr(argv[2], '%')) {
>>    -                               sprintf(sql, "select * from  
>> channels
>>    where uuid like '%s' or name like '%s' or cid_name like '%s' or
>>    cid_num like '%s' order by created_epoch",
>>    +                               sprintf(sql, "select
>>    *,strftime('%%s',DATETIME('NOW'))-answered_epoch as duration from
>>    channels where uuid like '%s' or name like '%s' or cid_name like
>>    '%s' or cid_num like '%s' order by created_epoch",
>>                                                   argv[2], argv[2],
>>    argv[2], argv[2]);
>>                           } else {
>>    -                               sprintf(sql, "select * from  
>> channels
>>    where uuid like '%%%s%%' or name like '%%%s%%' or cid_name like
>>    '%%%s%%' or cid_num like '%%%s%%' order by created_epoch",
>>    +                               sprintf(sql, "select
>>    *,strftime('%%s',DATETIME('NOW'))-answered_epoch as duration from
>>    channels where uuid like '%%%s%%' or name like '%%%s%%' or  
>> cid_name
>>    like '%%%s%%' or cid_num like '%%%s%%' order by created_epoch",
>>                                                   argv[2], argv[2],
>>    argv[2], argv[2]);
>>
>>                           }
>>    @@ -2839,10 +2839,10 @@
>>                                   as = argv[4];
>>                       }
>>                   } else {
>>    -                       sprintf(sql, "select * from channels order
>>    by created_epoch");
>>    +                       sprintf(sql, "select
>>    *,strftime('%%s',DATETIME('NOW'))-answered_epoch as duration from
>>    channels order by created_epoch");
>>                   }
>>           } else if (!strcasecmp(command, "channels")) {
>>    -               sprintf(sql, "select * from channels order by
>>    created_epoch");
>>    +               sprintf(sql, "select
>>    *,strftime('%%s',DATETIME('NOW'))-answered_epoch as duration from
>>    channels order by created_epoch");
>>                   if (argv[1] && !strcasecmp(argv[1],"count")) {
>>                       holder.justcount = 1;
>>                       if (argv[3] && !strcasecmp(argv[2], "as")) {
>>    @@ -2850,7 +2850,7 @@
>>                       }
>>                   }
>>           } else if (!strcasecmp(command, "distinct_channels")) {
>>    -               sprintf(sql, "select * from channels left join  
>> calls
>>    on "
>>    +               sprintf(sql, "select
>>    *,strftime('%%s',DATETIME('NOW'))-answered_epoch as duration from
>>    channels left join calls on "
>>                                   "channels.uuid=calls.caller_uuid
>>    where channels.uuid not in (select callee_uuid from calls) order  
>> by
>>    created_epoch");
>>                   if (argv[2] && !strcasecmp(argv[1], "as")) {
>>                           as = argv[2];
>>    Index: src/switch_core_sqldb.c
>>     
>> ===================================================================
>>    --- src/switch_core_sqldb.c     (revision 14256)
>>    +++ src/switch_core_sqldb.c     (working copy)
>>    @@ -309,9 +309,21 @@
>>                                                            );
>>
>>                   break;
>>    +       case SWITCH_EVENT_CHANNEL_ANSWER:
>>    +               {
>>    +
>>    +                       sql = switch_mprintf("update channels set
>>    answered='%s',answered_epoch='%ld' where uuid='%s'",
>>    +
>>    switch_event_get_header_nil(event, "event-date-local"),
>>    +
>>     (long)switch_epoch_time_now(NULL),
>>    +
>>     switch_event_get_header_nil(event, "unique-id")
>>    +                                                         );
>>    +
>>    +               }
>>    +               break;
>>           case SWITCH_EVENT_CHANNEL_STATE:
>>                   {
>>                           char *state =
>>    switch_event_get_header_nil(event, "channel-state-number");
>>    +
>>                           switch_channel_state_t state_i =  
>> CS_DESTROY;
>>
>>                           if (!switch_strlen_zero(state)) {
>>    @@ -492,7 +504,9 @@
>>                           "   read_rate  VARCHAR(255),\n"
>>                           "   write_codec  VARCHAR(255),\n"
>>                           "   write_rate  VARCHAR(255),\n"
>>    -                       "   secure VARCHAR(255)\n"
>>    +                       "   secure VARCHAR(255),\n"
>>    +                       "   answered  VARCHAR(255),\n"
>>    +                        "   answered_epoch  INTEGER\n"
>>                           ");\ncreate index uuindex on channels  
>> (uuid);\n";
>>                   char create_calls_sql[] =
>>                           "CREATE TABLE calls (\n"
>>
>>    _______________________________________________
>>    FreeSWITCH-users mailing list
>>    FreeSWITCH-users at lists.freeswitch.org
>>    <mailto: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
>>
>>
>>
>>
>> -- 
>> Anthony Minessale II
>>
>> FreeSWITCH http://www.freeswitch.org/
>> ClueCon http://www.cluecon.com/
>> Twitter: http://twitter.com/FreeSWITCH_wire
>>
>> AIM: anthm
>> MSN:anthony_minessale at hotmail.com
>> <mailto:MSN%3Aanthony_minessale at hotmail.com>
>> GTALK/JABBER/PAYPAL:anthony.minessale at gmail.com
>> <mailto:PAYPAL%3Aanthony.minessale at gmail.com>
>> IRC: irc.freenode.net <http://irc.freenode.net> #freeswitch
>>
>> FreeSWITCH Developer Conference
>> sip:888 at conference.freeswitch.org
>> <mailto:sip%3A888 at conference.freeswitch.org>
>> iax:guest at conference.freeswitch.org/888
>> <http://iax:guest@conference.freeswitch.org/888>
>> googletalk:conf+888 at conference.freeswitch.org
>> <mailto:googletalk%3Aconf%2B888 at conference.freeswitch.org>
>> pstn:213-799-1400
>>
>>
>> --- 
>> ---------------------------------------------------------------------
>>
>> _______________________________________________
>> 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
>
>
> -- 
> -------------------------------------------
> Apostolos Pantsiopoulos
> Kinetix Tele.com R & D
> email: regs at kinetix.gr
> -------------------------------------------
>
> _______________________________________________
> 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




More information about the FreeSWITCH-users mailing list