From 6fb94e445feb12eaf7d815815d76a93fd514b3ee Mon Sep 17 00:00:00 2001 From: Lex Berezhny Date: Tue, 16 Jul 2019 00:29:38 -0400 Subject: [PATCH] ver gets cache hit info --- .../packages/lbry/lib/src/load_generator.dart | 8 +++++- .../lbry/lib/src/server_connection.dart | 6 +++-- .../lib/src/widgets/time_series_chart.dart | 27 ++++++++++++++----- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/dart/packages/lbry/lib/src/load_generator.dart b/dart/packages/lbry/lib/src/load_generator.dart index 751b347f3..609af65cc 100644 --- a/dart/packages/lbry/lib/src/load_generator.dart +++ b/dart/packages/lbry/lib/src/load_generator.dart @@ -9,6 +9,7 @@ class LoadRequest { final Map payload; Completer completer; Stopwatch timer; + Socket socket; bool get isDone => completer.isCompleted; int get elapsed => timer.elapsedMilliseconds; @@ -21,6 +22,7 @@ class LoadRequest { completer.future.whenComplete(() => timer.stop()); try { Socket.connect(this.host, this.port).then((socket) { + this.socket = socket; utf8.decoder.bind(socket).listen((r) { if (r.contains('"jsonrpc": "2.0", "result": ')) { socket.close(); @@ -54,6 +56,7 @@ class ClientLoadGenerator { final LoadTickCallback tickCallback; int load = 1; Map query; + List backlog = []; ClientLoadGenerator(this.host, this.port, {this.tickCallback, this.query}) { if (query == null) { @@ -67,7 +70,7 @@ class ClientLoadGenerator { start() { var previous = spawn_requests(); - var backlog = []; + backlog = []; _timer = Timer.periodic(Duration(seconds: 1), (t) { var stat = ClientLoadDataPoint(t.tick); backlog.removeWhere((r) { @@ -94,6 +97,9 @@ class ClientLoadGenerator { stop() { _timer.cancel(); + for (var remaining in backlog) { + remaining?.socket?.close(); + } } List spawn_requests() { diff --git a/dart/packages/lbry/lib/src/server_connection.dart b/dart/packages/lbry/lib/src/server_connection.dart index 4c1bbe796..4d0d48b62 100644 --- a/dart/packages/lbry/lib/src/server_connection.dart +++ b/dart/packages/lbry/lib/src/server_connection.dart @@ -59,14 +59,15 @@ class APICallMetrics { final int execution_time; final int query_time; final int query_count; + final int cache_hit; final int avg_wait_time; final int avg_total_time; final int avg_execution_time; final int avg_query_time_per_search; final int avg_query_time_per_query; APICallMetrics( - this.started, this.finished, this.total_time, - this.execution_time, this.query_time, this.query_count): + this.started, this.finished, this.total_time, this.execution_time, + this.query_time, this.query_count, this.cache_hit): avg_wait_time=finished > 0 ? ((total_time - (execution_time + query_time))/finished).round() : 0, avg_total_time=finished > 0 ? (total_time/finished).round() : 0, avg_execution_time=finished > 0 ? (execution_time/finished).round() : 0, @@ -79,6 +80,7 @@ class APICallMetrics { data['execution_time'] ?? 0, data['query_time'] ?? 0, data['query_count'] ?? 0, + data['cache_hit'] ?? 0, ); } diff --git a/dart/packages/ver/lib/src/widgets/time_series_chart.dart b/dart/packages/ver/lib/src/widgets/time_series_chart.dart index 8162ded3f..b8a103be9 100644 --- a/dart/packages/ver/lib/src/widgets/time_series_chart.dart +++ b/dart/packages/ver/lib/src/widgets/time_series_chart.dart @@ -40,7 +40,7 @@ class ServerLoadChartState extends State { super.initState(); seriesData = [ charts.Series( - id: 'Searches Started', + id: 'Search Start', colorFn: (_, __) => charts.MaterialPalette.deepOrange.shadeDefault.lighter, domainFn: (ServerLoadDataPoint load, _) => load.tick, @@ -48,7 +48,7 @@ class ServerLoadChartState extends State { data: widget.server.serverLoadData, ), charts.Series( - id: 'Searches Finished', + id: 'Search Finish', colorFn: (_, __) => charts.MaterialPalette.deepOrange.shadeDefault.darker, domainFn: (ServerLoadDataPoint load, _) => load.tick, @@ -56,20 +56,33 @@ class ServerLoadChartState extends State { data: widget.server.serverLoadData, ), charts.Series( - id: 'Resolves Started', - colorFn: (_, __) => - charts.MaterialPalette.teal.shadeDefault.lighter, + id: 'Search Cache', + colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault.darker, + domainFn: (ServerLoadDataPoint load, _) => load.tick, + measureFn: (ServerLoadDataPoint load, _) => load.search.cache_hit, + data: widget.server.serverLoadData, + ), + charts.Series( + id: 'Resolve Start', + colorFn: (_, __) => charts.MaterialPalette.teal.shadeDefault.lighter, domainFn: (ServerLoadDataPoint load, _) => load.tick, measureFn: (ServerLoadDataPoint load, _) => load.resolve.started, data: widget.server.serverLoadData, ), charts.Series( - id: 'Resolves Finished', + id: 'Resolve Finish', colorFn: (_, __) => charts.MaterialPalette.teal.shadeDefault.darker, domainFn: (ServerLoadDataPoint load, _) => load.tick, measureFn: (ServerLoadDataPoint load, _) => load.resolve.finished, data: widget.server.serverLoadData, - ) + ), + charts.Series( + id: 'Resolve Cache', + colorFn: (_, __) => charts.MaterialPalette.cyan.shadeDefault.darker, + domainFn: (ServerLoadDataPoint load, _) => load.tick, + measureFn: (ServerLoadDataPoint load, _) => load.resolve.cache_hit, + data: widget.server.serverLoadData, + ), ]; }