Browse Source

evento QueueMemberStatus similar ao QueueMember. Pronto

dev
Rodgger 2 years ago
parent
commit
ea8fae50d6
  1. 1
      src/parse_events.c
  2. 3
      src/parse_events.h
  3. 149
      src/queue/queue.c
  4. 3
      src/queue/queue.h

1
src/parse_events.c

@ -51,6 +51,7 @@ static s_methods_events _methods_events[] =
{ Event_QueueParams, "QueueParams", parse_event_queueparams },
{ Event_QueueMember, "QueueMember", parse_event_queuemember },
{ Event_Agents, "Agents", parse_event_agents },
{ Event_QueueMemberStatus, "QueueMemberStatus", parse_event_queuememberstatus },
{0}
};

3
src/parse_events.h

@ -36,7 +36,8 @@ enum {
Event_PeerStatus,
Event_QueueParams,
Event_QueueMember,
Event_Agents
Event_Agents,
Event_QueueMemberStatus
};

149
src/queue/queue.c

@ -220,7 +220,7 @@ int parse_event_queuemember( EVENT *event, s_manager *smanager ){
agent = name + 6;
ramal = get_peer_location( location, txt );
if(!ramal){
_WARNING("Vazio state_interface = %s - FILE %s Line %d", state_interface, __FILE__, __LINE__ );
_WARNING("Vazio state_interface = %s - FILE %s Line %d", location, __FILE__, __LINE__ );
goto fail;
}
@ -229,7 +229,7 @@ int parse_event_queuemember( EVENT *event, s_manager *smanager ){
agent = NULL;
ramal = get_peer_location( name, txt );
if(!ramal){
_WARNING("Vazio state_interface = %s - FILE %s Line %d", state_interface, __FILE__, __LINE__ );
_WARNING("Vazio state_interface = %s - FILE %s Line %d", name, __FILE__, __LINE__ );
goto fail;
}
}
@ -237,7 +237,7 @@ int parse_event_queuemember( EVENT *event, s_manager *smanager ){
agent = NULL;
ramal = get_peer_location( name, txt );
if(!ramal){
_WARNING("Vazio state_interface = %s - FILE %s Line %d", state_interface, __FILE__, __LINE__ );
_WARNING("Vazio state_interface = %s - FILE %s Line %d", name, __FILE__, __LINE__ );
goto fail;
}
}
@ -346,7 +346,7 @@ fail:
}
int parse_event_QueueMemberStatus( EVENT *event, s_manager *smanager ){
int parse_event_queuememberstatus( EVENT *event, s_manager *smanager ){
/* Event: QueueMemberStatus
* Queue: <value>
@ -391,11 +391,146 @@ int parse_event_QueueMemberStatus( EVENT *event, s_manager *smanager ){
* 1
*/
const char *queue, *member_name, *interface, *member_static;
unsigned int _static, penalty, callstaken, lastcall, incall, status, paused, ringuse;
const char *agent, *ramal, *queue, *member_name, *interface, *member_static;
char txt[100];
unsigned int _static, penalty, callstaken, lastcall, incall, status, paused;
state_interface = ami_get_value( smanager->ami, event->args, "StateInterface" );
// nome fila
queue = ami_get_value( smanager->ami, event->args, "Queue" );
if(!queue){ goto fail; }
interface = ami_get_value( smanager->ami, event->args, "Interface" );
if(!interface){ goto fail; }
member_name = ami_get_value( smanager->ami, event->args, "MemberName" );
if(!member_name){ goto fail; }
if( strstr( member_name, "Agent" ) ){
agent = member_name + 6;
ramal = get_peer_location( interface, txt );
if(!ramal){
_WARNING("Vazio state_interface = %s - FILE %s Line %d", interface, __FILE__, __LINE__ );
goto fail;
}
}
else if( strstr( member_name, "SIP" ) ){
agent = NULL;
ramal = get_peer_location( member_name, txt );
if(!ramal){
_WARNING("Vazio state_interface = %s - FILE %s Line %d", member_name, __FILE__, __LINE__ );
goto fail;
}
}
else if( strstr( member_name, "IAX" ) ){
agent = NULL;
ramal = get_peer_location( member_name, txt );
if(!ramal){
_WARNING("Vazio state_interface = %s - FILE %s Line %d", member_name, __FILE__, __LINE__ );
goto fail;
}
}
else{
goto fail;
}
// membro estático, dinâmico
member_static = ami_get_value( smanager->ami, event->args, "Membership" );
if(!member_static){ goto fail;}
_static = atoi(member_static);
if( !strcasecmp_n( member_static, "static" ) ){
_static = 1;
} else if( !strcasecmp_n( member_static, "dynamic" ) ){
_static = 0;
} else{
goto fail;
}
penalty = atoi(ami_get_value( smanager->ami, event->args, "Penalty" ));
callstaken = atoi(ami_get_value( smanager->ami, event->args, "CallsTaken" ));
lastcall = atoi(ami_get_value( smanager->ami, event->args, "LastCall" ));
incall = atoi(ami_get_value( smanager->ami, event->args, "InCall" ));
status = atoi(ami_get_value( smanager->ami, event->args, "Status" ));
paused = atoi(ami_get_value( smanager->ami, event->args, "Paused" ));
{
struct s_table_queue_member *table_queue_member = get_queue_member_db( Select_queuemember, ramal, queue );
if( table_queue_member ){
if(_static != table_queue_member->_static ||
penalty != table_queue_member->penalty ||
callstaken != table_queue_member->calls_taken ||
lastcall != table_queue_member->last_call ||
incall != table_queue_member->in_call ||
status != table_queue_member->status ||
paused != table_queue_member->paused ) {
if( update_queue_member_db( Update_queuemember, agent, _static, penalty, callstaken, lastcall, incall, status, paused, table_queue_member->queue_member_id ) == -1 ){
goto fail;
}
}
}
else{
insert_queue_member_db( Insert_queuemember, queue, ramal, agent, _static, penalty, callstaken, lastcall, incall, status, paused );
}
}
{
struct s_queue_member *member = get_queue_member_name( ramal, queue );
/* char *queue_name;
* int _static;
* int calls_taken;
* int last_call;
* int in_call;
* int status;
* int paused;
*/
if(member){
if( strcasecmp( queue, member->queue_name )){
free( member->queue_name );
newstrncpy( &member->queue_name, queue);
}
else if( member->_static != _static ){
member->_static = _static;
}
else if( member->calls_taken != callstaken ){
member->calls_taken = callstaken;
}
else if( member->last_call != lastcall){
member->last_call = lastcall;
}
else if( member->in_call != incall ){
member->in_call = incall;
}
else if(member->status != status ){
member->status = status;
}
else if(member->paused != paused){
member->paused = paused;
}
}
else {
member = create_queue_member( );
newstrncpy( &member->queue_name, queue );
member->_static = _static;
member->penalty = penalty;
member->calls_taken = callstaken;
member->last_call = lastcall;
member->in_call = incall;
member->status = status;
member->paused = paused;
}
}
return 1;
fail:
return -1;
}

3
src/queue/queue.h

@ -61,9 +61,10 @@ struct s_table_queue_member {
int parse_event_queueparams( EVENT *event, s_manager *smanager );
int parse_event_queuemember( EVENT *event, s_manager *smanager );
int add_table_queue( struct s_table_queue **D, struct s_table_queue *next );
int parse_event_queuememberstatus( EVENT *event, s_manager *smanager );
int add_table_queue( struct s_table_queue **D, struct s_table_queue *next );
int free_table_queue(struct s_table_queue **D);
struct s_table_queue *get_queueparams_db( stmt_t type_stmt, const char *queue_name );
int update_queueparams_db(stmt_t type_stmt, const char *strategy, unsigned long long int i_holdtime,

Loading…
Cancel
Save