X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;ds=sidebyside;f=src%2Fhttp_command.c;h=07e37be175d6799ad4dceae74141b152c18aadba;hb=9e89d4e3c7bc9c9a9b0e7cedc54ca3f15b49de1f;hp=4258b29a2999b3c8a01e370244637cebeefc339d;hpb=58aba67e02b51934a2cae721269fb381d8b0b08b;p=pazpar2-moved-to-github.git
diff --git a/src/http_command.c b/src/http_command.c
index 4258b29..07e37be 100644
--- a/src/http_command.c
+++ b/src/http_command.c
@@ -489,55 +489,6 @@ static void cmd_settings(struct http_channel *c)
release_session(c, s);
}
-// Compares two hitsbytarget nodes by hitcount
-static int cmp_ht(const void *p1, const void *p2)
-{
- const struct hitsbytarget *h1 = p1;
- const struct hitsbytarget *h2 = p2;
- return h2->hits - h1->hits;
-}
-
-// This implements functionality somewhat similar to 'bytarget', but in a termlist form
-static int targets_termlist(WRBUF wrbuf, struct session *se, int num,
- NMEM nmem)
-{
- struct hitsbytarget *ht;
- int count, i;
-
- ht = hitsbytarget(se, &count, nmem);
- qsort(ht, count, sizeof(struct hitsbytarget), cmp_ht);
- for (i = 0; i < count && i < num && ht[i].hits > 0; i++)
- {
-
- // do only print terms which have display names
-
- wrbuf_puts(wrbuf, "\n");
-
- wrbuf_puts(wrbuf, "");
- wrbuf_xmlputs(wrbuf, ht[i].id);
- wrbuf_puts(wrbuf, "\n");
-
- wrbuf_puts(wrbuf, "");
- if (!ht[i].name || !ht[i].name[0])
- wrbuf_xmlputs(wrbuf, "NO TARGET NAME");
- else
- wrbuf_xmlputs(wrbuf, ht[i].name);
- wrbuf_puts(wrbuf, "\n");
-
- wrbuf_printf(wrbuf, "" ODR_INT_PRINTF "\n",
- ht[i].hits);
-
- wrbuf_puts(wrbuf, "");
- wrbuf_xmlputs(wrbuf, ht[i].state);
- wrbuf_puts(wrbuf, "\n");
-
- wrbuf_printf(wrbuf, "%d\n",
- ht[i].diagnostic);
- wrbuf_puts(wrbuf, "\n");
- }
- return count;
-}
-
static void cmd_termlist(struct http_channel *c)
{
struct http_response *rs = c->response;
@@ -547,79 +498,23 @@ static void cmd_termlist(struct http_channel *c)
const char *nums = http_argbyname(rq, "num");
int num = 15;
int status;
- WRBUF debug_log = 0;
if (!s)
return;
status = session_active_clients(s->psession);
- if (!name)
- name = "subject";
- if (strlen(name) > 255)
- return;
if (nums)
num = atoi(nums);
- debug_log = wrbuf_alloc();
-
wrbuf_rewind(c->wrbuf);
wrbuf_puts(c->wrbuf, "\n");
wrbuf_printf(c->wrbuf, "%d\n", status);
- while (*name)
- {
- char tname[256];
- const char *tp;
-
- if (!(tp = strchr(name, ',')))
- tp = name + strlen(name);
- strncpy(tname, name, tp - name);
- tname[tp - name] = '\0';
- wrbuf_puts(c->wrbuf, "wrbuf, tname);
- wrbuf_puts(c->wrbuf, "\">\n");
- if (!strcmp(tname, "xtargets"))
- {
- int targets = targets_termlist(c->wrbuf, s->psession, num, c->nmem);
- wrbuf_printf(debug_log, " xtargets: %d", targets);
- }
- else
- {
- int len;
- struct termlist_score **p =
- get_termlist_score(s->psession, tname, &len);
- if (p && len)
- wrbuf_printf(debug_log, " %s: %d", tname, len);
- if (p)
- {
- int i;
- for (i = 0; i < len && i < num; i++)
- {
- // prevnt sending empty term elements
- if (!p[i]->term || !p[i]->term[0])
- continue;
-
- wrbuf_puts(c->wrbuf, "");
- wrbuf_puts(c->wrbuf, "");
- wrbuf_xmlputs(c->wrbuf, p[i]->term);
- wrbuf_puts(c->wrbuf, "");
-
- wrbuf_printf(c->wrbuf,
- "%d",
- p[i]->frequency);
- wrbuf_puts(c->wrbuf, "\n");
- }
- }
- }
- wrbuf_puts(c->wrbuf, "
\n");
- name = tp;
- if (*name == ',')
- name++;
- }
+
+ perform_termlist(c, s->psession, name, num);
+
wrbuf_puts(c->wrbuf, "\n");
- yaz_log(YLOG_DEBUG, "termlist response: %s ", wrbuf_cstr(debug_log));
- wrbuf_destroy(debug_log);
rs->payload = nmem_strdup(rq->channel->nmem, wrbuf_cstr(c->wrbuf));
http_send_response(c);
release_session(c, s);
@@ -711,7 +606,7 @@ static void cmd_bytarget(struct http_channel *c)
if (!s)
return;
- ht = hitsbytarget(s->psession, &count, c->nmem);
+ ht = get_hitsbytarget(s->psession, &count, c->nmem);
wrbuf_rewind(c->wrbuf);
wrbuf_puts(c->wrbuf, HTTP_COMMAND_RESPONSE_PREFIX "OK");