X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fhttp_command.c;h=4a05abd6d54016f5ba6431eaa5f357ff07bbde2e;hb=6d4317c4e23171219f825163d01cd896fee3d1f5;hp=1de0354a3401347f78b9c90f6996114d21a2e047;hpb=fb19bc317370b4f4b508088b034b4c2d19257042;p=pazpar2-moved-to-github.git diff --git a/src/http_command.c b/src/http_command.c index 1de0354..4a05abd 100644 --- a/src/http_command.c +++ b/src/http_command.c @@ -1,5 +1,5 @@ /* This file is part of Pazpar2. - Copyright (C) 2006-2013 Index Data + Copyright (C) Index Data Pazpar2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -49,18 +49,27 @@ void print_meminfo(WRBUF wrbuf) struct mallinfo minfo; minfo = mallinfo(); wrbuf_printf(wrbuf, " \n" - " %d\n" - " %d\n" - " %d\n" - " %d\n" - " %d\n" - " %d\n" - " %d\n" - " %d\n" - " %d\n" - " \n", - minfo.arena, minfo.uordblks, minfo.fordblks,minfo.ordblks, minfo.keepcost, minfo.hblks, minfo.hblkhd, minfo.arena + minfo.hblkhd, minfo.uordblks + minfo.hblkhd); - + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " \n", + minfo.arena, + minfo.ordblks, + minfo.smblks, + minfo.hblks, + minfo.hblkhd, + minfo.usmblks, + minfo.fsmblks, + minfo.uordblks, + minfo.fordblks, + minfo.keepcost); } #else #define print_meminfo(x) @@ -126,7 +135,7 @@ http_sessions_t http_sessions_create(void) hs->session_list = 0; hs->mutex = 0; pazpar2_mutex_create(&hs->mutex, "http_sessions"); - hs->log_level = yaz_log_module_level("HTTP"); + hs->log_level = yaz_log_module_level("http"); return hs; } @@ -165,7 +174,7 @@ struct http_session *http_session_create(struct conf_service *service, char tmp_str[50]; sprintf(tmp_str, "session#%u", sesid); - r->psession = new_session(nmem, service, sesid); + r->psession = session_create(nmem, service, sesid); r->session_id = sesid; r->timestamp = 0; r->nmem = nmem; @@ -401,6 +410,7 @@ static int process_settings(struct session *se, struct http_request *rq, struct http_response *rs) { struct http_argument *a; + NMEM nmem = nmem_create(); for (a = rq->arguments; a; a = a->next) if (strchr(a->name, '[')) @@ -411,17 +421,18 @@ static int process_settings(struct session *se, struct http_request *rq, char *setting; // Nmem_strsplit *rules*!!! - nmem_strsplit(se->session_nmem, "[]", a->name, &res, &num); + nmem_strsplit(nmem, "[]", a->name, &res, &num); if (num != 2) { error(rs, PAZPAR2_MALFORMED_SETTING, a->name); + nmem_destroy(nmem); return -1; } setting = res[0]; dbname = res[1]; - session_apply_setting(se, dbname, setting, - nmem_strdup(se->session_nmem, a->value)); + session_apply_setting(se, dbname, setting, a->value); } + nmem_destroy(nmem); return 0; } @@ -507,9 +518,7 @@ static void apply_local_setting(void *client_data, { struct session *se = (struct session *) client_data; - session_apply_setting(se, nmem_strdup(se->session_nmem, set->target), - nmem_strdup(se->session_nmem, set->name), - nmem_strdup(se->session_nmem, set->value)); + session_apply_setting(se, set->target, set->name, set->value); } static void cmd_settings(struct http_channel *c) @@ -694,43 +703,17 @@ static void cmd_session_status(struct http_channel *c) release_session(c, s); } -#ifdef HAVE_RESULTSETS_COUNT -int resultsets_count(void); -#else -#define resultsets_count() 0 -#endif - static void cmd_server_status(struct http_channel *c) { int sessions = sessions_count(); int clients = clients_count(); - int resultsets = resultsets_count(); response_open_ok(c, "server-status"); - wrbuf_printf(c->wrbuf, "\n %u\n", sessions); - wrbuf_printf(c->wrbuf, " %u\n", clients); - /* Only works if yaz has been compiled with enabling of this */ - wrbuf_printf(c->wrbuf, " %u\n",resultsets); + + wrbuf_printf(c->wrbuf, "\n %d\n", sessions); + wrbuf_printf(c->wrbuf, " %d\n", clients); print_meminfo(c->wrbuf); -/* TODO add all sessions status */ -/* http_sessions_t http_sessions = c->http_sessions; */ -/* struct http_session *p; */ -/* - yaz_mutex_enter(http_sessions->mutex); - for (p = http_sessions->session_list; p; p = p->next) - { - p->activity_counter++; - wrbuf_puts(c->wrbuf, "\n"); - wrbuf_printf(c->wrbuf, "%s\n", p->session_id); - yaz_mutex_leave(http_sessions->mutex); - session_status(c, p); - wrbuf_puts(c->wrbuf, "\n"); - yaz_mutex_enter(http_sessions->mutex); - p->activity_counter--; - } - yaz_mutex_leave(http_sessions->mutex); -*/ response_close(c, "server-status"); xmalloc_trav(0); } @@ -788,9 +771,9 @@ static void bytarget_response(struct http_channel *c, struct http_session *s, wrbuf_printf(c->wrbuf, "%d\n", ht[i].records - ht[i].filtered); + wrbuf_printf(c->wrbuf, "%d\n", ht[i].filtered); if (version >= 2) { - wrbuf_printf(c->wrbuf, "%d\n", ht[i].filtered); wrbuf_printf(c->wrbuf, "" ODR_INT_PRINTF "\n", ht[i].approximation); } @@ -809,6 +792,15 @@ static void bytarget_response(struct http_channel *c, struct http_session *s, wrbuf_puts(c->wrbuf, ht[i].suggestions_xml); wrbuf_puts(c->wrbuf, ""); } + if (ht[i].query_data) + { + wrbuf_puts(c->wrbuf, ""); + wrbuf_xmlputs(c->wrbuf, ht[i].query_type); + wrbuf_puts(c->wrbuf, "\n"); + wrbuf_puts(c->wrbuf, ""); + wrbuf_xmlputs(c->wrbuf, ht[i].query_data); + wrbuf_puts(c->wrbuf, "\n"); + } wrbuf_puts(c->wrbuf, ""); } response_close(c, "bytarget"); @@ -1288,7 +1280,7 @@ static void cmd_show(struct http_channel *c) status = session_active_clients(s->psession); - if (block) + if (block && reclist_get_num_records(s->psession->reclist) == 0) { if (!strcmp(block, "preferred") && !session_is_preferred_clients_ready(s->psession) @@ -1457,6 +1449,17 @@ static void cmd_stat(struct http_channel *c) release_session(c, s); } +static void cmd_stop(struct http_channel *c) +{ + struct http_session *s = locate_session(c); + if (!s) + return; + response_open_ok(c, "stop"); + session_stop(s->psession); + response_close(c, "stop"); + release_session(c, s); +} + static void cmd_info(struct http_channel *c) { char yaz_version_str[20]; @@ -1516,6 +1519,7 @@ struct { { "ping", cmd_ping }, { "record", cmd_record }, { "info", cmd_info }, + { "stop", cmd_stop }, {0,0} };