Files
FendxPHP/app/Job/CleanupJob.php
Lawson 2782d765fb feat(database): 添加用户角色权限系统及相关监控功能
- 创建用户表(users)包含基本信息和认证字段
- 创建角色表(roles)用于权限控制
- 创建权限表(permissions)定义系统权限
- 创建用户角色关联表(user_roles)建立用户与角色关系
- 创建角色权限关联表(role_permissions)建立角色与权限关系
- 创建迁移记录表(migrations)追踪数据库变更
- 添加AdminController提供管理员面板功能
- 实现系统监控、配置管理、缓存清理等功能
- 添加AOP切面编程支持的各种通知类型
- 实现告警管理AlertManager支持多渠道告警
- 添加文档注解接口规范
2026-04-08 17:00:28 +08:00

103 lines
2.6 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Job;
use Fendx\Core\Annotation\Service;
use Fendx\Job\Annotation\Scheduled;
use Fendx\Log\Logger;
#[Service]
class CleanupJob
{
#[Scheduled('0 2 * * *', 'Daily cleanup at 2 AM')]
public function dailyCleanup(): void
{
Logger::info('Starting daily cleanup job');
// 清理过期日志文件
$this->cleanupOldLogs();
// 清理临时文件
$this->cleanupTempFiles();
// 清理过期缓存
$this->cleanupExpiredCache();
Logger::info('Daily cleanup job completed');
}
#[Scheduled('*/5 * * * *', 'Every 5 minutes')]
public function healthCheck(): void
{
// 检查系统健康状态
$healthy = $this->checkSystemHealth();
if (!$healthy) {
Logger::warning('System health check failed');
}
}
private function cleanupOldLogs(): void
{
$logDir = dirname(__DIR__, 2) . '/runtime/logs';
$maxAge = 30 * 24 * 60 * 60; // 30天
if (is_dir($logDir)) {
$files = glob($logDir . '/*.log');
foreach ($files as $file) {
if (filemtime($file) < time() - $maxAge) {
unlink($file);
Logger::info("Deleted old log file: $file");
}
}
}
}
private function cleanupTempFiles(): void
{
$tempDir = dirname(__DIR__, 2) . '/runtime/temp';
$maxAge = 24 * 60 * 60; // 24小时
if (is_dir($tempDir)) {
$files = glob($tempDir . '/*');
foreach ($files as $file) {
if (is_file($file) && filemtime($file) < time() - $maxAge) {
unlink($file);
Logger::info("Deleted temp file: $file");
}
}
}
}
private function cleanupExpiredCache(): void
{
// 这里可以添加Redis缓存清理逻辑
Logger::info('Cache cleanup completed');
}
private function checkSystemHealth(): bool
{
// 检查数据库连接
try {
$pdo = new \PDO('mysql:host=127.0.0.1;dbname=fendx', 'root', '');
$pdo->query('SELECT 1');
} catch (\Exception $e) {
return false;
}
// 检查Redis连接
try {
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->ping();
} catch (\Exception $e) {
return false;
}
return true;
}
}