Save response times in DB and show in log (for debugging)

This commit is contained in:
ejurgensen 2014-08-24 12:43:32 +02:00
parent 31ef4d4e13
commit d157aca620
3 changed files with 9 additions and 6 deletions

View File

@ -60,6 +60,7 @@ struct daapcache_command
struct { struct {
char *query; char *query;
char *ua; char *ua;
int msec;
struct evbuffer *evbuf; struct evbuffer *evbuf;
} arg; } arg;
@ -215,6 +216,7 @@ daapcache_create(void)
" id INTEGER PRIMARY KEY NOT NULL," \ " id INTEGER PRIMARY KEY NOT NULL," \
" query VARCHAR(4096) UNIQUE NOT NULL," \ " query VARCHAR(4096) UNIQUE NOT NULL," \
" user_agent VARCHAR(1024)," \ " user_agent VARCHAR(1024)," \
" msec INTEGER DEFAULT 0," \
" timestamp INTEGER DEFAULT 0" \ " timestamp INTEGER DEFAULT 0" \
");" ");"
#define I_QUERY \ #define I_QUERY \
@ -342,7 +344,7 @@ daapcache_reply_add(const char *query, struct evbuffer *evbuf)
static int static int
daapcache_query_add(struct daapcache_command *cmd) daapcache_query_add(struct daapcache_command *cmd)
{ {
#define Q_TMPL "INSERT OR REPLACE INTO queries (user_agent, query, timestamp) VALUES ('%q', '%q', %" PRIi64 ");" #define Q_TMPL "INSERT OR REPLACE INTO queries (user_agent, query, msec, timestamp) VALUES ('%q', '%q', %d, %" PRIi64 ");"
#define Q_CLEANUP "DELETE FROM queries WHERE id NOT IN (SELECT id FROM queries ORDER BY timestamp DESC LIMIT 20);" #define Q_CLEANUP "DELETE FROM queries WHERE id NOT IN (SELECT id FROM queries ORDER BY timestamp DESC LIMIT 20);"
char *query; char *query;
char *errmsg; char *errmsg;
@ -366,7 +368,7 @@ daapcache_query_add(struct daapcache_command *cmd)
remove_tag(cmd->arg.query, "session-id"); remove_tag(cmd->arg.query, "session-id");
remove_tag(cmd->arg.query, "revision-number"); remove_tag(cmd->arg.query, "revision-number");
query = sqlite3_mprintf(Q_TMPL, cmd->arg.ua, cmd->arg.query, (int64_t)time(NULL)); query = sqlite3_mprintf(Q_TMPL, cmd->arg.ua, cmd->arg.query, cmd->arg.msec, (int64_t)time(NULL));
if (!query) if (!query)
{ {
DPRINTF(E_LOG, L_DCACHE, "Out of memory making query string.\n"); DPRINTF(E_LOG, L_DCACHE, "Out of memory making query string.\n");
@ -386,7 +388,7 @@ daapcache_query_add(struct daapcache_command *cmd)
sqlite3_free(query); sqlite3_free(query);
DPRINTF(E_DBG, L_DCACHE, "Added query to query list (user-agent %s): %s\n", cmd->arg.ua, cmd->arg.query); DPRINTF(E_INFO, L_DCACHE, "Slow query (%d ms) added to cache: '%s' (user-agent: '%s')\n", cmd->arg.msec, cmd->arg.query, cmd->arg.ua);
free(cmd->arg.ua); free(cmd->arg.ua);
free(cmd->arg.query); free(cmd->arg.query);
@ -688,7 +690,7 @@ daapcache_get(const char *query)
} }
void void
daapcache_add(const char *query, const char *ua) daapcache_add(const char *query, const char *ua, int msec)
{ {
struct daapcache_command *cmd; struct daapcache_command *cmd;
@ -709,6 +711,7 @@ daapcache_add(const char *query, const char *ua)
cmd->func = daapcache_query_add; cmd->func = daapcache_query_add;
cmd->arg.query = strdup(query); cmd->arg.query = strdup(query);
cmd->arg.ua = strdup(ua); cmd->arg.ua = strdup(ua);
cmd->arg.msec = msec;
nonblock_command(cmd); nonblock_command(cmd);
} }

View File

@ -16,7 +16,7 @@ struct evbuffer *
daapcache_get(const char *query); daapcache_get(const char *query);
void void
daapcache_add(const char *query, const char *ua); daapcache_add(const char *query, const char *ua, int msec);
int int
daapcache_threshold(void); daapcache_threshold(void);

View File

@ -2706,7 +2706,7 @@ daap_request(struct evhttp_request *req)
DPRINTF(E_DBG, L_DB, "DAAP request handled in %d milliseconds\n", msec); DPRINTF(E_DBG, L_DB, "DAAP request handled in %d milliseconds\n", msec);
if (msec > daapcache_threshold()) if (msec > daapcache_threshold())
daapcache_add(full_uri, ua); daapcache_add(full_uri, ua, msec);
evhttp_clear_headers(&query); evhttp_clear_headers(&query);
evbuffer_free(evbuf); evbuffer_free(evbuf);