#!/usr/bin/perl use POSIX; use JSON::XS; $PROJECTID = $ARGV[0]; $ARG_ETYPE_QUERY = $ARGV[1]; $ARG_ETYPE_RETURN = $ARGV[2]; $TABLENAME = $ARGV[3]; $INFILE = $ARGV[4]; $OUTFILE = $ARGV[5]; #load our query template... open(FILE, "./infer_query_terms.json"); read(FILE, $json_template, (-s FILE)); close(FILE); $json_template=~s/\[TEMPLATE_ENTITYQUERY\]/$ARG_ETYPE_QUERY/; $json_template=~s/\[TEMPLATE_ENTITYRETURN\]/$ARG_ETYPE_RETURN/; $json_template=~s/\[TEMPLATE_TMPFILE\]/RESULTS.$$/; $json_template=~s/\[TEMPLATE_HEADTMPFILE\]/RESULTSHEAD.$$/; $json_template=~s/\[TEMPLATE_PROJECTID\]/$PROJECTID/; $json_template=~s/\[TEMPLATE_TABLENAME\]/$TABLENAME/g; #we have to replace this twice... ######### #get our access token... $ACCESSTOKEN = `gcloud auth print-access-token`; $ACCESSTOKEN=~s/\s+$//; print "Access Token: ($ACCESSTOKEN)\n"; $json_template=~s/\[TEMPLATE_ACCESSTOKEN\]/$ACCESSTOKEN/; ######### ################## open(OUT, ">$OUTFILE"); open(INFILE, $INFILE); while() { $TERM = $_; $TERM=~s/\s+$//; if (length($TERM) < 1) { next; } if ($TERM=~/'/) { next; } #skip entries with apostrophes... print "Running ($TERM)\n"; $TERMESC = $TERM; $TERMESC=~s/\'/\\'/g; $TRIES = 0; mainrun: $json_run = $json_template; $json_run=~s/\[TEMPLATE_ENTITYVALUE\]/$TERMESC/; unlink("./RESULTS.$$"); open(LOG, ">./LOG.RUN"); print LOG $json_run; close(LOG); system($json_run); ######## #and parse the results... $list = ''; $json_results = ''; open(FILE, "./RESULTS.$$"); read(FILE, $json_results, (-s FILE)); close(FILE); if (index($json_results, 'Quota exceeded for quota group') > -1) { open(LOG, ">>./LOG.FAIL"); print LOG "========================================\n"; print LOG "FAILTED($DAY)\n"; $tbuf = ''; open(LOGDATA, "RESULTSHEAD.$$"); read(LOGDATA, $tbuf, (-s LOGDATA)); close(LOGDATA); print LOG $tbuf; print LOG "\n\n"; close(LOG); $TRIES++; if ($TRIES < 3) { print "\tRetrying...\n"; sleep 1; goto mainrun; } } unlink("./RESULTS.$$"); unlink("./RESULTSHEAD.$$"); undef($JSONREF); eval { $JSONREF = decode_json $json_results; }; foreach $entry (@{$JSONREF->{'results'}[0]->{'distributions'}[0]->{'entries'}}) { $val = $entry->{'value'}; $val=~s/^.*?=//; #$score = $entry->{'score'}; $matchgroup =$entry->{'matchedGroupCount'}; $totalgroup = $entry->{'totalGroupCount'}; $list .= "$val, "; } $list=~s/, $//; ######## print OUT "$TERM\t$list\n"; print "\tRESULTS: $TERM\t($list)\n"; } close(INFILE); close(OUT); unlink("LOG.RUN"); unlink("RESULTS.$$"); unlink("RESULTSHEAD.$$"); ##################