fix some minor glitches, add idle_msecs column to log tables

pull/37/merge
tstack 15 years ago
parent a285c0dc2b
commit 7a3650a711

@ -25,7 +25,8 @@ endif
AM_LDFLAGS = \ AM_LDFLAGS = \
$(SQLITE3_LDFLAGS) \ $(SQLITE3_LDFLAGS) \
$(PCRE_LDFLAGS) \ $(PCRE_LDFLAGS) \
-pthread -pthread \
-static
AM_CPPFLAGS = \ AM_CPPFLAGS = \
-Wall \ -Wall \

@ -211,7 +211,8 @@ noinst_LIBRARIES = libdiag.a
AM_LDFLAGS = \ AM_LDFLAGS = \
$(SQLITE3_LDFLAGS) \ $(SQLITE3_LDFLAGS) \
$(PCRE_LDFLAGS) \ $(PCRE_LDFLAGS) \
-pthread -pthread \
-static
AM_CPPFLAGS = \ AM_CPPFLAGS = \
-Wall \ -Wall \

@ -98,7 +98,6 @@ typedef enum {
} lnav_status_t; } lnav_status_t;
typedef enum { typedef enum {
LG_SEARCH,
LG_GRAPH, LG_GRAPH,
LG_CAPTURE, LG_CAPTURE,
@ -264,6 +263,8 @@ static struct {
stack<textview_curses *> ld_view_stack; stack<textview_curses *> ld_view_stack;
textview_curses ld_views[LNV__MAX]; textview_curses ld_views[LNV__MAX];
auto_ptr<grep_highlighter> ld_search_child[LNV__MAX];
vis_line_t ld_search_start_line;
readline_curses *ld_rl_view; readline_curses *ld_rl_view;
logfile_sub_source ld_log_source; logfile_sub_source ld_log_source;
@ -417,6 +418,11 @@ static void rebuild_indexes(bool force)
lnav_data.ld_grep_child[lpc]->get_grep_proc()->start(); lnav_data.ld_grep_child[lpc]->get_grep_proc()->start();
} }
} }
if (lnav_data.ld_search_child[LNV_LOG].get() != NULL) {
lnav_data.ld_search_child[LNV_LOG]->get_grep_proc()->
queue_request(start_line);
lnav_data.ld_search_child[LNV_LOG]->get_grep_proc()->start();
}
} }
lnav_data.ld_bottom_source.update_filtered(lss); lnav_data.ld_bottom_source.update_filtered(lss);
@ -624,11 +630,6 @@ static bool toggle_view(textview_curses *toggle_tc)
lnav_data.ld_view_stack.pop(); lnav_data.ld_view_stack.pop();
} }
else { else {
int lpc;
for (lpc = 0; lpc < LG__MAX; lpc++) {
lnav_data.ld_grep_child[lpc].reset();
}
lnav_data.ld_view_stack.push(toggle_tc); lnav_data.ld_view_stack.push(toggle_tc);
retval = true; retval = true;
} }
@ -639,6 +640,15 @@ static bool toggle_view(textview_curses *toggle_tc)
return retval; return retval;
} }
static void ensure_view(textview_curses *expected_tc)
{
textview_curses *tc = lnav_data.ld_view_stack.top();
if (tc != expected_tc) {
toggle_view(expected_tc);
}
}
static void moveto_cluster(vis_line_t (bookmark_vector::*f)(vis_line_t), static void moveto_cluster(vis_line_t (bookmark_vector::*f)(vis_line_t),
bookmark_type_t *bt, bookmark_type_t *bt,
vis_line_t top) vis_line_t top)
@ -1000,6 +1010,8 @@ static void handle_paging_key(int ch)
case '/': case '/':
lnav_data.ld_mode = LNM_SEARCH; lnav_data.ld_mode = LNM_SEARCH;
lnav_data.ld_search_start_line = lnav_data.ld_view_stack.top()->
get_top();
lnav_data.ld_rl_view->focus(LNM_SEARCH, "/"); lnav_data.ld_rl_view->focus(LNM_SEARCH, "/");
break; break;
@ -1466,7 +1478,6 @@ static int sql_callback(void *arg,
{ {
db_label_source &dls = lnav_data.ld_db_rows; db_label_source &dls = lnav_data.ld_db_rows;
hist_source &hs = lnav_data.ld_db_source; hist_source &hs = lnav_data.ld_db_source;
double num_value = 0.0;
int row_number; int row_number;
int lpc, retval = 0; int lpc, retval = 0;
@ -1481,6 +1492,8 @@ static int sql_callback(void *arg,
} }
} }
for (lpc = 0; lpc < ncols; lpc++) { for (lpc = 0; lpc < ncols; lpc++) {
double num_value = 0.0;
dls.push_column(values[lpc]); dls.push_column(values[lpc]);
sscanf(values[lpc], "%lf", &num_value); sscanf(values[lpc], "%lf", &num_value);
hs.add_value(row_number, bucket_type_t(lpc), num_value); hs.add_value(row_number, bucket_type_t(lpc), num_value);
@ -1491,18 +1504,16 @@ static int sql_callback(void *arg,
static void rl_search(void *dummy, readline_curses *rc) static void rl_search(void *dummy, readline_curses *rc)
{ {
static string last_search[LG__MAX]; static string last_search[LNV__MAX];
string name; string name;
int index;
switch (lnav_data.ld_mode) { switch (lnav_data.ld_mode) {
case LNM_SEARCH: case LNM_SEARCH:
index = LG_SEARCH;
name = "(search"; name = "(search";
break; break;
case LNM_CAPTURE: case LNM_CAPTURE:
index = LG_CAPTURE; assert(0);
name = "(capture"; name = "(capture";
break; break;
@ -1530,6 +1541,10 @@ static void rl_search(void *dummy, readline_curses *rc)
lnav_data.ld_bottom_source. lnav_data.ld_bottom_source.
grep_error(string("sql error: ") + string(errmsg)); grep_error(string("sql error: ") + string(errmsg));
} }
else {
lnav_data.ld_bottom_source.
grep_error("");
}
} }
return; return;
default: default:
@ -1537,10 +1552,11 @@ static void rl_search(void *dummy, readline_curses *rc)
break; break;
} }
auto_ptr<grep_highlighter> &gc = lnav_data.ld_grep_child[index]; textview_curses *tc = lnav_data.ld_view_stack.top();
int index = (tc - lnav_data.ld_views);
auto_ptr<grep_highlighter> &gc = lnav_data.ld_search_child[index];
if ((gc.get() == NULL) || (rc->get_value() != last_search[index])) { if ((gc.get() == NULL) || (rc->get_value() != last_search[index])) {
textview_curses *tc = lnav_data.ld_view_stack.top();
const char *errptr; const char *errptr;
pcre *code; pcre *code;
int eoff; int eoff;
@ -1553,6 +1569,8 @@ static void rl_search(void *dummy, readline_curses *rc)
fprintf(stderr, "start search for: %s\n", rc->get_value().c_str()); fprintf(stderr, "start search for: %s\n", rc->get_value().c_str());
tc->set_top(lnav_data.ld_search_start_line);
if (rc->get_value().empty()) { if (rc->get_value().empty()) {
lnav_data.ld_bottom_source.grep_error(""); lnav_data.ld_bottom_source.grep_error("");
} }
@ -1663,8 +1681,9 @@ static void rl_callback(void *dummy, readline_curses *rc)
hs.analyze(); hs.analyze();
lnav_data.ld_views[LNV_DB].reload_data(); lnav_data.ld_views[LNV_DB].reload_data();
if (dls.dls_rows.size() > 0) if (dls.dls_rows.size() > 0) {
toggle_view(&lnav_data.ld_views[LNV_DB]); ensure_view(&lnav_data.ld_views[LNV_DB]);
}
} }
} }
@ -1808,6 +1827,7 @@ static void looper(void)
"from", "from",
"group", "group",
"having", "having",
"idle_msecs",
"index", "index",
"indexed", "indexed",
"inner", "inner",
@ -2006,10 +2026,15 @@ static void looper(void)
&ready_rfds, NULL, NULL, &ready_rfds, NULL, NULL,
&to); &to);
if (lnav_data.ld_grep_child[LG_SEARCH].get() != NULL) { {
int index;
index = lnav_data.ld_view_stack.top() - lnav_data.ld_views;
if (lnav_data.ld_search_child[index].get() != NULL) {
lnav_data.ld_bottom_source. lnav_data.ld_bottom_source.
update_hits(lnav_data.ld_view_stack.top()); update_hits(lnav_data.ld_view_stack.top());
} }
}
if (rc < 0) { if (rc < 0) {
switch (errno) { switch (errno) {
@ -2068,6 +2093,14 @@ static void looper(void)
} }
} }
} }
for (lpc = 0; lpc < LNV__MAX; lpc++) {
auto_ptr<grep_highlighter> &gc =
lnav_data.ld_search_child[lpc];
if (gc.get() != NULL) {
gc->get_grep_proc()->check_fd_set(ready_rfds);
}
}
rlc.check_fd_set(ready_rfds); rlc.check_fd_set(ready_rfds);
} }

@ -17,6 +17,7 @@ static string declare_table_statement(log_vtab_impl *vi)
<< " line_number int,\n" << " line_number int,\n"
<< " path text,\n" << " path text,\n"
<< " log_time datetime,\n" << " log_time datetime,\n"
<< " idle_msecs int,\n"
<< " level text,\n" << " level text,\n"
<< " raw_line text"; << " raw_line text";
vi->get_columns(cols); vi->get_columns(cols);
@ -205,6 +206,24 @@ static int vt_column(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int col)
} }
break; break;
case 3: case 3:
if (vc->curr_line == 0) {
sqlite3_result_int64( ctx, 0 );
}
else {
content_line_t prev_cl(vt->lss->at(vis_line_t(vc->curr_line - 1)));
logfile *prev_lf = vt->lss->find(prev_cl);
logfile::iterator prev_ll = prev_lf->begin() + prev_cl;
uint64_t prev_time, curr_line_time;
prev_time = prev_ll->get_time() * 1000ULL;
prev_time += prev_ll->get_millis();
curr_line_time = ll->get_time() * 1000ULL;
curr_line_time += ll->get_millis();
assert(curr_line_time >= prev_time);
sqlite3_result_int64( ctx, curr_line_time - prev_time );
}
break;
case 4:
{ {
const char *level_name = ll->get_level_name(); const char *level_name = ll->get_level_name();
@ -214,7 +233,7 @@ static int vt_column(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int col)
SQLITE_STATIC); SQLITE_STATIC);
} }
break; break;
case 4: case 5:
{ {
string line; string line;
@ -232,7 +251,7 @@ static int vt_column(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int col)
line_iter = lf->begin() + cl; line_iter = lf->begin() + cl;
lf->read_line(line_iter, line); lf->read_line(line_iter, line);
vt->vi->extract(line, col - 5, ctx); vt->vi->extract(line, col - 6, ctx);
} }
break; break;
} }

@ -179,6 +179,8 @@ readline_curses::readline_curses()
signal(SIGALRM, sigalrm); signal(SIGALRM, sigalrm);
signal(SIGWINCH, sigwinch); signal(SIGWINCH, sigwinch);
signal(SIGINT, SIG_DFL);
signal(SIGTERM, SIG_DFL);
dup2(this->rc_pty[RCF_SLAVE], STDIN_FILENO); dup2(this->rc_pty[RCF_SLAVE], STDIN_FILENO);
dup2(this->rc_pty[RCF_SLAVE], STDOUT_FILENO); dup2(this->rc_pty[RCF_SLAVE], STDOUT_FILENO);
@ -404,9 +406,7 @@ void readline_curses::check_fd_set(fd_set &ready_rfds)
char buffer[128]; char buffer[128];
rc = read(this->rc_pty[RCF_MASTER], buffer, sizeof(buffer)); rc = read(this->rc_pty[RCF_MASTER], buffer, sizeof(buffer));
assert(rc != 0); if (rc > 0) {
assert(rc != -1 && (errno != EINTR || errno != EIO));
{ {
int lpc; int lpc;
@ -419,11 +419,11 @@ void readline_curses::check_fd_set(fd_set &ready_rfds)
this->map_output(buffer, rc); this->map_output(buffer, rc);
} }
}
if (FD_ISSET(this->rc_command_pipe[RCF_MASTER], &ready_rfds)) { if (FD_ISSET(this->rc_command_pipe[RCF_MASTER], &ready_rfds)) {
char msg[1024 + 1]; char msg[1024 + 1];
rc = read(this->rc_command_pipe[RCF_MASTER], msg, sizeof(msg) - 1); rc = read(this->rc_command_pipe[RCF_MASTER], msg, sizeof(msg) - 1);
assert(rc != 0);
if (rc >= 2) { if (rc >= 2) {
string old_value = this->rc_value; string old_value = this->rc_value;

@ -198,7 +198,7 @@ static char *hex2bits(const char *src)
len = strlen(src) / 2; len = strlen(src) / 2;
retval = new char[sizeof(int) + len]; retval = new char[sizeof(int) + len];
*((int *)retval) = len; *((int *)retval) = len;
while (src[0]) { while (pos < (sizeof(int) + len)) {
int val; int val;
sscanf(src, "%2x", &val); sscanf(src, "%2x", &val);

Loading…
Cancel
Save