X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fsession.c;h=18c9aeecadbbd13183b241cecdbbb40c3a4922ca;hb=102d64b6e147d9bca7298abf857febdb41106ee8;hp=6dce5d92e20e49cee0deeae69ac3e3925118c89a;hpb=5ed2c5a6dfed76a94fdfb4fb2853267ef2688ce7;p=pazpar2-moved-to-github.git diff --git a/src/session.c b/src/session.c index 6dce5d9..18c9aee 100644 --- a/src/session.c +++ b/src/session.c @@ -76,6 +76,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "settings.h" #include "normalize7bit.h" +#include + #define TERMLIST_HIGH_SCORE 25 #define MAX_CHUNK 15 @@ -961,7 +963,9 @@ static struct hitsbytarget *hitsbytarget_nb(struct session *se, res[*count].id = client_get_id(cl); res[*count].name = *name ? name : "Unknown"; res[*count].hits = client_get_hits(cl); + res[*count].approximation = client_get_approximation(cl); res[*count].records = client_get_num_records(cl); + res[*count].filtered = client_get_num_records_filtered(cl); res[*count].diagnostic = client_get_diagnostic(cl, &res[*count].addinfo); res[*count].state = client_get_state_str(cl); @@ -1012,7 +1016,7 @@ static int cmp_ht(const void *p1, const void *p2) } static int targets_termlist_nb(WRBUF wrbuf, struct session *se, int num, - NMEM nmem) + NMEM nmem, int version) { struct hitsbytarget *ht; int count, i; @@ -1039,7 +1043,14 @@ static int targets_termlist_nb(WRBUF wrbuf, struct session *se, int num, wrbuf_printf(wrbuf, "" ODR_INT_PRINTF "\n", ht[i].hits); - + + if (version >= 2) { + // Should not print if we know it isn't a approximation. + wrbuf_printf(wrbuf, "" ODR_INT_PRINTF "\n", ht[i].approximation); + wrbuf_printf(wrbuf, "%d\n", ht[i].records); + wrbuf_printf(wrbuf, "%d\n", ht[i].filtered); + } + wrbuf_puts(wrbuf, ""); wrbuf_xmlputs(wrbuf, ht[i].state); wrbuf_puts(wrbuf, "\n"); @@ -1052,7 +1063,7 @@ static int targets_termlist_nb(WRBUF wrbuf, struct session *se, int num, } void perform_termlist(struct http_channel *c, struct session *se, - const char *name, int num) + const char *name, int num, int version) { int i, j; NMEM nmem_tmp = nmem_create(); @@ -1069,7 +1080,8 @@ void perform_termlist(struct http_channel *c, struct session *se, for (j = 0; j < num_names; j++) { const char *tname; - + int must_generate_empty = 1; /* bug 5350 */ + for (i = 0; i < se->num_termlists; i++) { tname = se->termlists[i].name; @@ -1081,6 +1093,7 @@ void perform_termlist(struct http_channel *c, struct session *se, wrbuf_puts(c->wrbuf, "wrbuf, tname); wrbuf_puts(c->wrbuf, "\">\n"); + must_generate_empty = 0; p = termlist_highscore(se->termlists[i].termlist, &len); if (p) @@ -1113,8 +1126,15 @@ void perform_termlist(struct http_channel *c, struct session *se, wrbuf_xmlputs(c->wrbuf, tname); wrbuf_puts(c->wrbuf, "\">\n"); - targets_termlist_nb(c->wrbuf, se, num, c->nmem); + targets_termlist_nb(c->wrbuf, se, num, c->nmem, version); wrbuf_puts(c->wrbuf, "\n"); + must_generate_empty = 0; + } + if (must_generate_empty) + { + wrbuf_puts(c->wrbuf, "wrbuf, names[j]); + wrbuf_puts(c->wrbuf, "\"/>\n"); } } session_leave(se); @@ -1169,7 +1189,7 @@ void show_single_stop(struct session *se, struct record_cluster *rec) struct record_cluster **show_range_start(struct session *se, struct reclist_sortparms *sp, - int start, int *num, int *total, Odr_int *sumhits) + int start, int *num, int *total, Odr_int *sumhits, Odr_int *approx_hits) { struct record_cluster **recs; struct reclist_sortparms *spp; @@ -1202,9 +1222,10 @@ struct record_cluster **show_range_start(struct session *se, *total = reclist_get_num_records(se->reclist); *sumhits = 0; - for (l = se->clients_active; l; l = l->next) + for (l = se->clients_active; l; l = l->next) { *sumhits += client_get_hits(l->client); - + *approx_hits += client_get_approximation(l->client); + } for (i = 0; i < start; i++) if (!reclist_read_record(se->reclist)) { @@ -1532,8 +1553,7 @@ int ingest_record(struct client *cl, const char *rec, if (!check_record_filter(root, sdb)) { - session_log(se, YLOG_LOG, "Filtered out record no %d from %s", - record_no, sdb->database->id); + session_log(se, YLOG_LOG, "Filtered out record no %d from %s", record_no, sdb->database->id); xmlFreeDoc(xdoc); return -2; }