* Mon May 12 2025 Brian Read <brianr@koozali.org> 11.0.0-1.sme

- Adding SM2 panel [SME: 13004]
- Upgrade to phpsysinfo 3.4.4
- Add code to delete inline styles and add css to make it look better.
- version saved / built uses the static version, which means no drops downs and choices.
This commit is contained in:
2025-05-14 16:14:01 +01:00
parent 80b1da5fa5
commit c8ce77259d
952 changed files with 51341 additions and 28699 deletions

View File

@@ -0,0 +1,134 @@
<?php
/**
* Docker plugin, which displays docker informations
*
* @category PHP
* @package PSI_Plugin_Docker
* @author Mieczyslaw Nalewaj <namiltd@users.sourceforge.net>
* @copyright 2014 phpSysInfo
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version
* @version Release: 1.0
* @link http://phpsysinfo.sourceforge.net
*/
class Docker extends PSI_Plugin
{
private $_lines;
public function __construct($enc)
{
parent::__construct(__CLASS__, $enc);
$this->_lines = array();
}
/**
* get docker information
*
* @return array docker in array with label
*/
private function getDocker()
{
$result = array();
$i = 0;
foreach ($this->_lines as $line) {
if ($i > 0) {
$buffer = preg_split("/\s\s+/", $line);
$result[$i]['Name'] = $buffer[0];
$result[$i]['CPUUsage'] = str_replace(',', '.', trim($buffer[1], '%'));
preg_match('/([\d\.]+)(B|KiB|MiB|GiB|TiB|PiB)\s+\/\s+([\d\.]+)(B|KiB|MiB|GiB|TiB|PiB)/', str_replace(',', '.', trim($buffer[2])), $tmpbuf);
switch ($tmpbuf[2]) {
case 'B':
$result[$i]['MemoryUsed'] = $tmpbuf[1];
break;
case 'KiB':
$result[$i]['MemoryUsed'] = 1024*$tmpbuf[1];
break;
case 'MiB':
$result[$i]['MemoryUsed'] = 1024*1024*$tmpbuf[1];
break;
case 'GiB':
$result[$i]['MemoryUsed'] = 1024*1024*1024*$tmpbuf[1];
break;
case 'TiB':
$result[$i]['MemoryUsed'] = 1024*1024*1024*1024*$tmpbuf[1];
break;
case 'PiB':
$result[$i]['MemoryUsed'] = 1024*1024*1024*1024*1025*$tmpbuf[1];
}
switch ($tmpbuf[4]) {
case 'B':
$result[$i]['MemoryLimit'] = $tmpbuf[3];
break;
case 'KiB':
$result[$i]['MemoryLimit'] = 1024*$tmpbuf[3];
break;
case 'MiB':
$result[$i]['MemoryLimit'] = 1024*1024*$tmpbuf[3];
break;
case 'GiB':
$result[$i]['MemoryLimit'] = 1024*1024*1024*$tmpbuf[3];
break;
case 'TiB':
$result[$i]['MemoryLimit'] = 1024*1024*1024*1024*$tmpbuf[3];
break;
case 'PiB':
$result[$i]['MemoryLimit'] = 1024*1024*1024*1024*1025*$tmpbuf[3];
}
$result[$i]['MemoryUsage'] = str_replace(',', '.', trim($buffer[3], '%'));
$result[$i]['NetIO'] = trim($buffer[4]);
$result[$i]['BlockIO'] = trim($buffer[5]);
$result[$i]['PIDs'] = trim($buffer[6]);
}
$i++;
}
return $result;
}
public function execute()
{
$this->_lines = array();
if ((PSI_OS != 'WINNT') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT'))) {
switch (strtolower(PSI_PLUGIN_DOCKER_ACCESS)) {
case 'command':
$lines = "";
if (CommonFunctions::executeProgram('docker', 'stats --no-stream --format \'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}\'', $lines) && !empty($lines))
$this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY);
break;
case 'data':
if (!defined('PSI_EMU_HOSTNAME') && CommonFunctions::rftsdata("docker.tmp", $lines) && !empty($lines))
$this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY);
break;
default:
$this->global_error->addConfigError("execute()", "[docker] ACCESS");
}
}
}
public function xml()
{
if (empty($this->_lines))
return $this->xml->getSimpleXmlElement();
$arrBuff = $this->getDocker();
if (sizeof($arrBuff) > 0) {
$docker = $this->xml->addChild("Docker");
foreach ($arrBuff as $arrValue) {
$item = $docker->addChild('Item');
$item->addAttribute('Name', $arrValue['Name']);
$item->addAttribute('CPUUsage', $arrValue['CPUUsage']);
$item->addAttribute('MemoryUsage', $arrValue['MemoryUsage']);
$item->addAttribute('MemoryUsed', Round($arrValue['MemoryUsed']));
$item->addAttribute('MemoryLimit', Round($arrValue['MemoryLimit']));
$item->addAttribute('NetIO', $arrValue['NetIO']);
$item->addAttribute('BlockIO', $arrValue['BlockIO']);
$item->addAttribute('PIDs', $arrValue['PIDs']);
}
}
return $this->xml->getSimpleXmlElement();
}
}

View File

@@ -0,0 +1,38 @@
<div class="col-lg-12" id="block_docker" style="display:none;">
<div class="card" id="panel_docker" style="display:none;">
<div class="card-header"><span class="lang_plugin_docker_001">Docker</span>
<span class="hostname_docker"></span>
<div id="reload_docker" class="reload" title="reload"></div>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="docker" class="table table-hover table-sm sortable">
<thead>
<tr>
<th id="docker_Name"><span class="lang_plugin_docker_101">Name</span></th>
<th><span class="lang_plugin_docker_102">CPU Usage</span></th>
<th><span class="lang_plugin_docker_103">Memory Usage</span></th>
<th class="rightCell sorttable_numeric"><span class="lang_plugin_docker_104">Memory Used</span></th>
<th class="rightCell sorttable_numeric"><span class="lang_plugin_docker_105">Memory Limit</span></th>
<th class="rightCell"><span class="lang_plugin_docker_106">Net I/O</span></th>
<th class="rightCell"><span class="lang_plugin_docker_107">Block I/O</span></th>
<th class="rightCell sorttable_numeric"><span class="lang_plugin_docker_108">PIDs</span></th>
</tr>
</thead>
<tbody id="docker-data">
<tr>
<th><span data-bind="Name"></span></th>
<td><span data-bind="CPUUsage"></span></td>
<td><span data-bind="MemoryUsage"></span></td>
<td class="rightCell"><span data-bind="MemoryUsed"></span></td>
<td class="rightCell"><span data-bind="MemoryLimit"></span></td>
<td class="rightCell"><span data-bind="NetIO"></span></td>
<td class="rightCell"><span data-bind="BlockIO"></span></td>
<td class="rightCell"><span data-bind="PIDs"></span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,155 @@
/***************************************************************************
* Copyright (C) 2008 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
//$Id: docker.js 661 2014-01-08 11:26:39 aolah76 $
/*global $, jQuery, buildBlock, datetime, plugin_translate, genlang, createBar */
"use strict";
var docker_show = false, docker_table;
/**
* insert content into table
* @param {jQuery} xml plugin-XML
*/
function docker_populate(xml) {
var hostname = "";
docker_table.fnClearTable();
hostname = $("Plugins Plugin_Docker", xml).attr('Hostname');
if (hostname !== undefined) {
$('span[class=Hostname_Docker]').html(hostname);
}
$("Plugins Plugin_Docker Docker Item", xml).each(function docker_getitem(id) {
var name = "", cpuu= 0, memu = 0, used = 0, limit = 0, netio = "", blockio = "", pids = 0;
name = $(this).attr("Name");
cpuu = parseInt($(this).attr("CPUUsage"), 10);
memu = parseInt($(this).attr("MemoryUsage"), 10);
used = parseInt($(this).attr("MemoryUsed"), 10);
limit = parseInt($(this).attr("MemoryLimit"), 10);
netio = $(this).attr("NetIO");
blockio = $(this).attr("BlockIO");
pids = parseInt($(this).attr("PIDs"), 10);
docker_table.fnAddData(["<span style=\"display:none;\">" + name + "</span>" + name, "<span style=\"display:none;\">" + cpuu + "</span>" + createBar(cpuu), "<span style=\"display:none;\">" + memu + "</span>" + createBar(memu), "<span style=\"display:none;\">" + used + "</span>" + formatBytes(used, xml), "<span style=\"display:none;\">" + limit + "</span>" + formatBytes(limit, xml), "<span style=\"display:none;\">" + netio + "</span>" + netio, "<span style=\"display:none;\">" + blockio + "</span>" + blockio, "<span style=\"display:none;\">" + pids + "</span>" + pids]);
docker_show = true;
});
}
function docker_buildTable() {
var html = "";
html += "<div style=\"overflow-x:auto;\">\n";
html += " <table id=\"Plugin_DockerTable\" class=\"stripeMe\" style=\"border-collapse:collapse;\">\n";
html += " <thead>\n";
html += " <tr>\n";
html += " <th>" + genlang(101, "docker") + "</th>\n";
html += " <th>" + genlang(102, "docker") + "</th>\n";
html += " <th>" + genlang(103, "docker") + "</th>\n";
html += " <th class=\"right\">" + genlang(104, "docker") + "</th>\n";
html += " <th class=\"right\">" + genlang(105, "docker") + "</th>\n";
html += " <th class=\"right\">" + genlang(106, "docker") + "</th>\n";
html += " <th class=\"right\">" + genlang(107, "docker") + "</th>\n";
html += " <th class=\"right\">" + genlang(108, "docker") + "</th>\n";
html += " </tr>\n";
html += " </thead>\n";
html += " <tbody id=\"Plugin_DockerTable-tbody\">\n";
html += " </tbody>\n";
html += " </table>\n";
html += "</div>\n";
$("#Plugin_Docker").append(html);
docker_table = $("#Plugin_DockerTable").dataTable({
"bPaginate": false,
"bLengthChange": false,
"bFilter": false,
"bSort": true,
"bInfo": false,
"bProcessing": true,
"bAutoWidth": false,
"bStateSave": true,
"aoColumns": [{
"sType": 'span-string'
}, {
"sType": 'span-number'
}, {
"sType": 'span-number'
}, {
"sType": 'span-number',
"sClass": "right"
}, {
"sType": 'span-number',
"sClass": "right"
}, {
"sType": 'span-string',
"sClass": "right"
}, {
"sType": 'span-string',
"sClass": "right"
}, {
"sType": 'span-number',
"sClass": "right"
}]
});
}
/**
* load the xml via ajax
*/
function docker_request() {
$("#Reload_DockerTable").attr("title", "reload");
$.ajax({
url: "xml.php?plugin=docker",
dataType: "xml",
error: function docker_error() {
$.jGrowl("Error loading XML document for Plugin docker!");
},
success: function docker_buildblock(xml) {
populateErrors(xml);
docker_populate(xml);
if (docker_show) {
plugin_translate("Docker");
$("#Plugin_Docker").show();
}
}
});
}
$(document).ready(function docker_buildpage() {
$("#footer").before(buildBlock("Docker", 1, true));
$("#Plugin_Docker").addClass("fullsize");
docker_buildTable();
docker_request();
$("#Reload_DockerTable").click(function docker_reload(id) {
docker_request();
$(this).attr("title", datetime());
});
});

View File

@@ -0,0 +1,46 @@
function renderPlugin_docker(data) {
var directives = {
CPUUsage: {
html: function () {
return '<div class="progress">' +
'<div class="progress-bar progress-bar-info" style="width:' + round(this.CPUUsage,2) + '%;"></div>' +
'</div><div class="percent">' + round(this.CPUUsage,2) + '%</div>';
}
},
MemoryUsage: {
html: function () {
return '<div class="progress">' +
'<div class="progress-bar progress-bar-info" style="width:' + round(this.MemoryUsage,2) + '%;"></div>' +
'</div><div class="percent">' + round(this.MemoryUsage,2) + '%</div>';
}
},
MemoryUsed: {
html: function () {
return formatBytes(this.MemoryUsed, data.Options["@attributes"].byteFormat);
}
},
MemoryLimit: {
html: function () {
return formatBytes(this.MemoryLimit, data.Options["@attributes"].byteFormat);
}
}
};
if ((data.Plugins.Plugin_Docker !== undefined) && (data.Plugins.Plugin_Docker.Docker !== undefined)) {
var doitems = items(data.Plugins.Plugin_Docker.Docker.Item);
if (doitems.length > 0) {
var do_memory = [];
do_memory.push_attrs(doitems);
$('#docker-data').render(do_memory, directives);
$('#docker_Name').removeClass("sorttable_sorted"); // reset sort order
sorttable.innerSortFunction.apply($('#docker_Name')[0], []);
$('#block_docker').show();
} else {
$('#block_docker').hide();
}
} else {
$('#block_docker').hide();
}
}

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Id: en.xml 661 2014-01-08 11:26:39Z aolah76 $ -->
<!--
phpSysInfo language file Language: English Created by: Ambrus Sandor Olah
-->
<tns:translationPlugin language="english" charset="utf-8"
xmlns:tns="http://phpsysinfo.sourceforge.net/translation-plugin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://phpsysinfo.sourceforge.net/translation-plugin ../../../language/translation-plugin.xsd">
<expression id="plugin_docker_001" name="docker_title">
<exp>Docker</exp>
</expression>
<expression id="plugin_docker_101" name="docker_name">
<exp>Container Name</exp>
</expression>
<expression id="plugin_docker_102" name="docker_cpuusage">
<exp>CPU Usage</exp>
</expression>
<expression id="plugin_docker_103" name="docker_memusage">
<exp>Memory Usage</exp>
</expression>
<expression id="plugin_docker_104" name="docker_memused">
<exp>Memory Used</exp>
</expression>
<expression id="plugin_docker_105" name="docker_memlimit">
<exp>Memory Limit</exp>
</expression>
<expression id="plugin_docker_106" name="docker_netio">
<exp>Net I/O</exp>
</expression>
<expression id="plugin_docker_107" name="docker_blockio">
<exp>Block I/O</exp>
</expression>
<expression id="plugin_docker_108" name="docker_pids">
<exp>PIDs</exp>
</expression>
</tns:translationPlugin>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Id: gr.xml 661 2014-01-08 11:26:39Z aolah76 $ -->
<!--
phpSysInfo language file Language: Greek Created by: ChriZathens
-->
<tns:translationPlugin language="greek" charset="utf-8"
xmlns:tns="http://phpsysinfo.sourceforge.net/translation-plugin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://phpsysinfo.sourceforge.net/translation-plugin ../../../language/translation-plugin.xsd">
<expression id="plugin_docker_001" name="docker_title">
<exp>Docker</exp>
</expression>
<expression id="plugin_docker_101" name="docker_name">
<exp>Όνομα Κοντέινερ</exp>
</expression>
<expression id="plugin_docker_102" name="docker_cpuusage">
<exp>Χρήση Επεξεργαστή</exp>
</expression>
<expression id="plugin_docker_103" name="docker_memusage">
<exp>Χρήση Μνήμης</exp>
</expression>
<expression id="plugin_docker_104" name="docker_memused">
<exp>Μνήμη σε Χρήση</exp>
</expression>
<expression id="plugin_docker_105" name="docker_memlimit">
<exp>Όριο Μνήμης</exp>
</expression>
<expression id="plugin_docker_106" name="docker_netio">
<exp>I/O Δικτύου</exp>
</expression>
<expression id="plugin_docker_107" name="docker_blockio">
<exp>I/O Μπλοκ</exp>
</expression>
<expression id="plugin_docker_108" name="docker_pids">
<exp>PIDs</exp>
</expression>
</tns:translationPlugin>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Id: pl.xml 661 2014-01-08 11:26:39Z aolah76 $ -->
<!--
phpSysInfo language file Language: Polish Created by: Mieczysław Nalewaj
-->
<tns:translationPlugin language="polish" charset="utf-8"
xmlns:tns="http://phpsysinfo.sourceforge.net/translation-plugin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://phpsysinfo.sourceforge.net/translation-plugin ../../../language/translation-plugin.xsd">
<expression id="plugin_docker_001" name="docker_title">
<exp>Docker</exp>
</expression>
<expression id="plugin_docker_101" name="docker_name">
<exp>Nazwa Kontenera</exp>
</expression>
<expression id="plugin_docker_102" name="docker_cpuusage">
<exp>Procent procesora</exp>
</expression>
<expression id="plugin_docker_103" name="docker_memusage">
<exp>Procent pamięci</exp>
</expression>
<expression id="plugin_docker_104" name="docker_memused">
<exp>Pamięć</exp>
</expression>
<expression id="plugin_docker_105" name="docker_memlimit">
<exp>Limit pamięci</exp>
</expression>
<expression id="plugin_docker_106" name="docker_netio">
<exp>I/O sieci</exp>
</expression>
<expression id="plugin_docker_107" name="docker_blockio">
<exp>I/O bloków</exp>
</expression>
<expression id="plugin_docker_108" name="docker_pids">
<exp>PIDów</exp>
</expression>
</tns:translationPlugin>