simplify client_test a bit. print uTP stats unconditionally
This commit is contained in:
parent
1f86beb253
commit
685679bbbb
|
@ -1036,6 +1036,13 @@ DISK OPTIONS
|
||||||
|
|
||||||
TORRENT is a path to a .torrent file
|
TORRENT is a path to a .torrent file
|
||||||
MAGNETURL is a magnet link
|
MAGNETURL is a magnet link
|
||||||
|
|
||||||
|
example alert_masks:
|
||||||
|
dht | errors = 1025
|
||||||
|
peer-log | errors = 32769
|
||||||
|
torrent-log | errors = 16385
|
||||||
|
ses-log | errors = 8193
|
||||||
|
ses-log | torrent-log | errors = 24578
|
||||||
)") ;
|
)") ;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1310,6 +1317,7 @@ MAGNETURL is a magnet link
|
||||||
, std::max(5, view.num_visible_torrents() + 2));
|
, std::max(5, view.num_visible_torrents() + 2));
|
||||||
view.set_size(terminal_width, height);
|
view.set_size(terminal_width, height);
|
||||||
ses_view.set_pos(height);
|
ses_view.set_pos(height);
|
||||||
|
ses_view.set_width(terminal_width);
|
||||||
|
|
||||||
int c = 0;
|
int c = 0;
|
||||||
if (sleep_and_input(&c, refresh_delay))
|
if (sleep_and_input(&c, refresh_delay))
|
||||||
|
@ -1540,7 +1548,6 @@ MAGNETURL is a magnet link
|
||||||
if (c == 'f') print_file_progress = !print_file_progress;
|
if (c == 'f') print_file_progress = !print_file_progress;
|
||||||
if (c == 'P') show_pad_files = !show_pad_files;
|
if (c == 'P') show_pad_files = !show_pad_files;
|
||||||
if (c == 'g') show_dht_status = !show_dht_status;
|
if (c == 'g') show_dht_status = !show_dht_status;
|
||||||
if (c == 'u') ses_view.print_utp_stats(!ses_view.print_utp_stats());
|
|
||||||
if (c == 'x') print_disk_stats = !print_disk_stats;
|
if (c == 'x') print_disk_stats = !print_disk_stats;
|
||||||
// toggle columns
|
// toggle columns
|
||||||
if (c == '1') print_ip = !print_ip;
|
if (c == '1') print_ip = !print_ip;
|
||||||
|
@ -1580,10 +1587,10 @@ DISPLAY OPTIONS
|
||||||
left/right arrow keys: select torrent filter
|
left/right arrow keys: select torrent filter
|
||||||
up/down arrow keys: select torrent
|
up/down arrow keys: select torrent
|
||||||
[i] toggle show peers [d] toggle show downloading pieces
|
[i] toggle show peers [d] toggle show downloading pieces
|
||||||
[u] show uTP stats [f] toggle show files
|
[P] show pad files (in file list) [f] toggle show files
|
||||||
[g] show DHT [x] toggle disk cache stats
|
[g] show DHT [x] toggle disk cache stats
|
||||||
[t] show trackers [l] toggle show log
|
[t] show trackers [l] toggle show log
|
||||||
[P] show pad files (in file list) [y] toggle show piece matrix
|
[y] toggle show piece matrix
|
||||||
|
|
||||||
COLUMN OPTIONS
|
COLUMN OPTIONS
|
||||||
[1] toggle IP column [2]
|
[1] toggle IP column [2]
|
||||||
|
@ -1675,7 +1682,7 @@ COLUMN OPTIONS
|
||||||
{
|
{
|
||||||
torrent_status const& s = view.get_active_torrent();
|
torrent_status const& s = view.get_active_torrent();
|
||||||
|
|
||||||
print((piece_bar(s.pieces, 126) + "\x1b[K\n").c_str());
|
print((piece_bar(s.pieces, terminal_width - 2) + "\x1b[K\n").c_str());
|
||||||
pos += 1;
|
pos += 1;
|
||||||
|
|
||||||
if ((print_downloads && s.state != torrent_status::seeding)
|
if ((print_downloads && s.state != torrent_status::seeding)
|
||||||
|
|
|
@ -41,7 +41,6 @@ using libtorrent::span;
|
||||||
|
|
||||||
session_view::session_view()
|
session_view::session_view()
|
||||||
: m_position(0)
|
: m_position(0)
|
||||||
, m_print_utp_stats(false)
|
|
||||||
{
|
{
|
||||||
using lt::find_metric_idx;
|
using lt::find_metric_idx;
|
||||||
|
|
||||||
|
@ -57,11 +56,16 @@ void session_view::set_pos(int pos)
|
||||||
m_position = pos;
|
m_position = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void session_view::set_width(int width)
|
||||||
|
{
|
||||||
|
m_width = width;
|
||||||
|
}
|
||||||
|
|
||||||
int session_view::pos() const { return m_position; }
|
int session_view::pos() const { return m_position; }
|
||||||
|
|
||||||
int session_view::height() const
|
int session_view::height() const
|
||||||
{
|
{
|
||||||
return 3 + m_print_utp_stats;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
void session_view::render()
|
void session_view::render()
|
||||||
|
@ -71,16 +75,15 @@ void session_view::render()
|
||||||
|
|
||||||
int y = m_position;
|
int y = m_position;
|
||||||
|
|
||||||
float seconds = (m_timestamp[0] - m_timestamp[1]) / 1000000.f;
|
float const seconds = (m_timestamp[0] - m_timestamp[1]) / 1000000.f;
|
||||||
|
|
||||||
int download_rate = int((m_cnt[0][m_recv_idx] - m_cnt[1][m_recv_idx])
|
int const download_rate = int((m_cnt[0][m_recv_idx] - m_cnt[1][m_recv_idx])
|
||||||
/ seconds);
|
/ seconds);
|
||||||
int upload_rate = int((m_cnt[0][m_sent_idx] - m_cnt[1][m_sent_idx])
|
int const upload_rate = int((m_cnt[0][m_sent_idx] - m_cnt[1][m_sent_idx])
|
||||||
/ seconds);
|
/ seconds);
|
||||||
|
|
||||||
pos += std::snprintf(str, sizeof(str), "%s%s fail: %s down: %s (%s) "
|
pos += std::snprintf(str, sizeof(str), "%s%s fail: %s down: %s (%s) "
|
||||||
" bw queue: %s | %s conns: %3d unchoked: %2d / %2d "
|
" bw queue: %s | %s conns: %3d unchoked: %2d / %2d%*s\x1b[K"
|
||||||
" %s\x1b[K"
|
|
||||||
, esc("48;5;238")
|
, esc("48;5;238")
|
||||||
, esc("1")
|
, esc("1")
|
||||||
, add_suffix(m_cnt[0][m_failed_bytes_idx]).c_str()
|
, add_suffix(m_cnt[0][m_failed_bytes_idx]).c_str()
|
||||||
|
@ -91,6 +94,7 @@ void session_view::render()
|
||||||
, int(m_cnt[0][m_num_peers_idx])
|
, int(m_cnt[0][m_num_peers_idx])
|
||||||
, int(m_cnt[0][m_unchoked_idx])
|
, int(m_cnt[0][m_unchoked_idx])
|
||||||
, int(m_cnt[0][m_unchoke_slots_idx])
|
, int(m_cnt[0][m_unchoke_slots_idx])
|
||||||
|
, std::max(0, m_width - 86)
|
||||||
, esc("0"));
|
, esc("0"));
|
||||||
|
|
||||||
set_cursor_pos(0, y++);
|
set_cursor_pos(0, y++);
|
||||||
|
@ -98,7 +102,7 @@ void session_view::render()
|
||||||
|
|
||||||
std::snprintf(str, sizeof(str), "%s%swaste: %s up: %s (%s) "
|
std::snprintf(str, sizeof(str), "%s%swaste: %s up: %s (%s) "
|
||||||
"disk queue: %s | %s cache w: %3d%% r: %3d%% "
|
"disk queue: %s | %s cache w: %3d%% r: %3d%% "
|
||||||
"size: w: %s r: %s total: %s %s\x1b[K"
|
"size: w: %s r: %s total: %s %*s\x1b[K"
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
, esc("40")
|
, esc("40")
|
||||||
#else
|
#else
|
||||||
|
@ -117,79 +121,23 @@ void session_view::render()
|
||||||
, add_suffix(m_cnt[0][m_writes_cache_idx] * 16 * 1024).c_str()
|
, 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_reads_cache_idx] * 16 * 1024).c_str()
|
||||||
, add_suffix(m_cnt[0][m_blocks_in_use_idx] * 16 * 1024).c_str()
|
, add_suffix(m_cnt[0][m_blocks_in_use_idx] * 16 * 1024).c_str()
|
||||||
|
, std::max(0, m_width - 119)
|
||||||
, esc("0"));
|
, esc("0"));
|
||||||
set_cursor_pos(0, y++);
|
set_cursor_pos(0, y++);
|
||||||
print(str);
|
print(str);
|
||||||
|
|
||||||
/*
|
std::snprintf(str, sizeof(str), "%s%suTP idle: %d syn: %d est: %d fin: %d wait: %d%*s\x1b[K"
|
||||||
std::snprintf(str, sizeof(str), "| timing - "
|
, esc("48;5;238")
|
||||||
" read: %6d ms | write: %6d ms | hash: %6d"
|
, esc("1")
|
||||||
, cs.average_read_time / 1000, cs.average_write_time / 1000
|
|
||||||
, cs.average_hash_time / 1000);
|
|
||||||
|
|
||||||
set_cursor_pos(0, y++);
|
|
||||||
print(str);
|
|
||||||
|
|
||||||
std::snprintf(str, sizeof(str), "| jobs - queued: %4d (%4d) pending: %4d blocked: %4d "
|
|
||||||
"queued-bytes: %5" PRId64 " kB"
|
|
||||||
, cs.queued_jobs, cs.peak_queued, cs.pending_jobs, cs.blocked_jobs
|
|
||||||
, m_cnt[0][m_queued_bytes_idx] / 1000);
|
|
||||||
|
|
||||||
set_cursor_pos(0, y++);
|
|
||||||
print(str);
|
|
||||||
|
|
||||||
std::snprintf(str, sizeof(str), "| cache - total: %4d read: %4d write: %4d pinned: %4d write-queue: %4d"
|
|
||||||
, cs.read_cache_size + cs.write_cache_size, cs.read_cache_size
|
|
||||||
, cs.write_cache_size, cs.pinned_blocks
|
|
||||||
, int(m_cnt[0][m_queued_bytes_idx] / 0x4000));
|
|
||||||
set_cursor_pos(0, y++);
|
|
||||||
print(str);
|
|
||||||
*/
|
|
||||||
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;
|
|
||||||
|
|
||||||
char mru_caption[100];
|
|
||||||
std::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];
|
|
||||||
std::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]));
|
|
||||||
|
|
||||||
pos = std::snprintf(str, sizeof(str), "cache: ");
|
|
||||||
if (arc_size > 0)
|
|
||||||
{
|
|
||||||
if (mru_size > 0)
|
|
||||||
{
|
|
||||||
pos += std::snprintf(str + pos, sizeof(str) - pos, "%s"
|
|
||||||
, progress_bar(int(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 += std::snprintf(str + pos, sizeof(str) - pos, "|");
|
|
||||||
if (mfu_size)
|
|
||||||
{
|
|
||||||
pos += std::snprintf(str + pos, sizeof(str) - pos, "%s"
|
|
||||||
, progress_bar(int(m_cnt[0][m_mfu_size_idx] * 1000 / mfu_size)
|
|
||||||
, mfu_size * (m_width-8) / arc_size, col_green, '#', '-'
|
|
||||||
, mfu_caption).c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pos += std::snprintf(str + pos, sizeof(str) - pos, "\x1b[K");
|
|
||||||
set_cursor_pos(0, y++);
|
|
||||||
print(str);
|
|
||||||
|
|
||||||
if (m_print_utp_stats)
|
|
||||||
{
|
|
||||||
std::snprintf(str, sizeof(str), "uTP idle: %d syn: %d est: %d fin: %d wait: %d\x1b[K"
|
|
||||||
, int(m_cnt[0][m_utp_idle])
|
, int(m_cnt[0][m_utp_idle])
|
||||||
, int(m_cnt[0][m_utp_syn_sent])
|
, int(m_cnt[0][m_utp_syn_sent])
|
||||||
, int(m_cnt[0][m_utp_connected])
|
, int(m_cnt[0][m_utp_connected])
|
||||||
, int(m_cnt[0][m_utp_fin_sent])
|
, int(m_cnt[0][m_utp_fin_sent])
|
||||||
, int(m_cnt[0][m_utp_close_wait]));
|
, int(m_cnt[0][m_utp_close_wait])
|
||||||
|
, int(m_width - 37)
|
||||||
|
, esc("0"));
|
||||||
set_cursor_pos(0, y++);
|
set_cursor_pos(0, y++);
|
||||||
print(str);
|
print(str);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void session_view::update_counters(span<std::int64_t const> stats_counters
|
void session_view::update_counters(span<std::int64_t const> stats_counters
|
||||||
|
|
|
@ -44,6 +44,7 @@ struct session_view
|
||||||
session_view();
|
session_view();
|
||||||
|
|
||||||
void set_pos(int pos);
|
void set_pos(int pos);
|
||||||
|
void set_width(int width);
|
||||||
|
|
||||||
int pos() const;
|
int pos() const;
|
||||||
|
|
||||||
|
@ -51,9 +52,6 @@ struct session_view
|
||||||
|
|
||||||
void render();
|
void render();
|
||||||
|
|
||||||
void print_utp_stats(bool p) { m_print_utp_stats = p; }
|
|
||||||
bool print_utp_stats() const { return m_print_utp_stats; }
|
|
||||||
|
|
||||||
void update_counters(lt::span<std::int64_t const> stats_counters, std::uint64_t t);
|
void update_counters(lt::span<std::int64_t const> stats_counters, std::uint64_t t);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -69,8 +67,6 @@ private:
|
||||||
// respectively. The timestamps are microseconds since session start
|
// respectively. The timestamps are microseconds since session start
|
||||||
std::uint64_t m_timestamp[2];
|
std::uint64_t m_timestamp[2];
|
||||||
|
|
||||||
bool m_print_utp_stats;
|
|
||||||
|
|
||||||
int const m_queued_bytes_idx = lt::find_metric_idx("disk.queued_write_bytes");
|
int const m_queued_bytes_idx = lt::find_metric_idx("disk.queued_write_bytes");
|
||||||
int const m_wasted_bytes_idx = lt::find_metric_idx("net.recv_redundant_bytes");
|
int const m_wasted_bytes_idx = lt::find_metric_idx("net.recv_redundant_bytes");
|
||||||
int const m_failed_bytes_idx = lt::find_metric_idx("net.recv_failed_bytes");
|
int const m_failed_bytes_idx = lt::find_metric_idx("net.recv_failed_bytes");
|
||||||
|
|
Loading…
Reference in New Issue