将WordPress服务器仪表板转换成小部件。

将transforming a wordpress server dashboard into a widget

在上一篇文章中,我们创建了插件的基本结构。现在是时候为每个小部件实现呈现类了。

回想一下,所有小部件提供者都必须实现提供者接口。它们还必须位于名为Widgets的文件夹中,位于命名空间AX\StatBoard\Widget下。如果我们想添加一个新的指标,我们只需要创建一个相应的类,创建一个对象并使用add_provider方法将其添加到Widget类中。

RAM使用情况小部件我们要显示的第一条信息是当前使用的RAM量和当前空闲的RAM量。

在这种情况下,free -m是我们的朋友-它告诉我们RAM的使用情况。m开关以兆字节为单位输出结果。

安装的软件我们将介绍的第二个小部件是显示已安装软件的小部件。这是一个小部件,旨在显示服务器上有哪些常用软件包以及哪个版本。

例如,我们安装了NodeJS和Ruby吗?我们使用的是哪个版本的PHP?等一下。

让我们用以下初始内容创建widget/software.php:

磁盘使用现在我们将解决磁盘使用的问题。我们将把处理这个任务的类命名为Disk。我们先做基本骨架。

& lt?PHP namespace AX \ stat board \ Widget;class Disk实现提供程序{ function _ _ construct(){ }公共函数get _ title(){ return & quot;磁盘使用率& quot;像往常一样,我们必须实现提供者接口。我们在这里为小部件设置一个标题。接下来是我们课程的核心:获取磁盘使用情况的方法。

& lt?php函数get _ metric(){ $ df = ` df-h `;$df =爆炸(& quot\ n & quot,$ df);if(is _ array($ df)& amp;& ampcount($ df)& gt;= 2){ array _ shift($ df);//摆脱第一行$ df = array _ map(function($ line){ if(empty($ line)){ return NULL;} $ segment = preg _ split(‘/\ s+/‘,$ line);返回数组(‘file system‘= & gt;$段

服务器信息这个小部件向我们显示信息:Linux内核、CPU架构、正常运行时间、IP地址。我们这里不需要图表。一个简单的数据表就可以完成这项工作。调用类是Server。这是widget/server.php

的第一个内容

处理器监控我们的处理器是我们可以展示的最重要的东西之一。我们想知道一个特定的进程使用了多少CPU和/或内存。我们调用我们的类Process,从get_title和get_metric开始。稍后我将在代码中解释关于get_metric的更多细节:

& lt?PHP namespace AX \ stat board \ Widget;类进程实现提供程序{ public function get _ title(){ return & quot;进程& quot;} /***返回服务器信息:操作系统、内核、正常运行时间和主机名* @返回带有3个度量的数组:* *主机名* *操作系统* *正常运行时间*/函数get _ metric(){ $ processes = array();$output = `ps -eo pcpu,pmem,pid,user,args,time,start | grep-v‘\

平均负载Linux有一个命令可以显示CPU和IO在过去1分钟、5分钟和15分钟的平均负载。让我们将其压缩成一个小部件。将其命名为Cpuload并创建我们的小部件/cpuload.php。

& lt?PHP namespace AX \ stat board \ Widget;类Cpuload实现提供程序{ function _ _ construct(){ }公共函数get _ title(){ return & quot;CPU负载& quot;} function get _ metric(){ $ number _ of _ core = intval(`/bin/grep-c processor/proc/CPU info `);$ load avg = ` cat/proc/load avg |/usr/bin/awk“{ print $ 1,$2,$ 3 }‘`;$ load avg = explode(‘‘,$ load avg);if($ load avg & lt;3){返回false} $ load times = array(‘1分钟’‘5分钟’‘15分钟’);return array _ map(function($ load time,$value,$ number _ of _ core){ return array($ load time,round($ value * 100/$ number _ of _ core,2),$ value);},$loadTimes,$loadAvg,array _ fill(0,3,$ number _ of _ core);}}首先,我们通过读取/proc/cpuinfo来统计CPU核心的数量,并统计包含“处理器”一词的行数。我们在服务器信息中。

这是部分介绍。

在Linux中,/proc/loadavg存储平均负载信息。前三列分别是1分钟、5分钟和15分钟的负荷。这里使用Awk来过滤出我们需要的字段。~ cat/proc/load avg 0.01 0.04 0.05 1/217 16089 ~ cat/proc/load avg | awk“{ print $ 1,$2,$ 3 }”0.01 0.04 0.05将上述结果用空格分开,构造一个包含三个元素的数组。计算所有内核的平均负载。因此,为了得到结果,我们使用array_map循环来遍历$loadAvg数组,并将其除以我们拥有的内核数。请注意,我们创建了两个与$loadAvg长度相同的额外数组,一个用于保存密钥,另一个用于保存内核数量,以便将所有这些传递给array_map。

获取内容时间:

公共函数get _ content(){ $ metrics = $ this-& gt;get _ metric();如果(!$ metrics){ return false;} //有关格式$ Data = array(array(‘Duration‘,‘% Load‘)的更多详细信息,请参见https://Google-developers . app spot . com/chart/interactive/docs/gallery/barchart # Data _ Format;foreach($ metrics as $ key = & gt;$ metric){ array _ push($ data,array($ metric,,】这是图表呈现时的结果:

0], $metric[1] ) ); } $data = json_encode( $data ); echo <<<EOD<div id=”avg_load”></div><script type=”text/javascript”> google.load(“visualization”, “1”, {packages:[“corechart”]}); google.setOnLoadCallback(drawChart); function drawChart() { var data = google.visualization.arrayToDataTable($data); var options = { hAxis: { titleTextStyle: {color: ‘red’}, minValue:0, maxValue:100 } }; var chart = new google.visualization.BarChart(document.getElementById(‘avg_load’)); chart.draw(data, options); } </script>EOD; }我们使用条形图并从数组创建一个数据数组,然后使用 json_encode 将其转换为与条形图数据格式匹配的 JavaScript 表示法数组。

例如:

[ [“Duration”,”% Load”], [“1 min”

以太网接口我们要处理的下一个小部件是以太网接口。一些服务器可以有多个以太网接口,并为它们分配不同的IP地址。

看到这些信息非常有用。我们把这个类称为以太坊,从widget/ethernet.php的基本内容开始。

& lt?php/** *采用自https://github.com/afaqurk/linux-dash/blob/master/sh/ip.php * */namespace AX \ stat board \ Widget;类以太网实现提供程序{ function _ _ construct(){ }公共函数get _ title(){ return & quot;以太网;}函数get _ metric(){ $ Ethernet = array();$ output = shell _ exec(& quot;ip -oneline链接显示| awk“{ print $ 2 }”| sed的//://“& quot;);如果(!$ output){//它不适用于& quotip&quot所以我们使用ifconfig $ output = shell _ exec(‘ifconfig |/bin/grep-B1 & quot;inet地址| /usr/bin/awk \““。“{ if(1美元= = & quotinet & quot){ print $ 2 }‘。‘else if(2 = = & quot;链接& quot){ printf & quot%s:&quot,$ 1 } } \‘|/usr/bin/awk‘。-F:\‘{ print $ 1 & quot;,& quot$3 }\” );$ output = trim(output,& quot\ n & quot);$ output = `ifconfig | grep & quot链接封装& quot| awk“{ print $ 1 }”`;$ interfaces = explode(& quot;\ n & quot,$ output);$ output = `ifconfiga | grep & quotinet地址| awk“{ print $ 2 }”| sed‘s/addr://‘`;$ addreses = explode(& quot;\ n & quot,$ output);$ output = trim(output,& quot\ n & quot);返回array _ combine($ interfaces,$ addreses);} $ output = trim($ output,& quot\ n & quot);$ interfaces = explode(& quot;\ n & quot,$ output);$ addreses = array();foreach($ interfaces as $ interface){ $ output = shell _ exec(& quot;IP-oneline-family inet addr show $ interface | awk“{ print $ 4 }”| cut-d“/“-f1 & quot;);$addreses

网络流量网络流量或网络IO显示通过计算机网络传输的数据包的状态。该信息提取自netstat。

输入/输出统计现在,我们处理io统计。IO代表输入/输出。我们将知道每秒执行多少读/写操作。我们还处理io_wait。IO wait是CPU空闲等待从硬盘读取结果的时间。

例如,如果您正在读取MySQL数据,CPU将处于空闲状态并等待结果。Io等待时间计算为1秒或1000毫秒。如果你的代码需要100毫秒从硬盘读取数据,io_wait就是100/1000 = 10%。IO等待越少,系统性能越好。

为了继续此操作,请确保sysstat包在系统上可用。

对于Arch Linux,请安装


【AD】DMIT 美西cmin2套餐Eyeball WEE补货,39.99美元/年(1核1G/10G SSD /1Gbps@800G),三网回程 CMIN2

【AD】美国洛杉矶/香港/日本VPS推荐,回程电信CN2 GIA线路,延迟低、稳定性高、免费备份_搬瓦工