Skip to content
Snippets Groups Projects
app_queue.c 61.8 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	return q ? strdup(q->name) : NULL;
    }
    
    
    Mark Spencer's avatar
    Mark Spencer committed
    /* JDG: callback to display queues status in manager */
    static int manager_queues_show( struct mansession *s, struct message *m )
    {
    	char *a[] = { "show", "queues" };
    	return queues_show( s->fd, 2, a );
    } /* /JDG */
    
    
    
    /* Dump queue status */
    static int manager_queues_status( struct mansession *s, struct message *m )
    {
    	time_t now;
    	int pos;
    
    	char *id = astman_get_header(m,"ActionID");
    	char idText[256] = "";
    
    	struct ast_call_queue *q;
    	struct queue_ent *qe;
    
    	float sl = 0;
    	struct member *mem;
    
    	astman_send_ack(s, m, "Queue status will follow");
    
    	time(&now);
    
    	ast_mutex_lock(&qlock);
    
    	q = queues;
    
    	if (id && !ast_strlen_zero(id)) {
    
    		snprintf(idText,256,"ActionID: %s\r\n",id);
    	}
    
    	while(q) {
    
    
    		/* List queue properties */
    		if(q->callscompleted > 0)
    			sl = 100*((float)q->callscompletedinsl/(float)q->callscompleted);
    
    		ast_cli(s->fd, "Event: QueueParams\r\n"
    					"Queue: %s\r\n"
    					"Max: %d\r\n"
    					"Calls: %d\r\n"
    
    					"Holdtime: %d\r\n"
    					"Completed: %d\r\n"
    					"Abandoned: %d\r\n"
    					"ServiceLevel: %d\r\n"
    					"ServicelevelPerf: %2.1f\r\n"
    
    					"\r\n",
    
    						q->name, q->maxlen, q->count, q->holdtime, q->callscompleted,
    						q->callsabandoned, q->servicelevel, sl, idText);
    
    		/* List Queue Members */
    
    		for (mem = q->members; mem; mem = mem->next) 
    
    			ast_cli(s->fd, "Event: QueueMember\r\n"
    				"Queue: %s\r\n"
    				"Location: %s/%s\r\n"
    				"Membership: %s\r\n"
    				"Penalty: %d\r\n"
    				"CallsTaken: %d\r\n"
    				"LastCall: %ld\r\n"
    				"%s"
    				"\r\n",
    					q->name, mem->tech, mem->loc, mem->dynamic ? "dynamic" : "static",
    					mem->penalty, mem->calls, mem->lastcall, idText);
    
    		/* List Queue Entries */
    
    
    		pos = 1;
    		for (qe = q->head; qe; qe = qe->next) 
    
    			ast_cli(s->fd, "Event: QueueEntry\r\n"
    
    				"Queue: %s\r\n"
    				"Position: %d\r\n"
    				"Channel: %s\r\n"
    				"CallerID: %s\r\n"
    				"Wait: %ld\r\n"
    
    				"\r\n", 
    
    					q->name, pos++, qe->chan->name, (qe->chan->callerid ? qe->chan->callerid : ""), (long)(now - qe->start), idText);
    
    		q = q->next;
    	}
    
    	ast_mutex_unlock(&qlock);
    
    	return RESULT_SUCCESS;
    }
    
    
    Mark Spencer's avatar
    Mark Spencer committed
    static char show_queues_usage[] = 
    "Usage: show queues\n"
    "       Provides summary information on call queues.\n";
    
    static struct ast_cli_entry cli_show_queues = {
    	{ "show", "queues", NULL }, queues_show, 
    	"Show status of queues", show_queues_usage, NULL };
    
    
    static char show_queue_usage[] = 
    "Usage: show queue\n"
    "       Provides summary information on a specified queue.\n";
    
    static struct ast_cli_entry cli_show_queue = {
    	{ "show", "queue", NULL }, queue_show, 
    	"Show status of a specified queue", show_queue_usage, complete_queue };
    
    
    Mark Spencer's avatar
    Mark Spencer committed
    int unload_module(void)
    {
    	STANDARD_HANGUP_LOCALUSERS;
    
    	ast_cli_unregister(&cli_show_queue);
    
    Mark Spencer's avatar
    Mark Spencer committed
    	ast_cli_unregister(&cli_show_queues);
    
    Mark Spencer's avatar
    Mark Spencer committed
    	ast_manager_unregister( "Queues" );
    
    	ast_manager_unregister( "QueueStatus" );
    
    	ast_unregister_application(app_aqm);
    	ast_unregister_application(app_rqm);
    
    Mark Spencer's avatar
    Mark Spencer committed
    	return ast_unregister_application(app);
    }
    
    int load_module(void)
    {
    	int res;
    	res = ast_register_application(app, queue_exec, synopsis, descrip);
    
    Mark Spencer's avatar
    Mark Spencer committed
    	if (!res) {
    
    		ast_cli_register(&cli_show_queue);
    
    Mark Spencer's avatar
    Mark Spencer committed
    		ast_cli_register(&cli_show_queues);
    
    Mark Spencer's avatar
    Mark Spencer committed
    		ast_manager_register( "Queues", 0, manager_queues_show, "Queues" );
    
    		ast_manager_register( "QueueStatus", 0, manager_queues_status, "Queue Status" );
    
    
    		// [PHM 06/26/03]
    		ast_register_application(app_aqm, aqm_exec, app_aqm_synopsis, app_aqm_descrip) ;
    		ast_register_application(app_rqm, rqm_exec, app_rqm_synopsis, app_rqm_descrip) ;
    
    Mark Spencer's avatar
    Mark Spencer committed
    	}
    
    Mark Spencer's avatar
    Mark Spencer committed
    	reload_queues();
    	return res;
    }
    
    
    Mark Spencer's avatar
    Mark Spencer committed
    int reload(void)
    {
    	reload_queues();
    	return 0;
    }
    
    char *description(void)
    {
    	return tdesc;
    }
    
    int usecount(void)
    {
    	int res;
    	STANDARD_USECOUNT(res);
    	return res;
    }
    
    char *key()
    {
    	return ASTERISK_GPL_KEY;
    }