@@ -3,6 +3,7 @@ import { Line } from 'react-chartjs-2';
3
3
import { CircularProgressbar , buildStyles } from 'react-circular-progressbar' ;
4
4
import 'react-circular-progressbar/dist/styles.css' ;
5
5
import { io } from 'socket.io-client' ;
6
+ import { Cpu , MemoryStick , HardDrive , Wifi , Activity , Monitor , Clock } from 'lucide-react' ;
6
7
import ProcessChatbot from '../components/ProcessChatbot' ;
7
8
import {
8
9
Chart as ChartJS ,
@@ -21,9 +22,11 @@ const Dashboard = () => {
21
22
const [ systemStats , setSystemStats ] = useState ( {
22
23
cpu : 0 ,
23
24
memory : { total : 1 , used : 0 , free : 0 } ,
24
- network : { rx_sec : 0 , tx_sec : 0 } ,
25
- disk : { size : 1 , used : 0 , free : 0 } ,
25
+ network : { rx_sec : 0 , tx_sec : 0 , total_rx : 0 , total_tx : 0 } ,
26
+ disk : { size : 1 , used : 0 } ,
26
27
processes : [ ] ,
28
+ uptime : 0 ,
29
+ gpu : null , // New GPU stats
27
30
} ) ;
28
31
29
32
const [ chartData , setChartData ] = useState ( {
@@ -55,13 +58,16 @@ const Dashboard = () => {
55
58
network : {
56
59
rx_sec : data . network ?. rx_sec ?? 0 ,
57
60
tx_sec : data . network ?. tx_sec ?? 0 ,
61
+ total_rx : data . network ?. total_rx ?? 0 ,
62
+ total_tx : data . network ?. total_tx ?? 0 ,
58
63
} ,
59
64
disk : {
60
65
size : data . disk ?. size ?? 1 ,
61
66
used : data . disk ?. used ?? 0 ,
62
- free : data . disk ?. free ?? 0 ,
63
67
} ,
64
68
processes : data . processes ?. list ?? [ ] ,
69
+ uptime : data . uptime ?? 0 ,
70
+ gpu : data . gpu ?? null , // GPU stats
65
71
} ) ;
66
72
67
73
setChartData ( ( prev ) => ( {
@@ -86,76 +92,89 @@ const Dashboard = () => {
86
92
return ( used / total ) * 100 ;
87
93
} ;
88
94
95
+ const formatUptime = ( seconds : number ) => {
96
+ const hours = Math . floor ( seconds / 3600 ) ;
97
+ const minutes = Math . floor ( ( seconds % 3600 ) / 60 ) ;
98
+ return `${ hours } h ${ minutes } m` ;
99
+ } ;
100
+
89
101
return (
90
- < div className = "relative min-h-screen" >
91
- { /* Animated Text Section */ }
92
- < div className = "text-center py-6 animate-fade-in" >
93
- < h1 className = "text-3xl font-bold text-gray-300 animate-slide-in" >
94
- Welcome to the OS Process Analyzer
95
- </ h1 >
96
- < p className = "text-lg text-gray-400 mt-2 animate-fade-in" >
97
- Monitor your system's performance in real-time with AI-driven insights.
102
+ < div className = "relative min-h-screen bg-gray-900 text-gray-300" >
103
+ { /* Header Section */ }
104
+ < div className = "text-center py-6" >
105
+ < h1 className = "text-4xl font-bold text-blue-400" > System Performance Dashboard</ h1 >
106
+ < p className = "text-lg text-gray-400 mt-2" >
107
+ Real-time insights into your system's performance and resource usage.
98
108
</ p >
99
109
</ div >
100
110
101
- < div className = "space-y-6 animate-fade-in pr-[400px]" >
102
- { /* Gauges Section */ }
103
- < div className = "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6" >
104
- { /* CPU Usage Card */ }
105
- < div className = "relative p-6 rounded-lg shadow-lg bg-gray-800 hover:scale-105 hover:shadow-xl transition-transform duration-300" >
106
- < h3 className = "text-lg font-semibold mb-4 text-gray-300 " > CPU Usage</ h3 >
107
- < CircularProgressbar
108
- value = { systemStats . cpu }
109
- text = { `${ systemStats . cpu . toFixed ( 1 ) } %` }
110
- styles = { buildStyles ( {
111
- textColor : '#FFFFFF' ,
112
- pathColor : '#64FFDA' ,
113
- trailColor : 'rgba(100, 255, 218, 0.1 )' ,
114
- } ) }
115
- />
116
- </ div >
111
+ { /* Metrics Section */ }
112
+ < div className = "grid grid-cols-1 md:grid-cols-4 gap-6 px-6" >
113
+ { /* CPU Usage */ }
114
+ < div className = "flex flex-col items-center bg-gray-800 p-4 rounded-lg shadow-lg hover:scale-105 transition-transform duration-300" >
115
+ < Cpu className = "text-blue-400 w-8 h-8 mb-2" / >
116
+ < h3 className = "text-lg font-semibold text-white " > CPU Usage</ h3 >
117
+ < CircularProgressbar
118
+ value = { systemStats . cpu }
119
+ text = { `${ systemStats . cpu . toFixed ( 1 ) } %` }
120
+ styles = { buildStyles ( {
121
+ textColor : '#FFFFFF' ,
122
+ pathColor : '#64FFDA' ,
123
+ trailColor : 'rgba(100, 255, 218, 0.2 )' ,
124
+ } ) }
125
+ />
126
+ </ div >
117
127
118
- { /* Memory Usage Card */ }
119
- < div className = "relative p-6 rounded-lg shadow-lg bg-gray-800 hover:scale-105 hover:shadow-xl transition-transform duration-300" >
120
- < h3 className = "text-lg font-semibold mb-4 text-gray-300" > Memory Usage</ h3 >
121
- < CircularProgressbar
122
- value = { getPercentage ( systemStats . memory . used , systemStats . memory . total ) }
123
- text = { `${ getPercentage ( systemStats . memory . used , systemStats . memory . total ) . toFixed ( 1 ) } %` }
124
- styles = { buildStyles ( {
125
- textColor : '#FFFFFF' ,
126
- pathColor : '#FF6384' ,
127
- trailColor : 'rgba(255, 99, 132, 0.2)' ,
128
- } ) }
129
- />
130
- </ div >
128
+ { /* Memory Usage */ }
129
+ < div className = "flex flex-col items-center bg-gray-800 p-4 rounded-lg shadow-lg hover:scale-105 transition-transform duration-300" >
130
+ < MemoryStick className = "text-pink-400 w-8 h-8 mb-2" />
131
+ < h3 className = "text-lg font-semibold text-white" > Memory Usage</ h3 >
132
+ < CircularProgressbar
133
+ value = { getPercentage ( systemStats . memory . used , systemStats . memory . total ) }
134
+ text = { `${ getPercentage ( systemStats . memory . used , systemStats . memory . total ) . toFixed ( 1 ) } %` }
135
+ styles = { buildStyles ( {
136
+ textColor : '#FFFFFF' ,
137
+ pathColor : '#FF6384' ,
138
+ trailColor : 'rgba(255, 99, 132, 0.2)' ,
139
+ } ) }
140
+ />
141
+ </ div >
131
142
132
- { /* Network Usage Card */ }
133
- < div className = "relative p-6 rounded-lg shadow-lg bg-gray-800 hover:scale-105 hover:shadow-xl transition-transform duration-300" >
134
- < h3 className = "text-lg font-semibold mb-4 text-gray-300" > Network Usage</ h3 >
135
- < div className = "text-gray-300" >
136
- < p > ↓ { ( ( systemStats . network . rx_sec || 0 ) / 1024 / 1024 ) . toFixed ( 2 ) } MB/s</ p >
137
- < p > ↑ { ( ( systemStats . network . tx_sec || 0 ) / 1024 / 1024 ) . toFixed ( 2 ) } MB/s</ p >
138
- </ div >
139
- </ div >
143
+ { /* Network Usage */ }
144
+ < div className = "flex flex-col items-center bg-gray-800 p-4 rounded-lg shadow-lg hover:scale-105 transition-transform duration-300" >
145
+ < Wifi className = "text-green-400 w-8 h-8 mb-2" />
146
+ < h3 className = "text-lg font-semibold text-white" > Network Usage</ h3 >
147
+ < p className = "text-sm text-gray-200" >
148
+ ↓ { ( ( systemStats . network . rx_sec || 0 ) / 1024 / 1024 ) . toFixed ( 2 ) } MB/s
149
+ </ p >
150
+ < p className = "text-sm text-gray-200" >
151
+ ↑ { ( ( systemStats . network . tx_sec || 0 ) / 1024 / 1024 ) . toFixed ( 2 ) } MB/s
152
+ </ p >
153
+ </ div >
140
154
141
- { /* Disk Usage Card */ }
142
- < div className = "relative p-6 rounded-lg shadow-lg bg-gray-800 hover:scale-105 hover:shadow-xl transition-transform duration-300" >
143
- < h3 className = "text-lg font-semibold mb-4 text-gray-300" > Disk Usage</ h3 >
144
- < CircularProgressbar
145
- value = { getPercentage ( systemStats . disk . used , systemStats . disk . size ) }
146
- text = { `${ getPercentage ( systemStats . disk . used , systemStats . disk . size ) . toFixed ( 1 ) } %` }
147
- styles = { buildStyles ( {
148
- textColor : '#FFFFFF' ,
149
- pathColor : '#36A2EB' ,
150
- trailColor : 'rgba(54, 162, 235, 0.2)' ,
151
- } ) }
152
- />
153
- </ div >
155
+
156
+
157
+ { /* Disk Usage */ }
158
+ < div className = "flex flex-col items-center bg-gray-800 p-4 rounded-lg shadow-lg hover:scale-105 transition-transform duration-300" >
159
+ < HardDrive className = "text-purple-400 w-8 h-8 mb-2" />
160
+ < h3 className = "text-lg font-semibold text-white" > Disk Usage</ h3 >
161
+ < CircularProgressbar
162
+ value = { getPercentage ( systemStats . disk . used , systemStats . disk . size ) }
163
+ text = { `${ getPercentage ( systemStats . disk . used , systemStats . disk . size ) . toFixed ( 1 ) } %` }
164
+ styles = { buildStyles ( {
165
+ textColor : '#FFFFFF' ,
166
+ pathColor : '#36A2EB' ,
167
+ trailColor : 'rgba(54, 162, 235, 0.2)' ,
168
+ } ) }
169
+ />
154
170
</ div >
171
+ </ div >
155
172
173
+ { /* Graphs Section */ }
174
+ < div className = "grid grid-cols-1 lg:grid-cols-2 gap-6 px-6 mt-8" >
156
175
{ /* CPU Usage Chart */ }
157
- < div className = "bg-navy -800 p-6 rounded-lg shadow-lg" >
158
- < h3 className = "text-lg font-semibold mb-4 text-blue-accent-500 " > CPU Usage Over Time</ h3 >
176
+ < div className = "bg-gray -800 p-6 rounded-lg shadow-lg" >
177
+ < h3 className = "text-lg font-semibold mb-4 text-blue-400 " > CPU Usage Over Time</ h3 >
159
178
< div className = "h-64" >
160
179
< Line
161
180
data = { chartData }
@@ -193,8 +212,8 @@ const Dashboard = () => {
193
212
</ div >
194
213
195
214
{ /* Memory Usage Chart */ }
196
- < div className = "bg-navy -800 p-6 rounded-lg shadow-lg" >
197
- < h3 className = "text-lg font-semibold mb-4 text-blue-accent-500 " > Memory Usage Over Time</ h3 >
215
+ < div className = "bg-gray -800 p-6 rounded-lg shadow-lg" >
216
+ < h3 className = "text-lg font-semibold mb-4 text-pink-400 " > Memory Usage Over Time</ h3 >
198
217
< div className = "h-64" >
199
218
< Line
200
219
data = { {
0 commit comments