X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fhttp_command.c;h=4123cccecf99c2fa98826bf18554f79dbd6463fe;hb=a1892356917081446d2714369c68da7322a824a4;hp=64331a468c23adc3455413784a3674d02fa323ca;hpb=817e3ec506c4095bc4fcc1923cee36153ef4ee43;p=pazpar2-moved-to-github.git diff --git a/src/http_command.c b/src/http_command.c index 64331a4..4123ccc 100644 --- a/src/http_command.c +++ b/src/http_command.c @@ -126,7 +126,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 +165,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 +401,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 +412,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 +509,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 +694,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 +762,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 +783,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"); @@ -1457,6 +1440,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 +1510,7 @@ struct { { "ping", cmd_ping }, { "record", cmd_record }, { "info", cmd_info }, + { "stop", cmd_stop }, {0,0} };