help with tracking thread name in AGI Server

Get help with installing, upgrading and running Asterisk.

Moderators: muppetmaster, Moderator, Support

help with tracking thread name in AGI Server

Postby f3l1xss » Wed Jul 02, 2014 12:18 am

Hello Everyone I've been looking for a way to track the thread name in AGI server which I gave during the thread's initialization:

Here's the code in details:

for(int i = 1; i <= 2; i++) /for example im creating 2 threads here for originate
{

Map<String,String> destinationMap = new HashMap();

if(i ==1)
{
destinationMap.put("numberToCall", "12345");
}
else if(i == 2)
{
destinationMap.put("numberToCall", "678910");
}


OriginateAction originateAction;
ManagerResponse originateResponse;

originateAction = new OriginateAction();
originateAction.setChannel("Local/1239@from-internal-custom/n");
originateAction.setContext("default");
originateAction.setExten("7004");
originateAction.setPriority(new Integer(1));
originateAction.setTimeout(new Integer(30000));
originateAction.setVariables(destinationMap);

ManagerConnection something;

ManagerConnectionFactory factory123 = new ManagerConnectionFactory(
"192.168.0.99", "admin", "admin");


something = factory123.createManagerConnection();

something.login();


Thread t = new Thread(new HelloManager.AGIServerTask(something,originateAction));

t.setName("Thread " + i);

//CALCULATE START TIME
t.start();

}

private static class AGIServerTask implements Runnable
{
private ManagerConnection managerConnection = null;
private OriginateAction originateAction = null;


public AGIServerTask(ManagerConnection managerConnection, OriginateAction originateAction)
{
this.managerConnection = managerConnection;
this.originateAction = originateAction;
}

public void run()
{
try
{


managerResponse = managerConnection.sendAction(originateAction,90000);

System.out.println("my name is " + Thread.currentThread().getName());
//will println the "Thread i" which is exactly the name I assigned to my thread
// If i record the end time here it is already late
}
catch(IOException io)
{

}
catch(TimeoutException te)
{

}


}
}



and here are my dialplan:

exten => 1239,1,NoOp(number to call is = ${numberToCall})
exten => 1239,2,Agi(agi://192.168.0.216:3453/1239?numbertocall=${numberToCall})

exten => 1300,1,Hangup()
exten => 1300,2,Answer()
exten => 1300,3,Playback(thank-you-for-calling)
exten => 1300,4,AMD()
exten => 1300,5,Agi(agi://192.168.0.216:3453/1300?AMDStatus=${AMDSTATUS})

inside exten 1239 AGI server code I will issue:

System.out.println("thread name is " + Thread.currentThread().getName() );
// will println "Asterisk Daemon thread - Thread something" which is not what I want

exec("Dial","SIP/CallOut/" + numberToCall + "@a2billing,60,G(from-internal-custom,1300,1)");
//will transer the call to exten 1300 once someone answers

inside exten 1300 AGI server code I will issue:



if(AMDStatus == human)
{
//I WANT TO CALCULATE END TIME HERE
//do something
}





So basically what I am doing is initializing as many threads and originate action as the number of people that I have in my database. I will then call all of them and will do some action if the AMD algorithm detect human (instead of fax or answering machine) on the called party.

I will also need to calculate the time it takes from the point I initiate the originateAction until the called party answers and confirmed human (lets assume that it is point starttime to endtime) for each call . In order to do that I will need to assign a unique name in each thread and later match point endtime with the corresponding point starttime. However,because the Thread.currentThread().getName() information is gone once we enter the section in AGI server, I willl not be able to know which thread is which.

Any suggestion in solving this?

Thank you so much
f3l1xss
Newsterisk
 
Posts: 2
Joined: Wed Jun 11, 2014 2:11 am

Return to Asterisk Support

Who is online

Users browsing this forum: No registered users and 1 guest