Viewing the padre command run when a search is input via the modern UI

Background

Funnelback provides a number of ways for a query to be modified between when a user types in a query to when it’s submitted to the query processor.

It can sometimes become confusing when a query isn’t returning the expected results and being able to see the actual raw command run by padre-sw is desirable.

This article shows how the command can be intercepted and logged by writing a wrapper script for the padre-sw binary. The example uses perl but the equivalent functionality could be implemented in other languages.

Process

Step 1. Create a wrapper script

Log in to the Funnelback server and create a perl script containing the following code. Save the file as $SEARCH_HOME/bin/padre-sw-test.pl

#!/usr/bin/perl -w
use strict;
unshift(@ARGV, "padre-sw");
open (LOG, ">>", "/tmp/logi_cli.log");
for my $key (keys(%ENV)) {
    print LOG "export ".$key."='".$ENV{$key}."'\n";
}
print LOG $ARGV[0];
for (my $count = 1; $count < $#ARGV + 1; $count++) {
    my $arg = $ARGV[$count];
    $arg =~ s/\\/\\\\/g;
    $arg =~ s/"/\\"/g;
    print LOG " \"".$arg."\"";
}
close (LOG);
system(@ARGV);

Step 2. Make the script executable

Make the padre-sw-test.pl script executable (and ensure that the file has the correct ownership and group settings - the same as for the padre-sw binary).

Step 3. Change the padre-sw binary

Edit the collection.cfg for the collection that needs testing. Add/edit the following setting:

query_processor=padre-sw-test.pl

Check that queries are still processed correctly by running a search against the collection.

Queries should now be logged to /tmp/log_cli.log and will include messages similar to:

/tmp/log_cli.log
export REQUEST_URI='/s/search.html'
export REMOTE_ADDR='192.168.16.26'
export SEARCH_HOME='/opt/funnelback'
export HTTP_HOST='search-internal'
export QUERY_STRING='collection=all&profile=_default&query=dot'
/opt/funnelback/bin/padre-sw "-rmcf=FTaVMCGf" "-count_dates=d" "-QL=1" "-QL_rank=1" "-qlog_file=/opt/funnelback/data/all/live/log/queries-search-internal.log"

Don’t forget to revert the collection.cfg change once you’ve finished testing by removing the query_processor=padre-sw-test.pl line from the collection.cfg.