@@ -5,42 +5,73 @@ import { isErrorDict } from "@/services/reporting";
5
5
import { OverlayMsgStats } from "@/models/overlay.model" ;
6
6
import { ColumnDef } from "@tanstack/react-table" ;
7
7
import { useInterval } from '@/hooks/useInterval' ;
8
+ import { formatBytes } from "@/lib/utils" ;
9
+ import { ChevronDown , ChevronRight } from "lucide-react" ;
8
10
9
11
10
12
const statisticColumns : ColumnDef < OverlayMsgStats > [ ] = [
11
13
{
12
14
accessorKey : "name" ,
13
15
header : getHeader ( "Name" , false ) ,
16
+ cell : ( { row } ) => {
17
+ return (
18
+ < div
19
+ className = "flex text-start items-center"
20
+ style = { {
21
+ paddingLeft : `${ row . depth * 2 } rem`
22
+ } }
23
+ >
24
+ { row . original . subRows && row . original . subRows . length > 0 && (
25
+ < button onClick = { row . getToggleExpandedHandler ( ) } >
26
+ { row . getIsExpanded ( )
27
+ ? < ChevronDown size = "16" color = "#777" > </ ChevronDown >
28
+ : < ChevronRight size = "16" color = "#777" > </ ChevronRight > }
29
+ </ button >
30
+ ) }
31
+ { row . original . name }
32
+ </ div >
33
+ )
34
+ }
14
35
} ,
15
36
{
16
- accessorKey : "bytes_up " ,
17
- header : getHeader ( "Upload (MB)" , false ) ,
37
+ accessorKey : "identifier " ,
38
+ header : "Message identifier" ,
18
39
cell : ( { row } ) => {
19
40
if ( row . original . identifier < 0 ) { return }
20
- return < span > { ( row . original . bytes_up / 1024 ** 2 ) . toFixed ( 3 ) } </ span >
41
+ return < span > { row . original . identifier } </ span >
42
+ } ,
43
+ } ,
44
+ {
45
+ accessorKey : "handler" ,
46
+ header : "Handler" ,
47
+ } ,
48
+ {
49
+ accessorKey : "bytes_up" ,
50
+ header : getHeader ( "Upload" , false ) ,
51
+ cell : ( { row } ) => {
52
+ return < span > { formatBytes ( row . original . bytes_up ) } </ span >
21
53
} ,
22
54
} ,
23
55
{
24
56
accessorKey : "bytes_down" ,
25
- header : getHeader ( "Download (MB) " , false ) ,
57
+ header : getHeader ( "Download" , false ) ,
26
58
cell : ( { row } ) => {
27
- if ( row . original . identifier < 0 ) { return }
28
- return < span > { ( row . original . bytes_down / 1024 ** 2 ) . toFixed ( 3 ) } </ span >
59
+ return < span > { formatBytes ( row . original . bytes_down ) } </ span >
29
60
} ,
30
61
} ,
31
62
{
32
63
accessorKey : "num_up" ,
33
64
header : getHeader ( "# Msgs sent" , false ) ,
34
65
cell : ( { row } ) => {
35
- if ( row . original . identifier < 0 ) { return }
66
+ // if (row.original.identifier < 0) { return }
36
67
return < span > { row . original . num_up } </ span >
37
68
} ,
38
69
} ,
39
70
{
40
71
accessorKey : "num_down" ,
41
72
header : getHeader ( "# Msgs received" , false ) ,
42
73
cell : ( { row } ) => {
43
- if ( row . original . identifier < 0 ) { return }
74
+ // if (row.original.identifier < 0) { return }
44
75
return < span > { row . original . num_down } </ span >
45
76
} ,
46
77
} ,
@@ -57,44 +88,31 @@ export default function Details() {
57
88
for ( var overlayStats of response ) {
58
89
for ( const [ communityName , communityStats ] of Object . entries ( overlayStats ) ) {
59
90
if ( Object . entries ( communityStats ) . length === 0 ) { break }
91
+ let messageStats = [ ]
92
+ for ( const [ msgName , msgStats ] of Object . entries ( communityStats ) ) {
93
+ let [ _ , handler ] = msgName . split ( ":" , 2 ) ;
94
+ msgStats . handler = handler ;
95
+ messageStats . push ( msgStats ) ;
96
+ }
97
+ messageStats . sort ( ( stat1 , stat2 ) => stat1 . identifier - stat2 . identifier ) ;
60
98
stats . push ( {
61
99
name : communityName ,
62
100
identifier : - 1 ,
63
- num_up : 0 ,
64
- num_down : 0 ,
65
- bytes_up : 0 ,
66
- bytes_down : 0 ,
101
+ num_up : messageStats . reduce ( ( n , stat ) => n + stat . num_up , 0 ) ,
102
+ num_down : messageStats . reduce ( ( n , stat ) => n + stat . num_down , 0 ) ,
103
+ bytes_up : messageStats . reduce ( ( n , stat ) => n + stat . bytes_up , 0 ) ,
104
+ bytes_down : messageStats . reduce ( ( n , stat ) => n + stat . bytes_down , 0 ) ,
67
105
first_measured_up : 0 ,
68
106
first_measured_down : 0 ,
69
107
last_measured_up : 0 ,
70
108
last_measured_down : 0 ,
109
+ subRows : messageStats
71
110
} ) ;
72
- for ( const [ msgName , msgStats ] of Object . entries ( communityStats ) ) {
73
- msgStats . name = msgName ;
74
- stats . push ( msgStats ) ;
75
- }
76
111
}
77
112
}
78
113
setStatistics ( stats ) ;
79
114
}
80
115
} , 5000 , true ) ;
81
116
82
- if ( statistics . length === 0 ) {
83
- return (
84
- < div className = "w-3/4 px-4" >
85
- < div className = "whitespace-pre-wrap" >
86
- < br />
87
- The details are not available because the statistics measurement is not enabled.
88
- To enable the statistics measurement, go to:
89
- < br /> < br />
90
- Settings -> Debugging -> Network (IPv8) Statistics
91
- < br /> < br />
92
- After enabling the checkbox and saving the settings, restart Tribler.
93
- Then the details will be available here.
94
- </ div >
95
- </ div >
96
- )
97
- }
98
-
99
- return < SimpleTable data = { statistics } columns = { statisticColumns } />
117
+ return < SimpleTable data = { statistics } columns = { statisticColumns } expandable = { true } initialState = { { expanded : true } } />
100
118
}
0 commit comments