client_test fixes

This commit is contained in:
Arvid Norberg 2014-07-10 08:32:32 +00:00
parent 374380667c
commit 622981d2cd
6 changed files with 77 additions and 64 deletions

View File

@ -1815,6 +1815,8 @@ int main(int argc, char* argv[])
{
torrent_status const& s = view.get_active_torrent();
print(piece_bar(s.pieces, 126).c_str());
if ((print_downloads && s.state != torrent_status::seeding)
|| print_peers)
h.get_peer_info(peers);
@ -1940,7 +1942,10 @@ int main(int argc, char* argv[])
out += "___________________________________\n";
}
}
else
{
print("\x1b[K");
}
if (print_log)
@ -1953,6 +1958,9 @@ int main(int argc, char* argv[])
}
}
++pos;
set_cursor_pos(0, pos);
print(out.c_str());
fflush(stdout);

View File

@ -81,7 +81,7 @@ std::string color(std::string const& s, color_code c)
}
std::string const& progress_bar(int progress, int width, color_code c
, char fill, char bg, std::string caption)
, char fill, char bg, std::string caption, int flags)
{
static std::string bar;
bar.clear();
@ -108,8 +108,13 @@ std::string const& progress_bar(int progress, int width, color_code c
caption.resize(width, ' ');
char str[256];
snprintf(str, sizeof(str), "\x1b[4%d;3%dm%s\x1b[48;5;238m\x1b[37m%s\x1b[49;39m"
, c, tc, caption.substr(0, progress_chars).c_str(), caption.substr(progress_chars).c_str());
if (flags & progress_invert)
snprintf(str, sizeof(str), "\x1b[48;5;238m\x1b[37m%s\x1b[4%d;3%dm%s\x1b[49;39m"
, caption.substr(0, progress_chars).c_str(), c, tc
, caption.substr(progress_chars).c_str());
else
snprintf(str, sizeof(str), "\x1b[4%d;3%dm%s\x1b[48;5;238m\x1b[37m%s\x1b[49;39m"
, c, tc, caption.substr(0, progress_chars).c_str(), caption.substr(progress_chars).c_str());
bar = str;
}
return bar;

View File

@ -24,8 +24,10 @@ std::string add_suffix(float val, char const* suffix = 0);
std::string color(std::string const& s, color_code c);
enum { progress_invert = 1};
std::string const& progress_bar(int progress, int width, color_code c = col_green
, char fill = '#', char bg = '-', std::string caption = "");
, char fill = '#', char bg = '-', std::string caption = "", int flags = 0);
void set_cursor_pos(int x, int y);

View File

@ -3,6 +3,8 @@
session_view::session_view()
{
m_width = 128;
std::vector<lt::stats_metric> metrics = lt::session_stats_metrics();
m_cnt[0].resize(metrics.size(), 0);
m_cnt[1].resize(metrics.size(), 0);
@ -17,10 +19,8 @@ session_view::session_view()
m_unchoke_slots_idx = find_metric_idx(metrics, "ses.num_unchoke_slots");
m_limiter_up_queue_idx = find_metric_idx(metrics, "net.limiter_up_queue");
m_limiter_down_queue_idx = find_metric_idx(metrics, "net.limiter_down_queue");
m_limiter_up_bytes_idx = find_metric_idx(metrics, "net.limiter_up_bytes");
m_limiter_down_bytes_idx = find_metric_idx(metrics, "net.limiter_down_bytes");
m_queued_writes_idx = find_metric_idx(metrics, "disk.num_write_jobs");
m_queued_reads_idx = find_metric_idx(metrics, "disk.num_write_jobs");
m_queued_reads_idx = find_metric_idx(metrics, "disk.num_read_jobs");
m_writes_cache_idx = find_metric_idx(metrics, "disk.write_cache_blocks");
m_reads_cache_idx = find_metric_idx(metrics, "disk.read_cache_blocks");
@ -30,6 +30,11 @@ session_view::session_view()
m_blocks_in_use_idx = find_metric_idx(metrics, "disk.disk_blocks_in_use");
m_blocks_written_idx = find_metric_idx(metrics, "disk.num_blocks_written");
m_write_ops_idx = find_metric_idx(metrics, "disk.num_write_ops");
m_mfu_size_idx = find_metric_idx(metrics, "disk.arc_mfu_size");
m_mfu_ghost_idx = find_metric_idx(metrics, "disk.arc_mfu_ghost_size");
m_mru_size_idx = find_metric_idx(metrics, "disk.arc_mru_size");
m_mru_ghost_idx = find_metric_idx(metrics, "disk.arc_mru_ghost_size");
}
void session_view::set_pos(int pos)
@ -41,7 +46,7 @@ int session_view::pos() const { return m_position; }
int session_view::height() const
{
return 2;
return 3;
}
void session_view::render()
@ -58,29 +63,34 @@ void session_view::render()
int upload_rate = (m_cnt[0][m_sent_payload_idx] - m_cnt[1][m_sent_payload_idx])
/ seconds;
pos += snprintf(str, sizeof(str), "| conns: %d down: %s (%s) up: %s (%s)\x1b[K"
, int(m_cnt[0][m_num_peers_idx])
pos += snprintf(str, sizeof(str), "%s%s fail: %s down: %s (%s) "
" bw queue: %s | %s conns: %3d unchoked: %2d / %2d "
" %s\x1b[K"
, esc("48;5;238")
, esc("1")
, add_suffix(m_cnt[0][m_failed_bytes_idx]).c_str()
, color(add_suffix(download_rate, "/s"), col_green).c_str()
, color(add_suffix(m_cnt[0][m_recv_payload_idx]), col_green).c_str()
, color(add_suffix(upload_rate, "/s"), col_red).c_str()
, color(add_suffix(m_cnt[0][m_sent_payload_idx]), col_red).c_str());
, color(to_string(m_cnt[0][m_limiter_up_queue_idx], 3), col_red).c_str()
, color(to_string(m_cnt[0][m_limiter_down_queue_idx], 3), col_green).c_str()
, int(m_cnt[0][m_num_peers_idx])
, int(m_cnt[0][m_unchoked_idx])
, int(m_cnt[0][m_unchoke_slots_idx])
, esc("0"));
set_cursor_pos(0, y++);
print(str);
snprintf(str, sizeof(str), "| waste: %s fail: %s unchoked: %d / %d "
"bw queues: %8d (%d) | %8d (%d) disk queues: %d | %d cache: w: %d%% r: %d%% "
"size: w: %s r: %s total: %s\x1b[K"
snprintf(str, sizeof(str), "%s%swaste: %s up: %s (%s) "
"disk queue: %s | %s cache w: %3d%% r: %3d%% "
"size: w: %s r: %s total: %s %s\x1b[K"
, esc("48;5;238")
, esc("1")
, add_suffix(m_cnt[0][m_wasted_bytes_idx]).c_str()
, add_suffix(m_cnt[0][m_failed_bytes_idx]).c_str()
, int(m_cnt[0][m_unchoked_idx])
, int(m_cnt[0][m_unchoke_slots_idx])
, int(m_cnt[0][m_limiter_up_bytes_idx])
, int(m_cnt[0][m_limiter_up_queue_idx])
, int(m_cnt[0][m_limiter_down_bytes_idx])
, int(m_cnt[0][m_limiter_down_queue_idx])
, int(m_cnt[0][m_queued_writes_idx])
, int(m_cnt[0][m_queued_reads_idx])
, color(add_suffix(upload_rate, "/s"), col_red).c_str()
, color(add_suffix(m_cnt[0][m_sent_payload_idx]), col_red).c_str()
, color(to_string(m_cnt[0][m_queued_reads_idx], 3), col_red).c_str()
, color(to_string(m_cnt[0][m_queued_writes_idx], 3), col_green).c_str()
, int((m_cnt[0][m_blocks_written_idx] - m_cnt[0][m_write_ops_idx]) * 100
/ (std::max)(boost::uint64_t(1), m_cnt[0][m_blocks_written_idx]))
, int(m_cnt[0][m_cache_hit_idx] * 100
@ -88,7 +98,7 @@ void session_view::render()
, add_suffix(m_cnt[0][m_writes_cache_idx] * 16 * 1024).c_str()
, add_suffix(m_cnt[0][m_reads_cache_idx] * 16 * 1024).c_str()
, add_suffix(m_cnt[0][m_blocks_in_use_idx] * 16 * 1024).c_str()
);
, esc("0"));
set_cursor_pos(0, y++);
print(str);
@ -115,39 +125,40 @@ void session_view::render()
, int(m_cnt[0][m_queued_bytes_idx] / 0x4000));
set_cursor_pos(0, y++);
print(str);
int mru_size = cs.arc_mru_size + cs.arc_mru_ghost_size;
int mfu_size = cs.arc_mfu_size + cs.arc_mfu_ghost_size;
*/
int mru_size = int(m_cnt[0][m_mru_size_idx] + m_cnt[0][m_mru_ghost_idx]);
int mfu_size = int(m_cnt[0][m_mfu_size_idx] + m_cnt[0][m_mfu_ghost_idx]);
int arc_size = mru_size + mfu_size;
snprintf(str, sizeof(str), "LRU: (%d) %d LFU: %d (%d)\n"
, cs.arc_mru_ghost_size, cs.arc_mru_size
, cs.arc_mfu_size, cs.arc_mfu_ghost_size);
char mru_caption[100];
snprintf(mru_caption, sizeof(mru_caption), "MRU: %d (%d)"
, int(m_cnt[0][m_mru_size_idx]), int(m_cnt[0][m_mru_ghost_idx]));
char mfu_caption[100];
snprintf(mfu_caption, sizeof(mfu_caption), "MFU: %d (%d)"
, int(m_cnt[0][m_mfu_size_idx]), int(m_cnt[0][m_mfu_ghost_idx]));
set_cursor_pos(0, y++);
print(str);
str[0] = '\0';
pos = snprintf(str, sizeof(str), "cache: ");
if (arc_size > 0)
{
pos = snprintf(str, sizeof(str), " ");
if (mru_size > 0)
{
pos = snprintf(str + pos, sizeof(str) - pos, "%s"
, progress_bar(cs.arc_mru_ghost_size * 1000 / mru_size
, mru_size * (terminal_width-3) / arc_size, col_yellow, '-', '#').c_str());
pos += snprintf(str + pos, sizeof(str) - pos, "%s"
, progress_bar(m_cnt[0][m_mru_ghost_idx] * 1000 / mru_size
, mru_size * (m_width-8) / arc_size, col_yellow, '-', '#'
, mru_caption, progress_invert).c_str());
}
pos = snprintf(str, sizeof(str), "|");
pos += snprintf(str + pos, sizeof(str) - pos, "|");
if (mfu_size)
{
pos = snprintf(str + pos, sizeof(str) - pos, "%s"
, progress_bar(cs.arc_mfu_size * 1000 / mfu_size
, mfu_size * (terminal_width-3) / arc_size, col_green, '=', '-').c_str());
pos += snprintf(str + pos, sizeof(str) - pos, "%s"
, progress_bar(m_cnt[0][m_mfu_size_idx] * 1000 / mfu_size
, mfu_size * (m_width-8) / arc_size, col_green, '#', '-'
, mfu_caption).c_str());
}
}
pos += snprintf(str + pos, sizeof(str) - pos, "\x1b[K");
set_cursor_pos(0, y++);
print(str);
*/
}
void session_view::update_counters(std::vector<boost::uint64_t>& stats_counters

View File

@ -23,6 +23,7 @@ struct session_view
private:
int m_position;
int m_width;
// there are two sets of counters. the current one and the last one. This
// is used to calculate rates
@ -42,8 +43,6 @@ private:
int m_unchoke_slots_idx;
int m_limiter_up_queue_idx;
int m_limiter_down_queue_idx;
int m_limiter_up_bytes_idx;
int m_limiter_down_bytes_idx;
int m_queued_writes_idx;
int m_queued_reads_idx;
int m_writes_cache_idx;
@ -54,6 +53,11 @@ private:
int m_blocks_in_use_idx;
int m_blocks_written_idx;
int m_write_ops_idx;
int m_mfu_size_idx;
int m_mfu_ghost_idx;
int m_mru_size_idx;
int m_mru_ghost_idx;
};
#endif

View File

@ -336,23 +336,6 @@ void torrent_view::print_torrent(lt::torrent_status const& s, bool selected)
pos += snprintf(str + pos, sizeof(str) - pos, "%s", esc("0"));
pos += snprintf(str + pos, sizeof(str) - pos, "\x1b[K");
/*
// don't print the piece bar if we don't have any piece, or if we have all
if (print_piece_bar && s.num_pieces != 0 && s.progress_ppm != 1000000)
{
out += " ";
out += piece_bar(s.pieces, terminal_width - 7);
out += "\n";
++lines_printed;
if (s.seed_mode)
{
out += " ";
out += piece_bar(s.verified_pieces, terminal_width - 7);
out += "\n";
++lines_printed;
}
}
*/
if (m_width + 1 < sizeof(str))
str[m_width + 1] = '\0';