33namespace App \Filament \Admin \Resources \NodeResource \Widgets ;
44
55use App \Models \Node ;
6- use Carbon \Carbon ;
76use Filament \Support \RawJs ;
87use Filament \Widgets \ChartWidget ;
98use Illuminate \Support \Number ;
@@ -16,27 +15,44 @@ class NodeMemoryChart extends ChartWidget
1615
1716 public Node $ node ;
1817
18+ /**
19+ * @var array<int, array{memory: string, timestamp: string}>
20+ */
21+ protected array $ memoryHistory = [];
22+
23+ protected int $ totalMemory = 0 ;
24+
1925 protected function getData (): array
2026 {
21- $ memUsed = collect (cache ()->get ("nodes. {$ this ->node ->id }.memory_used " ))->slice (-10 )
22- ->map (fn ($ value , $ key ) => [
23- 'memory ' => round (config ('panel.use_binary_prefix ' ) ? $ value / 1024 / 1024 / 1024 : $ value / 1000 / 1000 / 1000 , 2 ),
24- 'timestamp ' => Carbon::createFromTimestamp ($ key , auth ()->user ()->timezone ?? 'UTC ' )->format ('H:i:s ' ),
25- ])
26- ->all ();
27+ $ sessionKey = "node_stats. {$ this ->node ->id }" ;
28+
29+ $ data = $ this ->node ->statistics ();
30+
31+ $ this ->totalMemory = session ("{$ sessionKey }.total_memory " , $ data ['memory_total ' ]);
32+
33+ $ this ->memoryHistory = session ("{$ sessionKey }.memory_history " , []);
34+ $ this ->memoryHistory [] = [
35+ 'memory ' => round (config ('panel.use_binary_prefix ' )
36+ ? $ data ['memory_used ' ] / 1024 / 1024 / 1024
37+ : $ data ['memory_used ' ] / 1000 / 1000 / 1000 , 2 ),
38+ 'timestamp ' => now (auth ()->user ()->timezone ?? 'UTC ' )->format ('H:i:s ' ),
39+ ];
40+
41+ $ this ->memoryHistory = array_slice ($ this ->memoryHistory , -60 );
42+ session ()->put ("{$ sessionKey }.memory_history " , $ this ->memoryHistory );
2743
2844 return [
2945 'datasets ' => [
3046 [
31- 'data ' => array_column ($ memUsed , 'memory ' ),
47+ 'data ' => array_column ($ this -> memoryHistory , 'memory ' ),
3248 'backgroundColor ' => [
3349 'rgba(96, 165, 250, 0.3) ' ,
3450 ],
3551 'tension ' => '0.3 ' ,
3652 'fill ' => true ,
3753 ],
3854 ],
39- 'labels ' => array_column ($ memUsed , 'timestamp ' ),
55+ 'labels ' => array_column ($ this -> memoryHistory , 'timestamp ' ),
4056 'locale ' => auth ()->user ()->language ?? 'en ' ,
4157 ];
4258 }
@@ -66,16 +82,15 @@ protected function getOptions(): RawJs
6682
6783 public function getHeading (): string
6884 {
69- $ latestMemoryUsed = collect (cache ()->get ("nodes. {$ this ->node ->id }.memory_used " ))->last ();
70- $ totalMemory = collect (cache ()->get ("nodes. {$ this ->node ->id }.memory_total " ))->last ();
85+ $ latestMemoryUsed = array_slice (end ($ this ->memoryHistory ), -60 );
7186
7287 $ used = config ('panel.use_binary_prefix ' )
73- ? Number::format ($ latestMemoryUsed / 1024 / 1024 / 1024 , maxPrecision: 2 , locale: auth ()->user ()->language ) .' GiB '
74- : Number::format ($ latestMemoryUsed / 1000 / 1000 / 1000 , maxPrecision: 2 , locale: auth ()->user ()->language ) . ' GB ' ;
88+ ? Number::format ($ latestMemoryUsed[ ' memory ' ] , maxPrecision: 2 , locale: auth ()->user ()->language ) .' GiB '
89+ : Number::format ($ latestMemoryUsed[ ' memory ' ] , maxPrecision: 2 , locale: auth ()->user ()->language ) . ' GB ' ;
7590
7691 $ total = config ('panel.use_binary_prefix ' )
77- ? Number::format ($ totalMemory / 1024 / 1024 / 1024 , maxPrecision: 2 , locale: auth ()->user ()->language ) .' GiB '
78- : Number::format ($ totalMemory / 1000 / 1000 / 1000 , maxPrecision: 2 , locale: auth ()->user ()->language ) . ' GB ' ;
92+ ? Number::format ($ this -> totalMemory / 1024 / 1024 / 1024 , maxPrecision: 2 , locale: auth ()->user ()->language ) .' GiB '
93+ : Number::format ($ this -> totalMemory / 1000 / 1000 / 1000 , maxPrecision: 2 , locale: auth ()->user ()->language ) . ' GB ' ;
7994
8095 return trans ('admin/node.memory_chart ' , ['used ' => $ used , 'total ' => $ total ]);
8196 }
0 commit comments