@ -1022,6 +1022,9 @@ ASTERISK_REGISTER_FILE()
< parameter name = " LastCall " >
< para > The time this member last took a call , expressed in seconds since 00 : 00 , Jan 1 , 1970 UTC . < / para >
< / parameter >
< parameter name = " LastPause " >
< para > The time when started last paused the queue member . < / para >
< / parameter >
< parameter name = " InCall " >
< para > Set to 1 if member is in call . Set to 0 after LastCall time is updated . < / para >
< enumlist >
@ -1546,6 +1549,7 @@ struct member {
char reason_paused [ 80 ] ; /*!< Reason of paused if member is paused */
int queuepos ; /*!< In what order (pertains to certain strategies) should this member be called? */
time_t lastcall ; /*!< When last successful call was hungup */
time_t lastpause ; /*!< When started the last pause */
unsigned int in_call : 1 ; /*!< True if member is still in call. (so lastcall is not actual) */
struct call_queue * lastqueue ; /*!< Last queue we received a call */
unsigned int dead : 1 ; /*!< Used to detect members deleted in realtime */
@ -2184,7 +2188,7 @@ static void queue_publish_member_blob(struct stasis_message_type *type, struct a
static struct ast_json * queue_member_blob_create ( struct call_queue * q , struct member * mem )
{
return ast_json_pack ( " {s: s, s: s, s: s, s: s, s: s, s: i, s: i, s: i, s: i, s: i, s: i, s: s, s: i}" ,
return ast_json_pack ( " {s: s, s: s, s: s, s: s, s: s, s: i, s: i, s: i, s: i, s: i, s: i, s: i, s: s, s: i}" ,
" Queue " , q - > name ,
" MemberName " , mem - > membername ,
" Interface " , mem - > interface ,
@ -2193,6 +2197,7 @@ static struct ast_json *queue_member_blob_create(struct call_queue *q, struct me
" Penalty " , mem - > penalty ,
" CallsTaken " , mem - > calls ,
" LastCall " , ( int ) mem - > lastcall ,
" LastPause " , ( int ) mem - > lastpause ,
" InCall " , mem - > in_call ,
" Status " , mem - > status ,
" Paused " , mem - > paused ,
@ -2514,6 +2519,9 @@ static struct member *create_queue_member(const char *interface, const char *mem
cur - > ringinuse = ringinuse ;
cur - > penalty = penalty ;
cur - > paused = paused ;
if ( paused ) {
time ( & cur - > lastpause ) ; /* Update time of last pause */
}
ast_copy_string ( cur - > interface , interface , sizeof ( cur - > interface ) ) ;
if ( ! ast_strlen_zero ( state_interface ) ) {
ast_copy_string ( cur - > state_interface , state_interface , sizeof ( cur - > state_interface ) ) ;
@ -7139,6 +7147,7 @@ static void set_queue_member_pause(struct call_queue *q, struct member *mem, con
if ( ! ast_strlen_zero ( reason ) ) {
ast_copy_string ( mem - > reason_paused , reason , sizeof ( mem - > reason_paused ) ) ;
}
time ( & mem - > lastpause ) ; /* update last pause field */
} else {
ast_copy_string ( mem - > reason_paused , " " , sizeof ( mem - > reason_paused ) ) ;
}
@ -9321,11 +9330,11 @@ static char *__queues_show(struct mansession *s, int fd, int argc, const char *
mem - > in_call ? ast_term_color ( COLOR_BROWN , COLOR_BLACK ) : " " , mem - > in_call ? " (in call) " : " " , ast_term_reset ( ) ) ;
if ( mem - > paused ) {
if ( ast_strlen_zero ( mem - > reason_paused ) ) {
ast_str_append ( & out , 0 , " %s(paused )%s" ,
ast_term_color ( COLOR_BROWN , COLOR_BLACK ) , ast_term_reset ( ) ) ;
ast_str_append ( & out , 0 , " %s(paused was %ld secs ago )%s" ,
ast_term_color ( COLOR_BROWN , COLOR_BLACK ) , ( long ) ( time ( NULL ) - mem - > lastpause ) , ast_term_reset ( ) ) ;
} else {
ast_str_append ( & out , 0 , " %s(paused:%s )%s" , ast_term_color ( COLOR_BROWN , COLOR_BLACK ) ,
mem - > reason_paused , ast_term_reset ( ) ) ;
ast_str_append ( & out , 0 , " %s(paused:%s was %ld secs ago )%s" , ast_term_color ( COLOR_BROWN , COLOR_BLACK ) ,
mem - > reason_paused , ( long ) ( time ( NULL ) - mem - > lastcall ) , ast_term_reset ( ) ) ;
}
}
@ -9697,6 +9706,7 @@ static int manager_queues_status(struct mansession *s, const struct message *m)
" Penalty: %d \r \n "
" CallsTaken: %d \r \n "
" LastCall: %d \r \n "
" LastPause: %d \r \n "
" InCall: %d \r \n "
" Status: %d \r \n "
" Paused: %d \r \n "
@ -9704,7 +9714,7 @@ static int manager_queues_status(struct mansession *s, const struct message *m)
" %s "
" \r \n " ,
q - > name , mem - > membername , mem - > interface , mem - > state_interface , mem - > dynamic ? " dynamic " : " static " ,
mem - > penalty , mem - > calls , ( int ) mem - > lastcall , mem - > in_call , mem - > status ,
mem - > penalty , mem - > calls , ( int ) mem - > lastcall , ( int ) mem - > lastpause , mem - > in_call , mem - > status ,
mem - > paused , mem - > reason_paused , idText ) ;
+ + q_items ;
}