123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- use ESL;
- my $host = "localhost";
- my $port = "8021";
- my $pass = "ClueCon";
- my $profile = "internal";
- my $file = "";
- my $debug = "";
- my $paste = "";
- my $i;
- my $argc = @ARGV;
- my $e;
- my $running = 1;
- my $con;
- my $USAGE = "
- FreeSWITCH Logger Utility
- USAGE:
- -h --help This help
- -H --host Choose host
- -p --port <port> Choose port
- -P -pass <pass> Choose password
- -f --file <file> Output file
- -pb --paste-bin <name> Post to FreeSWITCH Paste Bin
- -sp --sip-profiles <list> List of SIP profiles to trace
- -sd --sip-debug <level> Set SIP debug level
- No arguments given will trace profile 'internal' to STDOUT
- ";
- $SIG{INT} = sub { $running = 0 };
- sub parse(\$\$$) {
- my ($index, $ref, $regex) = @_;
- if ($ARGV[$$index] =~ $regex) {
- die "missing arg!" if (!$ARGV[$$index+1]);
- $$ref = $ARGV[++$$index];
- return 1;
- }
- return 0;
- }
- for($i = 0; $i < $argc; $i++) {
- if ($ARGV[$i] =~ /^\-h$|^\-\-help$/) {
- print $USAGE;
- exit;
- }
- if (! (parse($i, $host, '^-H$|^--host$') ||
- parse($i, $port, '^-p$|^--port$') ||
- parse($i, $pass, '^-P$|^--pass$') ||
- parse($i, $file, '^-f$|^--file$') ||
- parse($i, $paste, '^-pb$|^--paste-bin$') ||
- parse($i, $profile, '^-sp$|^--sip-profile$') ||
- parse($i, $debug, '^-sd$|^--sip-debug$')
- )) {
- die "invalid arg!";
- }
- }
- if ($paste) {
- if (!$file) {
- $file = "./logger_post.log";
- }
- }
- if ($file) {
- open (F, ">$file");
- select F;
- }
- if ($paste) {
- print F "paste=Send&remember=0&poster=${paste}&format=fslog&code2=";
- }
- $con = new ESL::ESLconnection($host, $port, $pass);
- sub do_api($) {
- my ($cmd, $args) = split(" ", $_[0], 2);
- my $e = $con->api($cmd, $args);
- if ($e) {
- print STDERR $e->getBody() . "\n";
- }
- }
- foreach (split(",", $profile)) {
- do_api("sofia profile $_ siptrace on");
- }
- if ($debug) {
- do_api("sofia loglevel all $debug");
- }
- $e = $con->sendRecv("log 7");
- print STDERR $e->getBody() . "\n" if ($e);
- while($con->connected() && $running) {
- $e = $con->recvEventTimed(100);
- if ($e and $e->getHeader("content-type") eq "log/data") {
- print $e->getBody();
- }
- }
- print STDERR "Stopping\n";
- foreach (split(",", $profile)) {
- do_api("sofia profile $_ siptrace off");
- }
- if ($debug) {
- do_api("sofia loglevel all 0");
- }
- $e = $con->sendRecv("log 4");
- print STDERR $e->getBody() . "\n" if ($e);
- print STDERR "Done.....\n";
- if ($file) {
- close F;
- print STDERR "Data written to $file\n";
- }
- if ($paste) {
- my $path;
- system("mkdir -p .fs_logger");
- chdir(".fs_logger") or die "I/O Error!";
-
- if ($file =~ /^\/.*/) {
- $path = $file;
- } else {
- $path = "../$file";
- }
-
- print STDERR "Posting to pastebin, please wait...\n";
- system("wget --output-file=/dev/null --http-user=pastebin --http-password=freeswitch http://pastebin.freeswitch.org --post-file=$path");
- $pb = `ls [0-9]*`;
- print STDERR "Data posted to pastebin [$paste] http://pastebin.freeswitch.org/$pb\n";
- chdir("..") or die "I/O Error!";
- system("rm -fr .fs_logger");
- }
|