X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fhttp_command.c;h=5b84951de532a0f898e8b54850228a38b36bf6b1;hb=2a5ea4b8e8163f827c269241d21d1850164bac8e;hp=f0dc4402d2438ffeb5601886d3741973452d06ac;hpb=e51169ac3c161349e5255517d388f2f5c0cfd12f;p=pazpar2-moved-to-github.git diff --git a/src/http_command.c b/src/http_command.c index f0dc440..5b84951 100644 --- a/src/http_command.c +++ b/src/http_command.c @@ -41,6 +41,30 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "settings.h" #include "client.h" +#ifdef __LINUX__ +#include +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); + +} +#else +#define print_meminfo(x) +#endif + + // Update this when the protocol changes #define PAZPAR2_PROTOCOL_VERSION "1" @@ -246,7 +270,7 @@ unsigned int make_sessionid(void) unsigned int res; seq++; - if (global_parameters.debug_mode) + if (global_parameters.predictable_sessions) res = seq; else { @@ -339,7 +363,12 @@ static int process_settings(struct session *se, struct http_request *rq, static void cmd_exit(struct http_channel *c) { + char buf[1024]; + struct http_response *rs = c->response; yaz_log(YLOG_WARN, "exit"); + sprintf(buf, HTTP_COMMAND_RESPONSE_PREFIX "OK"); + rs->payload = nmem_strdup(c->nmem, buf); + http_send_response(c); http_close_server(c->server); } @@ -587,22 +616,24 @@ static void cmd_termlist(struct http_channel *c) size_t session_get_memory_status(struct session *session); -static void cmd_session_status(struct http_channel *c) +static void session_status(struct http_channel *c, struct http_session *s) { + size_t session_nmem; + wrbuf_printf(c->wrbuf, "%u\n", s->activity_counter); + wrbuf_printf(c->wrbuf, "%zu\n", nmem_total(s->nmem) ); + session_nmem = session_get_memory_status(s->psession); + wrbuf_printf(c->wrbuf, "%zu\n", session_nmem); +} + +static void cmd_session_status(struct http_channel *c) { struct http_response *rs = c->response; struct http_session *s = locate_session(c); - size_t session_nmem; if (!s) return; wrbuf_rewind(c->wrbuf); wrbuf_puts(c->wrbuf, HTTP_COMMAND_RESPONSE_PREFIX "OK\n"); - wrbuf_printf(c->wrbuf, "%u\n", s->activity_counter); - wrbuf_printf(c->wrbuf, "%zu\n", nmem_total(s->nmem) ); - - session_nmem = session_get_memory_status(s->psession); - wrbuf_printf(c->wrbuf, "%zu\n", session_nmem); - + session_status(c, s); wrbuf_puts(c->wrbuf, "\n"); rs->payload = nmem_strdup(c->nmem, wrbuf_cstr(c->wrbuf)); http_send_response(c); @@ -612,7 +643,11 @@ static void cmd_session_status(struct http_channel *c) int sessions_count(void); int clients_count(void); +#ifdef HAVE_RESULTSETS_COUNT int resultsets_count(void); +#else +#define resultsets_count() 0 +#endif static void cmd_server_status(struct http_channel *c) { @@ -621,14 +656,37 @@ static void cmd_server_status(struct http_channel *c) int clients = clients_count(); int resultsets = resultsets_count(); wrbuf_rewind(c->wrbuf); - wrbuf_puts(c->wrbuf, HTTP_COMMAND_RESPONSE_PREFIX "OK\n"); - wrbuf_printf(c->wrbuf, "Sessions %u Clients: %u Resultsets: %u\n\n", sessions, clients, resultsets); + wrbuf_puts(c->wrbuf, HTTP_COMMAND_RESPONSE_PREFIX "\n"); + wrbuf_printf(c->wrbuf, " %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); + 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); +*/ + wrbuf_puts(c->wrbuf, "\n"); rs->payload = nmem_strdup(c->nmem, wrbuf_cstr(c->wrbuf)); http_send_response(c); + xmalloc_trav(0); } - static void cmd_bytarget(struct http_channel *c) { struct http_response *rs = c->response; @@ -669,11 +727,10 @@ static void cmd_bytarget(struct http_channel *c) if (settings && *settings == '1') { wrbuf_puts(c->wrbuf, "\n"); - wrbuf_puts(c->wrbuf, wrbuf_cstr(ht[i].settings_xml)); + wrbuf_puts(c->wrbuf, ht[i].settings_xml); wrbuf_puts(c->wrbuf, "\n"); } wrbuf_puts(c->wrbuf, ""); - wrbuf_destroy(ht[i].settings_xml); } wrbuf_puts(c->wrbuf, ""); @@ -1147,7 +1204,7 @@ static void cmd_info(struct http_channel *c) wrbuf_rewind(c->wrbuf); wrbuf_puts(c->wrbuf, HTTP_COMMAND_RESPONSE_PREFIX "\n"); wrbuf_puts(c->wrbuf, " \n"); - wrbuf_puts(c->wrbuf, "wrbuf, " wrbuf, " sha1=\"%s\"", PAZPAR2_VERSION_SHA1); #endif @@ -1184,8 +1241,8 @@ struct { { "search", cmd_search }, { "termlist", cmd_termlist }, { "exit", cmd_exit }, - { "sessionstatus", cmd_session_status }, - { "serverstatus", cmd_server_status }, + { "session-status", cmd_session_status }, + { "server-status", cmd_server_status }, { "ping", cmd_ping }, { "record", cmd_record }, { "info", cmd_info },