Files
Kundenverwaltung/stats.php
T
adminandClaude Opus 5 e2124220e5 Initialer Commit: Kundenverwaltung (PHP/Smarty)
Bestehende Codebasis als Ausgangsstand aufgenommen.

- .gitignore: Kundendaten (uploads_*), Smarty-Compile-Cache
  (templates_c), Laufzeit-Temp und Datenbank-Dumps ausgeschlossen;
  Verzeichnisstruktur ueber .gitkeep erhalten
- .gitattributes: Zeilenenden normalisiert (LF im Repo),
  Binaerformate markiert
- db-backup.php: MySQL-Zugangsdaten kommen jetzt wie im Rest der
  Anwendung aus der externen Konfiguration statt hartkodiert aus der
  Datei; Passwort wird ueber eine temporaere Optionsdatei statt per
  Kommandozeile uebergeben, Fehler von mysqldump/gzip werden gemeldet,
  Aufraeumen aelterer Backups berechnet Jahr und Monat konsistent

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 16:41:18 +02:00

304 lines
13 KiB
PHP

<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Standard inclusions
include("incs/pChart/pData.class");
include("incs/pChart/pChart.class");
$dbconn = mysqli_connect("localhost","m0","ENTFERNT");
mysqli_select_db($dbconn,"systemstats");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(percent) AS value FROM hdd WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
$DataSet = new pData;
// Compute the points
$DataSet->AddSerie("Serie1");
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"],"Serie1",$res["datetime"]);
}
$DataSet->SetSerieName("SysHDD (RAID)[MAX]","Serie1");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(percent) AS value FROM hdd1 WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Compute the points
$DataSet->AddSerie("Serie2");
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"],"Serie2",$res["datetime"]);
}
$DataSet->SetSerieName("dumpHDD (sdc1)[MAX]","Serie2");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(percent) AS value FROM hdd2 WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Compute the points
$DataSet->AddSerie("Serie3");
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"],"Serie3",$res["datetime"]);
}
$DataSet->SetSerieName("camHDD (sdc2)[MAX]","Serie3");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(percent) AS value FROM hdd3 WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Compute the points
$DataSet->AddSerie("Serie4");
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"],"Serie4",$res["datetime"]);
}
$DataSet->SetSerieName("backUpHDD (sdc3)[MAX]","Serie4");
// Initialise the graph
$Test = new pChart(1200,400);
$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);
// Graph area setup
$Test->setFontProperties("incs/font/pf_arma_five.ttf",10);
$Test->setGraphArea(60,40,1050,350);
$Test->drawGraphArea(200,200,200,FALSE);
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,200,200,200,TRUE,45,2);
$Test->drawGraphAreaGradient(40,40,40,-50);
$Test->drawGrid(4,TRUE,230,230,230,10);
// Draw the line chart
$Test->setShadowProperties(3,3,0,0,0,30,4);
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->clearShadow();
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,0,-1,-1,-1,TRUE);
// Write the title
$Test->setFontProperties("incs/font/MankSans.ttf",18);
$Test->setShadowProperties(1,1,0,0,0);
$Test->drawTitle(0,0,"Festplattennutzung [%]",255,255,255,1200,30,TRUE);
$Test->clearShadow();
// Draw the legend
$Test->setFontProperties("incs/font/tahoma.ttf",10);
$Test->drawLegend(1050,50,$DataSet->GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);
$Test->Render("hdd.png");
$DataSet = new pData;
// Compute the points
$DataSet->AddSerie("Serie1");
$DataSet->AddSerie("Serie2");
$DataSet->AddSerie("Serie3");
$DataSet->AddSerie("Serie4");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(value) AS value FROM memory WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"]/10,"Serie1",$res["datetime"]);
}
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(value) AS value FROM swap WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
// Compute the points
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"]/10,"Serie2",$res["datetime"]);
}
$DataSet->SetSerieName("MAX Memory [%]","Serie1");
$DataSet->SetSerieName("MAX Swap [%]","Serie2");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, AVG(value) AS value FROM memory WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"]/10,"Serie3",$res["datetime"]);
}
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, AVG(value) AS value FROM swap WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
// Compute the points
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"]/10,"Serie4",$res["datetime"]);
}
$DataSet->SetSerieName("AVG Memory [%]","Serie3");
$DataSet->SetSerieName("AVG Swap [%]","Serie4");
// Initialise the graph
$Test = new pChart(1200,400);
$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);
// Graph area setup
$Test->setFontProperties("incs/font/pf_arma_five.ttf",10);
$Test->setGraphArea(60,40,1050,350);
$Test->drawGraphArea(200,200,200,FALSE);
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,200,200,200,TRUE,45,2);
$Test->drawGraphAreaGradient(40,40,40,-50);
$Test->drawGrid(4,TRUE,230,230,230,10);
// Draw the line chart
$Test->setShadowProperties(3,3,0,0,0,30,4);
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->clearShadow();
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,0,-1,-1,-1,TRUE);
// Write the title
$Test->setFontProperties("incs/font/MankSans.ttf",18);
$Test->setShadowProperties(1,1,0,0,0);
$Test->drawTitle(0,0,"RAM Nutzung [%]",255,255,255,1200,30,TRUE);
$Test->clearShadow();
// Draw the legend
$Test->setFontProperties("incs/font/tahoma.ttf",10);
$Test->drawLegend(1050,50,$DataSet->GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);
$Test->Render("memory.png");
$DataSet = new pData;
// Compute the points
$DataSet->AddSerie("Serie1");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(value) AS value FROM sysload WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"]/4,"Serie1",$res["datetime"]);
}
$DataSet->SetSerieName("MAX Systemlast [%]","Serie1");
$DataSet->AddSerie("Serie2");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, AVG(value) AS value FROM sysload WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"]/4,"Serie2",$res["datetime"]);
}
$DataSet->SetSerieName("AVG Systemlast [%]","Serie2");
// Initialise the graph
$Test = new pChart(1200,400);
$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);
// Graph area setup
$Test->setFontProperties("incs/font/pf_arma_five.ttf",10);
$Test->setGraphArea(60,40,1050,350);
$Test->drawGraphArea(200,200,200,FALSE);
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,200,200,200,TRUE,45,2);
$Test->drawGraphAreaGradient(40,40,40,-50);
$Test->drawGrid(4,TRUE,230,230,230,10);
// Draw the line chart
$Test->setShadowProperties(3,3,0,0,0,30,4);
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->clearShadow();
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,0,-1,-1,-1,TRUE);
// Write the title
$Test->setFontProperties("incs/font/MankSans.ttf",18);
$Test->setShadowProperties(1,1,0,0,0);
$Test->drawTitle(0,0,"Systemauslastung [%]",255,255,255,1200,30,TRUE);
$Test->clearShadow();
// Draw the legend
$Test->setFontProperties("incs/font/tahoma.ttf",10);
$Test->drawLegend(1050,50,$DataSet->GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);
$Test->Render("load.png");
$DataSet = new pData;
$ii = mysqli_query($dbconn, "SELECT name FROM temps GROUP BY name") or die(mysqli_error($dbconn));
while($i = mysqli_fetch_assoc($ii))
{
$DataSet->AddSerie($i["name"]);
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(value) AS value FROM tempvals JOIN temps ON temps.id=tempid WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) AND name = '".$i["name"]."' GROUP BY DATE_FORMAT(datetime, '%d.%m.%y'), name ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"],$i["name"],$res["datetime"]);
}
}
// Initialise the graph
$Test = new pChart(1200,400);
$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);
// Graph area setup
$Test->setFontProperties("incs/font/pf_arma_five.ttf",10);
$Test->setGraphArea(60,40,1050,350);
$Test->drawGraphArea(200,200,200,FALSE);
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,200,200,200,TRUE,45,2);
$Test->drawGraphAreaGradient(40,40,40,-50);
$Test->drawGrid(4,TRUE,230,230,230,10);
// Draw the line chart
$Test->setShadowProperties(3,3,0,0,0,30,4);
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->clearShadow();
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,0,-1,-1,-1,TRUE);
// Write the title
$Test->setFontProperties("incs/font/MankSans.ttf",18);
$Test->setShadowProperties(1,1,0,0,0);
$Test->drawTitle(0,0,"MAX Temp [°C]",255,255,255,1200,30,TRUE);
$Test->clearShadow();
// Draw the legend
$Test->setFontProperties("incs/font/tahoma.ttf",10);
$Test->drawLegend(1050,50,$DataSet->GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);
$Test->Render("temp.png");
$DataSet = new pData;
$ii = mysqli_query($dbconn, "SELECT name FROM fans GROUP BY name") or die(mysqli_error($dbconn));
while($i = mysqli_fetch_assoc($ii))
{
$DataSet->AddSerie($i["name"]);
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(value) AS value FROM fanvals JOIN fans ON fans.id=fanid WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) AND name = '".$i["name"]."' GROUP BY DATE_FORMAT(datetime, '%d.%m.%y'), name ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"],$i["name"],$res["datetime"]);
}
}
// Initialise the graph
$Test = new pChart(1200,400);
$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);
// Graph area setup
$Test->setFontProperties("incs/font/pf_arma_five.ttf",10);
$Test->setGraphArea(60,40,1050,350);
$Test->drawGraphArea(200,200,200,FALSE);
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,200,200,200,TRUE,45,2);
$Test->drawGraphAreaGradient(40,40,40,-50);
$Test->drawGrid(4,TRUE,230,230,230,10);
// Draw the line chart
$Test->setShadowProperties(3,3,0,0,0,30,4);
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->clearShadow();
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,0,-1,-1,-1,TRUE);
// Write the title
$Test->setFontProperties("incs/font/MankSans.ttf",18);
$Test->setShadowProperties(1,1,0,0,0);
$Test->drawTitle(0,0,"MAX Lüftergeschw. [%]",255,255,255,1200,30,TRUE);
$Test->clearShadow();
// Draw the legend
$Test->setFontProperties("incs/font/tahoma.ttf",10);
$Test->drawLegend(1050,50,$DataSet->GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);
$Test->Render("fan.png");
$ii = mysqli_query($dbconn, "SELECT value FROM miscstats WHERE statname='System uptime in sec'") or die(mysqli_error($dbconn));
$i = mysqli_fetch_assoc($ii);
$upsec = $i["value"];
$upday = floor($upsec/86400);
$upsec = $upsec - $upday * 86400;
$uphour = floor($upsec/3600);
$upsec = $upsec - $uphour * 3600;
$upmin = floor($upsec/60);
$upsec = $upsec - $upmin * 60;
$ii = mysqli_query($dbconn, "SELECT value FROM miscstats WHERE statname='System idletime of uptime in sec'") or die(mysqli_error($dbconn));
$i2 = mysqli_fetch_assoc($ii);
$bored = round(100* ($i2["value"]/($i["value"]*4)),1);
echo "MaX ist seit $upday Tagen $uphour h $upmin Min und $upsec s wach.<br />";
echo "Ihm war $bored% der Zeit langweilig.<br />";
echo "<img src='hdd.png' />";
echo "<img src='memory.png' />";
echo "<img src='load.png' />";
echo "<img src='temp.png' />";
echo "<img src='fan.png' />";
?>