witersen
3 years ago
16 changed files with 842 additions and 151 deletions
@ -0,0 +1,330 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<Card :bordered="false" :dis-hover="true" style="margin-bottom: 10px" v-if="display.part1"> |
||||||
|
<p slot="title"> |
||||||
|
<Icon type="md-bulb" /> |
||||||
|
{{ systemBrif.os }} |
||||||
|
</p> |
||||||
|
<div> |
||||||
|
<Row> |
||||||
|
<Col span="4"> |
||||||
|
<div class="statusTop">负载状态</div> |
||||||
|
<Tooltip placement="bottom" max-width="200"> |
||||||
|
<Circle |
||||||
|
:percent="statusInfo.load.percent" |
||||||
|
dashboard |
||||||
|
:size="100" |
||||||
|
:stroke-color="statusInfo.load.color" |
||||||
|
class="statusCircle" |
||||||
|
> |
||||||
|
<span class="demo-circle-inner" style="font-size: 24px" |
||||||
|
>{{ statusInfo.load.percent }}%</span |
||||||
|
> |
||||||
|
</Circle> |
||||||
|
<div slot="content"> |
||||||
|
<p>最近1分钟平均负载:{{ statusInfo.load.cpuLoad1Min }}</p> |
||||||
|
<p>最近5分钟平均负载:{{ statusInfo.load.cpuLoad5Min }}</p> |
||||||
|
<p>最近15分钟平均负载:{{ statusInfo.load.cpuLoad15Min }}</p> |
||||||
|
</div> |
||||||
|
</Tooltip> |
||||||
|
<div class="statusBottom">{{ statusInfo.load.title }}</div> |
||||||
|
</Col> |
||||||
|
<Col span="4"> |
||||||
|
<div class="statusTop">CPU使用率</div> |
||||||
|
<Tooltip placement="bottom" max-width="200"> |
||||||
|
<Circle |
||||||
|
:percent="statusInfo.cpu.percent" |
||||||
|
dashboard |
||||||
|
:size="100" |
||||||
|
:stroke-color="statusInfo.cpu.color" |
||||||
|
class="statusCircle" |
||||||
|
> |
||||||
|
<span class="demo-circle-inner" style="font-size: 24px" |
||||||
|
>{{ statusInfo.cpu.percent }}%</span |
||||||
|
> |
||||||
|
</Circle> |
||||||
|
<div slot="content"> |
||||||
|
<p v-for="item in statusInfo.cpu.cpu" :key="item">{{ item }}</p> |
||||||
|
<p>物理CPU个数:{{ statusInfo.cpu.cpuPhysical }}</p> |
||||||
|
<p>物理CPU的总核心数:{{ statusInfo.cpu.cpuCore }}</p> |
||||||
|
<p>物理CPU的线程总数:{{ statusInfo.cpu.cpuProcessor }}</p> |
||||||
|
</div> |
||||||
|
</Tooltip> |
||||||
|
<div class="statusBottom">{{ statusInfo.cpu.cpuCore }}核心</div> |
||||||
|
</Col> |
||||||
|
<Col span="4"> |
||||||
|
<div class="statusTop">内存使用率</div> |
||||||
|
<Circle |
||||||
|
:percent="statusInfo.mem.percent" |
||||||
|
dashboard |
||||||
|
:size="100" |
||||||
|
:stroke-color="statusInfo.mem.color" |
||||||
|
class="statusCircle" |
||||||
|
> |
||||||
|
<span class="demo-circle-inner" style="font-size: 24px" |
||||||
|
>{{ statusInfo.mem.percent }}%</span |
||||||
|
> |
||||||
|
</Circle> |
||||||
|
<div class="statusBottom"> |
||||||
|
{{ statusInfo.mem.memUsed }} / {{ statusInfo.mem.memTotal }}(MB) |
||||||
|
</div> |
||||||
|
</Col> |
||||||
|
<Col span="4" v-for="(item, index) in diskList" :key="index"> |
||||||
|
<div class="statusTop">{{ item.mountedOn }}</div> |
||||||
|
<Tooltip placement="bottom" max-width="200"> |
||||||
|
<div slot="content"> |
||||||
|
<p>文件系统:{{ item.fileSystem }}</p> |
||||||
|
<p>容量:{{ item.size }}</p> |
||||||
|
<p>已使用:{{ item.used }}</p> |
||||||
|
<p>可使用:{{ item.avail }}</p> |
||||||
|
<p>使用率:{{ item.percent }}%</p> |
||||||
|
<p>挂载点:{{ item.mountedOn }}</p> |
||||||
|
</div> |
||||||
|
<Circle |
||||||
|
:percent="item.percent" |
||||||
|
dashboard |
||||||
|
:size="100" |
||||||
|
:stroke-color="item.color" |
||||||
|
class="statusCircle" |
||||||
|
> |
||||||
|
<span class="demo-circle-inner" style="font-size: 24px" |
||||||
|
>{{ item.percent }}%</span |
||||||
|
> |
||||||
|
</Circle> |
||||||
|
</Tooltip> |
||||||
|
<div class="statusBottom"> |
||||||
|
{{ item.used }} / |
||||||
|
{{ item.size }} |
||||||
|
</div> |
||||||
|
</Col> |
||||||
|
</Row> |
||||||
|
</div> |
||||||
|
</Card> |
||||||
|
<Card :bordered="false" :dis-hover="true" style="margin-bottom: 10px"> |
||||||
|
<p slot="title"> |
||||||
|
<Icon type="ios-options" /> |
||||||
|
统计 |
||||||
|
</p> |
||||||
|
<div> |
||||||
|
<Row :gutter="16"> |
||||||
|
<Col span="4"> |
||||||
|
<Card :dis-hover="true"> |
||||||
|
<div style="text-align: center"> |
||||||
|
<p>仓库占用</p> |
||||||
|
<h2 style="color: #28bcfe">{{ systemBrif.repSize }}</h2> |
||||||
|
</div> |
||||||
|
</Card> |
||||||
|
</Col> |
||||||
|
<Col span="4"> |
||||||
|
<Card :dis-hover="true"> |
||||||
|
<div style="text-align: center"> |
||||||
|
<p>备份占用</p> |
||||||
|
<h2 style="color: #28bcfe">{{ systemBrif.backupSize }}</h2> |
||||||
|
</div> |
||||||
|
</Card> |
||||||
|
</Col> |
||||||
|
<Col span="4"> |
||||||
|
<Card :dis-hover="true"> |
||||||
|
<div style="text-align: center"> |
||||||
|
<p>SVN仓库</p> |
||||||
|
<h2 style="color: #28bcfe">{{ systemBrif.repCount }}</h2> |
||||||
|
</div> |
||||||
|
</Card> |
||||||
|
</Col> |
||||||
|
<Col span="4"> |
||||||
|
<Card :dis-hover="true"> |
||||||
|
<div style="text-align: center"> |
||||||
|
<p>SVN用户</p> |
||||||
|
<h2 style="color: #28bcfe">{{ systemBrif.repUser }}</h2> |
||||||
|
</div> |
||||||
|
</Card> |
||||||
|
</Col> |
||||||
|
<Col span="4"> |
||||||
|
<Card :dis-hover="true"> |
||||||
|
<div style="text-align: center"> |
||||||
|
<p>SVN分组</p> |
||||||
|
<h2 style="color: #28bcfe">{{ systemBrif.repGroup }}</h2> |
||||||
|
</div> |
||||||
|
</Card> |
||||||
|
</Col> |
||||||
|
<Col span="4"> |
||||||
|
<Card :dis-hover="true"> |
||||||
|
<div style="text-align: center"> |
||||||
|
<p>运行日志/条</p> |
||||||
|
<h2 style="color: #28bcfe">{{ systemBrif.logCount }}</h2> |
||||||
|
</div> |
||||||
|
</Card> |
||||||
|
</Col> |
||||||
|
</Row> |
||||||
|
</div> |
||||||
|
</Card> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
/** |
||||||
|
* 两个板块的显示控制 |
||||||
|
*/ |
||||||
|
display: { |
||||||
|
part1: true, |
||||||
|
part2: true, |
||||||
|
}, |
||||||
|
/** |
||||||
|
* 硬盘信息 |
||||||
|
*/ |
||||||
|
diskList: [], |
||||||
|
/** |
||||||
|
* 状态信息 |
||||||
|
*/ |
||||||
|
statusInfo: { |
||||||
|
load: { |
||||||
|
cpuLoad15Min: 0.22, |
||||||
|
cpuLoad5Min: 0.28, |
||||||
|
cpuLoad1Min: 0.32, |
||||||
|
percent: 16, |
||||||
|
color: "#28bcfe", |
||||||
|
}, |
||||||
|
cpu: { |
||||||
|
percent: 28.2, |
||||||
|
cpu: ["Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz"], |
||||||
|
cpuPhysical: 1, |
||||||
|
cpuPhysicalCore: 1, |
||||||
|
cpuCore: 1, |
||||||
|
cpuProcessor: 1, |
||||||
|
color: "#28bcfe", |
||||||
|
}, |
||||||
|
mem: { |
||||||
|
memTotal: 1838, |
||||||
|
memUsed: 975, |
||||||
|
memFree: 863, |
||||||
|
percent: 53, |
||||||
|
color: "#28bcfe", |
||||||
|
}, |
||||||
|
}, |
||||||
|
/** |
||||||
|
* 统计信息 |
||||||
|
*/ |
||||||
|
systemBrif: { |
||||||
|
os: "", |
||||||
|
repSize: 0, |
||||||
|
repCount: 0, |
||||||
|
repUser: 0, |
||||||
|
repGroup: 0, |
||||||
|
logCount: 0, |
||||||
|
backupSize: 0, |
||||||
|
}, |
||||||
|
}; |
||||||
|
}, |
||||||
|
computed: {}, |
||||||
|
created() {}, |
||||||
|
mounted() { |
||||||
|
var that = this; |
||||||
|
if (that.display.part1) { |
||||||
|
that.GetDisk(); |
||||||
|
that.GetSystemStatus(); |
||||||
|
//设置定时器 |
||||||
|
that.timer = window.setInterval(() => { |
||||||
|
setTimeout(that.GetSystemStatus(), 0); |
||||||
|
}, 3000); |
||||||
|
//离开页面清除定时器 |
||||||
|
that.$once("hook:beforeDestroy", () => { |
||||||
|
clearInterval(that.timer); |
||||||
|
}); |
||||||
|
} |
||||||
|
if (that.display.part2) { |
||||||
|
that.GetSystemAnalysis(); |
||||||
|
} |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
/** |
||||||
|
* 获取磁盘 |
||||||
|
*/ |
||||||
|
GetDisk() { |
||||||
|
var that = this; |
||||||
|
var data = {}; |
||||||
|
that.$axios |
||||||
|
.post("/api.php?c=Statistics&a=GetDisk&t=web", data) |
||||||
|
.then(function (response) { |
||||||
|
var result = response.data; |
||||||
|
if (result.status == 1) { |
||||||
|
// that.$Message.success(result.message); |
||||||
|
that.diskList = result.data; |
||||||
|
} else { |
||||||
|
that.$Message.error(result.message); |
||||||
|
} |
||||||
|
}) |
||||||
|
.catch(function (error) { |
||||||
|
console.log(error); |
||||||
|
that.$Message.error("出错了 请联系管理员!"); |
||||||
|
}); |
||||||
|
}, |
||||||
|
/** |
||||||
|
* 获取状态 |
||||||
|
*/ |
||||||
|
GetSystemStatus() { |
||||||
|
var that = this; |
||||||
|
var data = {}; |
||||||
|
that.$axios |
||||||
|
.post("/api.php?c=Statistics&a=GetSystemStatus&t=web", data) |
||||||
|
.then(function (response) { |
||||||
|
var result = response.data; |
||||||
|
if (result.status == 1) { |
||||||
|
// that.$Message.success(result.message); |
||||||
|
that.statusInfo = result.data; |
||||||
|
} else { |
||||||
|
that.$Message.error(result.message); |
||||||
|
} |
||||||
|
}) |
||||||
|
.catch(function (error) { |
||||||
|
console.log(error); |
||||||
|
that.$Message.error("出错了 请联系管理员!"); |
||||||
|
}); |
||||||
|
}, |
||||||
|
/** |
||||||
|
* 获取统计 |
||||||
|
*/ |
||||||
|
GetSystemAnalysis() { |
||||||
|
var that = this; |
||||||
|
var data = {}; |
||||||
|
that.$axios |
||||||
|
.post("/api.php?c=Statistics&a=GetSystemAnalysis&t=web", data) |
||||||
|
.then(function (response) { |
||||||
|
var result = response.data; |
||||||
|
if (result.status == 1) { |
||||||
|
// that.$Message.success(result.message); |
||||||
|
that.systemBrif = result.data; |
||||||
|
} else { |
||||||
|
that.$Message.error(result.message); |
||||||
|
} |
||||||
|
}) |
||||||
|
.catch(function (error) { |
||||||
|
console.log(error); |
||||||
|
that.$Message.error("出错了 请联系管理员!"); |
||||||
|
}); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style> |
||||||
|
.statusTop { |
||||||
|
width: 140px; |
||||||
|
text-align: center; |
||||||
|
margin-bottom: 5px; |
||||||
|
|
||||||
|
white-space: nowrap; |
||||||
|
overflow: hidden; |
||||||
|
text-overflow: ellipsis; |
||||||
|
} |
||||||
|
.statusCircle { |
||||||
|
margin-left: 20px; |
||||||
|
} |
||||||
|
.statusBottom { |
||||||
|
width: 140px; |
||||||
|
text-align: center; |
||||||
|
margin-bottom: 15px; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,70 @@ |
|||||||
|
<?php |
||||||
|
/* |
||||||
|
* @Author: witersen |
||||||
|
* @Date: 2022-04-24 23:37:05 |
||||||
|
* @LastEditors: witersen |
||||||
|
* @LastEditTime: 2022-05-07 14:00:06 |
||||||
|
* @Description: QQ:1801168257 |
||||||
|
*/ |
||||||
|
|
||||||
|
namespace app\controller; |
||||||
|
|
||||||
|
use app\service\Statistics as ServiceStatistics; |
||||||
|
|
||||||
|
class Statistics extends Base |
||||||
|
{ |
||||||
|
/** |
||||||
|
* 服务层对象 |
||||||
|
* |
||||||
|
* @var object |
||||||
|
*/ |
||||||
|
private $ServiceStatistics; |
||||||
|
|
||||||
|
function __construct() |
||||||
|
{ |
||||||
|
parent::__construct(); |
||||||
|
|
||||||
|
$this->ServiceStatistics = new ServiceStatistics(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取状态 |
||||||
|
* |
||||||
|
* 负载状态 |
||||||
|
* CPU使用率 |
||||||
|
* 内存使用率 |
||||||
|
*/ |
||||||
|
public function GetSystemStatus() |
||||||
|
{ |
||||||
|
$result = $this->ServiceStatistics->GetSystemStatus(); |
||||||
|
json2($result); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取硬盘 |
||||||
|
* |
||||||
|
* 获取硬盘数量和每个硬盘的详细信息 |
||||||
|
*/ |
||||||
|
public function GetDisk() |
||||||
|
{ |
||||||
|
$result = $this->ServiceStatistics->GetDisk(); |
||||||
|
json2($result); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取统计 |
||||||
|
* |
||||||
|
* 操作系统类型 |
||||||
|
* 仓库占用体积 |
||||||
|
* SVN仓库数量 |
||||||
|
* SVN用户数量 |
||||||
|
* SVN分组数量 |
||||||
|
* 计划任务数量 |
||||||
|
* 运行日志数量 |
||||||
|
*/ |
||||||
|
public function GetSystemAnalysis() |
||||||
|
{ |
||||||
|
$result = $this->ServiceStatistics->GetSystemAnalysis(); |
||||||
|
json2($result); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,260 @@ |
|||||||
|
<?php |
||||||
|
/* |
||||||
|
* @Author: witersen |
||||||
|
* @Date: 2022-04-24 23:37:05 |
||||||
|
* @LastEditors: witersen |
||||||
|
* @LastEditTime: 2022-05-07 01:45:39 |
||||||
|
* @Description: QQ:1801168257 |
||||||
|
*/ |
||||||
|
|
||||||
|
namespace app\service; |
||||||
|
|
||||||
|
class Statistics extends Base |
||||||
|
{ |
||||||
|
function __construct() |
||||||
|
{ |
||||||
|
parent::__construct(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取状态 |
||||||
|
* |
||||||
|
* 负载状态 |
||||||
|
* CPU使用率 |
||||||
|
* 内存使用率 |
||||||
|
*/ |
||||||
|
public function GetSystemStatus() |
||||||
|
{ |
||||||
|
/** |
||||||
|
* ----------负载计算开始---------- |
||||||
|
*/ |
||||||
|
$laodavg = FunShellExec("cat /proc/loadavg | awk '{print $1,$2,$3}'"); |
||||||
|
$laodavg = $laodavg['result']; |
||||||
|
$laodavgArray = explode(' ', $laodavg); |
||||||
|
|
||||||
|
//获取CPU15分钟前到现在的负载平均值 |
||||||
|
$cpuLoad15Min = (float)trim($laodavgArray[2]); |
||||||
|
|
||||||
|
//获取CPU5分钟前到现在的负载平均值 |
||||||
|
$cpuLoad5Min = (float)trim($laodavgArray[1]); |
||||||
|
|
||||||
|
//获取CPU1分钟前到现在的负载平均值 |
||||||
|
$cpuLoad1Min = (float)trim($laodavgArray[0]); |
||||||
|
|
||||||
|
//获取cpu总核数 |
||||||
|
$cpuCount = FunShellExec('grep -c "model name" /proc/cpuinfo'); |
||||||
|
$cpuCount = $cpuCount['result']; |
||||||
|
$cpuCount = (int)trim($cpuCount); |
||||||
|
|
||||||
|
//一分钟的平均负载 / (cpu总核数 * 2),超过100则为100 不超100为真实值取整 |
||||||
|
$percent = round($cpuLoad1Min / ($cpuCount * 2) * 100, 1); |
||||||
|
if ($percent > 100) { |
||||||
|
$percent = 100; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* ----------负载计算结束---------- |
||||||
|
*/ |
||||||
|
$data['load'] = [ |
||||||
|
'cpuLoad15Min' => $cpuLoad15Min, |
||||||
|
'cpuLoad5Min' => $cpuLoad5Min, |
||||||
|
'cpuLoad1Min' => $cpuLoad1Min, |
||||||
|
'percent' => $percent, |
||||||
|
'color' => FunGetColor($percent)['color'], |
||||||
|
'title' => FunGetColor($percent)['title'] |
||||||
|
]; |
||||||
|
|
||||||
|
/** |
||||||
|
* ----------cpu计算开始---------- |
||||||
|
*/ |
||||||
|
/** |
||||||
|
* cpu使用率 |
||||||
|
* |
||||||
|
* %Cpu(s): 0.0 us, 3.2 sy, 0.0 ni, 96.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st |
||||||
|
* |
||||||
|
* us user CPU time 用户空间占用CPU百分比 |
||||||
|
* sy system CPU time 内核空间占用CPU百分比 |
||||||
|
* ni nice CPU 用户进程空间内改变过优先级的进程占用CPU百分比 |
||||||
|
* id idle 空闲CPU百分比 |
||||||
|
* wa iowait 等待输入输出的CPU时间百分比 |
||||||
|
* hi hardware 硬件中断 |
||||||
|
* si software 软件中断 |
||||||
|
* st steal 实时 |
||||||
|
*/ |
||||||
|
$topResult = FunShellExec('top -b -n 1 | grep Cpu'); |
||||||
|
$topResult = $topResult['result']; |
||||||
|
preg_match('/ni,(.*?)id/', $topResult, $matches); |
||||||
|
$id = 100 - (float)trim($matches[1]); |
||||||
|
|
||||||
|
//cpu型号 |
||||||
|
$cpuModelArray = []; |
||||||
|
$cpuModelName = FunShellExec("cat /proc/cpuinfo | grep 'model name' | uniq"); |
||||||
|
$cpuModelName = $cpuModelName['result']; |
||||||
|
$explodeArray = explode("\n", trim($cpuModelName)); |
||||||
|
foreach ($explodeArray as $value) { |
||||||
|
if (trim($value) != '') { |
||||||
|
$tempArray = explode(':', $value); |
||||||
|
array_push($cpuModelArray, trim($tempArray[1])); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//物理cpu个数 |
||||||
|
$cpuPhysical = FunShellExec("cat /proc/cpuinfo | grep 'physical id' | sort -u | wc -l"); |
||||||
|
$cpuPhysical = $cpuPhysical['result']; |
||||||
|
$cpuPhysical = (int)trim($cpuPhysical); |
||||||
|
|
||||||
|
//每个物理cpu的物理核心数 |
||||||
|
$cpuPhysicalCore = FunShellExec("cat /proc/cpuinfo | grep 'cpu cores' | wc -l"); |
||||||
|
$cpuPhysicalCore = $cpuPhysicalCore['result']; |
||||||
|
$cpuPhysicalCore = (int)trim($cpuPhysicalCore); |
||||||
|
|
||||||
|
//总物理核心数 = 物理cpu个数 * 每个物理cpu的物理核心数(每个物理cpu的物理核心数都一样吗?) |
||||||
|
$cpuCore = $cpuPhysical * $cpuPhysicalCore; |
||||||
|
|
||||||
|
//逻辑核心总数(线程总数) |
||||||
|
$cpuProcessor = FunShellExec("cat /proc/cpuinfo | grep 'processor' | wc -l"); |
||||||
|
$cpuProcessor = $cpuProcessor['result']; |
||||||
|
$cpuProcessor = (int)trim($cpuProcessor); |
||||||
|
|
||||||
|
/** |
||||||
|
* ----------cpu计算结束---------- |
||||||
|
*/ |
||||||
|
$data['cpu'] = [ |
||||||
|
'percent' => round($id, 1), |
||||||
|
'cpu' => $cpuModelArray, |
||||||
|
'cpuPhysical' => $cpuPhysical, |
||||||
|
'cpuPhysicalCore' => $cpuPhysicalCore, |
||||||
|
'cpuCore' => $cpuCore, |
||||||
|
'cpuProcessor' => $cpuProcessor, |
||||||
|
'color' => FunGetColor($id)['color'] |
||||||
|
]; |
||||||
|
|
||||||
|
/** |
||||||
|
* ----------内存计算开始---------- |
||||||
|
*/ |
||||||
|
/** |
||||||
|
* MemTotal 总内存 |
||||||
|
* MemFree 空闲内存 |
||||||
|
* MemAvailable 可用内存(MemFree + 可回收的内存),系统中有些内存虽然已被使用但是可以回收,比如cache、buffer、slab都有一部分可以回收 |
||||||
|
*/ |
||||||
|
//物理内存总量 |
||||||
|
$memTotal = FunShellExec("cat /proc/meminfo | grep 'MemTotal' | awk '{print $2}'"); |
||||||
|
$memTotal = $memTotal['result']; |
||||||
|
$memTotal = (int)trim($memTotal); |
||||||
|
|
||||||
|
//操作系统可用内存总量(没有使用空闲内存) |
||||||
|
$memFree = FunShellExec("cat /proc/meminfo | grep 'MemAvailable' | awk '{print $2}'"); |
||||||
|
$memFree = $memFree['result']; |
||||||
|
$memFree = (int)trim($memFree); |
||||||
|
|
||||||
|
//操作系统已使用内存总量 |
||||||
|
$memUsed = $memTotal - $memFree; |
||||||
|
|
||||||
|
//内存使用率 |
||||||
|
$percent = round($memUsed / $memTotal * 100, 1); |
||||||
|
|
||||||
|
/** |
||||||
|
* ----------内存计算结束---------- |
||||||
|
*/ |
||||||
|
$data['mem'] = [ |
||||||
|
'memTotal' => round($memTotal / 1024), |
||||||
|
'memUsed' => round($memUsed / 1024), |
||||||
|
'memFree' => round($memFree / 1024), |
||||||
|
'percent' => $percent, |
||||||
|
'color' => FunGetColor($percent)['color'] |
||||||
|
]; |
||||||
|
|
||||||
|
return message(200, 1, '成功', $data); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取硬盘 |
||||||
|
* |
||||||
|
* 获取硬盘数量和每个硬盘的详细信息 |
||||||
|
*/ |
||||||
|
public function GetDisk() |
||||||
|
{ |
||||||
|
$rs = FunShellExec('df -lh | grep -E "^(/)"'); |
||||||
|
$rs = $rs['result']; |
||||||
|
|
||||||
|
//将多个连续的空格换为一个 |
||||||
|
$result = preg_replace("/\s{2,}/", ' ', $rs); |
||||||
|
|
||||||
|
//多个硬盘 |
||||||
|
$diskArray = explode("\n", $result); |
||||||
|
|
||||||
|
$data = []; |
||||||
|
|
||||||
|
//处理 |
||||||
|
foreach ($diskArray as $value) { |
||||||
|
if (trim($value) != '') { |
||||||
|
$diskInfo = explode(" ", $value); |
||||||
|
array_push($data, [ |
||||||
|
'fileSystem' => $diskInfo[0], |
||||||
|
'size' => $diskInfo[1], |
||||||
|
'used' => $diskInfo[2], |
||||||
|
'avail' => $diskInfo[3], |
||||||
|
'percent' => (int)str_replace('%', '', $diskInfo[4]), |
||||||
|
'mountedOn' => $diskInfo[5], |
||||||
|
'color' => FunGetColor((int)str_replace('%', '', $diskInfo[4]))['color'] |
||||||
|
]); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return message(200, 1, '成功', $data); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取统计 |
||||||
|
* |
||||||
|
* 操作系统类型 |
||||||
|
* 仓库占用体积 |
||||||
|
* SVN仓库数量 |
||||||
|
* SVN用户数量 |
||||||
|
* SVN分组数量 |
||||||
|
* 计划任务数量 |
||||||
|
* 运行日志数量 |
||||||
|
*/ |
||||||
|
public function GetSystemAnalysis() |
||||||
|
{ |
||||||
|
//操作系统类型和版本 |
||||||
|
$os = FunShellExec("cat /etc/redhat-release"); |
||||||
|
$os = $os['result']; |
||||||
|
|
||||||
|
//仓库占用体积 |
||||||
|
$repSize = FunFormatSize(FunGetDirSizeDu($this->config_svn['rep_base_path'])); |
||||||
|
|
||||||
|
//备份占用体积 |
||||||
|
$backupSize = FunFormatSize(FunGetDirSizeDu($this->config_svn['backup_base_path'])); |
||||||
|
|
||||||
|
//SVN仓库数量 |
||||||
|
$repCount = count($this->SVNAdminRep->GetSimpleRepList()); |
||||||
|
|
||||||
|
//SVN用户数量 |
||||||
|
$userCount = $this->SVNAdminUser->GetSvnUserList($this->passwdContent); |
||||||
|
if ($userCount === '0') { |
||||||
|
return message(200, 0, '文件格式错误(不存在[users]标识)'); |
||||||
|
} |
||||||
|
$userCount = count($userCount); |
||||||
|
|
||||||
|
//SVN分组数量 |
||||||
|
$groupCount = $this->SVNAdminGroup->GetSvnGroupList($this->authzContent); |
||||||
|
if ($userCount === '0') { |
||||||
|
return message(200, 0, '文件格式错误(不存在[groups]标识)'); |
||||||
|
} |
||||||
|
$groupCount = count($groupCount); |
||||||
|
|
||||||
|
//运行日志数量 |
||||||
|
$logCount = $this->database->count('logs', ['log_id[>]' => 0]); |
||||||
|
|
||||||
|
return message(200, 1, '成功', [ |
||||||
|
'os' => trim($os), |
||||||
|
'repSize' => $repSize, |
||||||
|
'repCount' => $repCount, |
||||||
|
'repUser' => $userCount, |
||||||
|
'repGroup' => $groupCount, |
||||||
|
'logCount' => $logCount, |
||||||
|
'backupSize' => $backupSize |
||||||
|
]); |
||||||
|
} |
||||||
|
} |
@ -1,11 +0,0 @@ |
|||||||
[Unit] |
|
||||||
Description=Subversion protocol daemon |
|
||||||
After=syslog.target network.target |
|
||||||
|
|
||||||
[Service] |
|
||||||
Type=simple |
|
||||||
ExecStart=/usr/bin/php /var/www/html/server/svnadmind.php start |
|
||||||
ExecStop=/usr/bin/php /var/www/html/server/svnadmind.php stop |
|
||||||
|
|
||||||
[Install] |
|
||||||
WantedBy=multi-user.target |
|
Loading…
Reference in new issue