## System Informationen Feature

Zur Implementierung der Präsentationsschicht wird auch
in dem "System Informationen" Feature der CustomPainter verwendet.
Die Implementierung der Graphen basiert hierbei auf dem _real_time_chart_ Paket,
welches auf GitHub verfügbar ist [@mounirTajaouartReal_time_chart2024].
Das Paket wurde geforkt und für das Projekt leicht angepasst. Es wurde
die Option hinzugefügt, dass der Maximalwert der Y-Achse angegeben werden
kann, um die Skalierung des Graphen zu steuern. Dies ist notwendig, da vorher
nicht garantiert werden konnte, dass der Graph immer den gesamten Wertebereich
richtig darstellt. Zusätzlich wurde das GridPaper Widget hinter den Graphen
eingefügt, um mithilfe der Gitterlinien die Werte auf dem Graphen besser
ablesbar zu machen (siehe Abbildung \ref{systemInformation}).

\begin{figure}[H]
\caption{Das System Information Feature}
\label{systemInformation}
\centering
{\shadowimage[width=7cm]{./assets/screenshots/systemInfo.png}}
\end{figure}

In der Geschäftslogikschicht wurde eine Hilfsfunktion _getCpuUsagePercentage_
implementiert, welche die CPU-Auslastung des Linux-Systems als Stream
aus doubles zurückgibt. Zur Auslesung der CPU-Auslastung wird der
Linux Befehl `vmstat 1 2|tail -1|awk '{print $15}'` verwendet und der
Rückgabewert wird von 100 subtrahiert. Vmstat ist ein in Linux integriertes
Tool, welches Informationen über die durchschnittliche Prozessornutzung seit dem Hochfahren liefern kann. Mit einem
Trick wird die Ausgabe von vmstat zweimal mit einem Abstand von einer Sekunde
ausgelesen und dadurch kann die aktuelle CPU-Auslastung daraus ermittelt werden,
weil der Wert aus Spalte 15 dann die aktuelle CPU-Auslastung nach einer Sekunde
im Vergleich zur letzten Sekunde enthält. Die Lösung wurde auf der Website AskUbuntu
gefunden [@paulAnswerGettingCpu2013], wo sie jedoch nicht erklärt wurde.

Für die Speicherauslesung wurde der Service _MemoryService_ implementiert,
welcher die Speicherauslastung des Systems als Stream aus doubles zurückgibt.
Zur Auslesung wir der Befehl `cat /proc/meminfo` verwendet um _/proc/meminfo_
auszulesen. Die Zusammenstellung des genauen Werts für den freien Speicher
aus den verschiedenen Werten in _/proc/meminfo_ wurde aus einem GitHub
Issue des _Screenfetch_ Projekts entnommen [@BugsCPURAM2016]. Die Formel
zur Berechnung des freien Speichers lautet:

> usedmem = MemTotal + Shmem - MemFree - Buffers - Cached - SReclaimable

<!-- \lstinputlisting[language=Java, caption=Implementierung des Memory Service, captionpos=t]
{code/flutter_elinux/lib/features/system_resources/business/service/memory_service.dart} -->

<!-- \begin{figure}[H]
\caption{Example caption}
\centering
\begin{minipage}{7cm}
\dirtree{%
.1 system\char`\_resources/.
    .2 business/.
    .3 service/.
    .4 memory\char`\_service.dart.
.3 utils/.
.4 get\char`\_cpu\char`\_usage\char`\_percentage.dart.
    .2 presentation/.
    .3 system\char`\_resources\char`\_screen.dart.
}
\end{minipage}
\end{figure} -->
