<?php
namespace App\Modules\Admin\Services;
use App\Library\SystemInfo;
use App\Modules\Admin\Entities\Article\Article;
use App\Modules\Admin\Entities\Log\AdminLog;
use App\Modules\Admin\Entities\Rabc\Admin;
use App\Modules\Admin\Entities\System\Banner;
use App\Modules\Admin\Entities\System\Friendlink;
use App\Modules\Admin\Entities\System\Version;
use Illuminate\Support\Facades\Cache;
class IndexService extends BaseService
{
public function index()
{
return [
'admins_count' => Admin::count(),
'articles_count' => Article::count(),
'banners_count' => Banner::count(),
'friendlinks_count' => Friendlink::count(),
'skill' => $this->skill(),
'statistics' => $this->logsStatistics(),
];
}
private function skill()
{
$arr = [
'cnpscy' => 100,
'PHP' => rand(70, 99),
'Mysql' => rand(70, 99),
'Redis' => rand(70, 99),
'Thinkphp' => rand(70, 99),
'Laravel' => rand(50, 99),
'Hypref' => rand(50, 99),
'Vue' => rand(10, 99),
'JavaScript' => rand(20, 99),
];
$list = [];
foreach ($arr as $key => $value) {
$list[] = [
'name' => $key,
'value' => $value,
];
}
return $list;
}
public function logsStatistics()
{
$default_time_interval = 300;
$time_interval_key = "logs-statistics's-time-interval";
$time_interval = Cache::get($time_interval_key, $default_time_interval);
return Cache::remember('logs-statistics', $time_interval, function() use ($time_interval, $time_interval_key) {
$default_data = [
'xAxis' => [
'data' => [],
],
'list_name' => [
'POST',
'PUT',
'DELETE',
],
'data_lists' => [
'POST' => [],
'PUT' => [],
'DELETE' => [],
],
];
$adminLogInstance = AdminLog::getInstance();
$interval_nums = 100; $hours = ceil($time_interval / 3600); $time = strtotime(date('Y-m-d H:i', strtotime('+' . $hours . ' hour')) . ':00');
$list = $adminLogInstance->whereBetWeen('created_time', [
$time - $interval_nums * $time_interval,
$time,
])->get();
$has_records = false;
for ($i = 0; $i < $interval_nums; $i++) {
$end_time = $time - $time_interval;
$default_data['xAxis']['data'][$i] = date('Y-m-d H:i', $end_time);
$default_data['data_lists']['POST'][$i] = $default_data['data_lists']['PUT'][$i] = $default_data['data_lists']['DELETE'][$i] = 0;
if ( $list ) {
foreach ($list as $v) {
if ( $v->created_time >= $end_time && $v->created_time <= $time ) {
$has_records = true;
if ( $v->log_method == 'GET' ) {
} elseif ( $v->log_method == 'POST' ) {
++$default_data['data_lists']['POST'][$i];
} elseif ( $v->log_method == 'PUT' ) {
++$default_data['data_lists']['PUT'][$i];
} elseif ( $v->log_method == 'DELETE' ) {
++$default_data['data_lists']['DELETE'][$i];
}
}
}
}
$time = $end_time;
}
if ( !$has_records ) {
Cache::put($time_interval_key, $time_interval * 2);
}
return (array)$default_data;
});
}
public function updateAdmin($request)
{
$update['admin_name'] = $request->input('admin_name');
$password = $request->input('password', '');
if ( !empty($password) ) {
$update['password'] = $password;
}
return $request->user()->update($update);
}
public function versionLogs()
{
return Version::getInstance()->select('version_name', 'version_number', 'version_content', 'publish_date')->orderBy('version_sort', 'DESC')->orderBy('publish_date', 'DESC')->orderBy('version_id', 'ASC')->get();
}
public function getServerStatus()
{
$systemInfo = new SystemInfo;
$disk_info = $systemInfo->getDisk();
$disk = [
'chart_legend' => ['used', 'free'],
'chart_series' => [
[
'name' => 'used',
'value' => $disk_info['used'],
],
[
'name' => 'free',
'value' => $disk_info['free'],
],
],
];
$memory_info = $systemInfo->getMemory();
$memory = [
'chart_legend' => ['used', 'free', 'buffer_cache'],
'chart_series' => [
[
'name' => 'used',
'value' => $memory_info['used'],
],
[
'name' => 'free',
'value' => $memory_info['free'],
],
[
'name' => 'buffer_cache',
'value' => $memory_info['buffer_cache'],
],
],
];
$cpu_info = $systemInfo->getCpu();
$cpu = [
'chart_legend' => ['used', 'free'],
'chart_series' => [
[
'name' => 'used',
'value' => $cpu_info['usage_ratio'],
],
[
'name' => 'free',
'value' => 100 - $cpu_info['usage_ratio'],
],
],
];
return [
'php_os' => PHP_OS, 'system' => is_windows() ? 1 : 0, 'disk' => $disk, 'disk_info' => $disk_info, 'memory' => $memory,
'memory_info' => $memory_info, 'cpu' => $cpu,
];
}
}