Files
biiproject-kit-v1/app/Services/AI/LogAnalysisService.php
T

87 lines
2.5 KiB
PHP

<?php
/**
* ============================================================
*
* @project biiproject
*
* @author Andika Debi Putra
*
* @email andikadebiputra@gmail.com
*
* @website https://biiproject.com
*
* @copyright Copyright (c) 2026 Andika Debi Putra
* @license Proprietary - All Rights Reserved
*
* @version 1.0.0
*
* @created 2026-05-01
* ============================================================
*/
namespace App\Services\AI;
use Illuminate\Support\Facades\Cache;
use Spatie\Activitylog\Models\Activity;
class LogAnalysisService
{
public function __construct(
protected AiService $aiService
) {}
/**
* Analyze recent activity logs using AI.
*/
public function analyzeRecentLogs(int $limit = 50): string
{
if (! get_setting('ai_enabled', false)) {
return 'AI Service is currently disabled in system settings.';
}
$logs = Activity::with('causer')
->latest()
->take($limit)
->get()
->map(function ($log) {
return [
'time' => $log->created_at->toDateTimeString(),
'user' => $log->causer ? $log->causer->name : 'System',
'action' => $log->description,
'subject' => $log->subject_type ? class_basename($log->subject_type) : 'N/A',
];
})
->toArray();
if (empty($logs)) {
return 'No activity logs found to analyze.';
}
$prompt = 'As a Security and Operational Auditor, analyze the following system activity logs and provide:
1. A brief summary of recent operations.
2. Security insights (detect any suspicious patterns or potential privilege abuse).
3. Operational health status.
4. Recommendations (if any).
FORMAT: Use Markdown with bold headers. Be concise and professional.
LOGS DATA:
'.json_encode($logs, JSON_PRETTY_PRINT);
try {
return Cache::remember('ai_log_analysis_result', 3600, function () use ($prompt) {
$result = $this->aiService->provider()->generate($prompt);
if (isset($result['success']) && $result['success']) {
return $result['response'] ?? 'AI failed to generate analysis.';
}
return 'AI Provider Error: '.($result['error'] ?? 'Unknown error');
});
} catch (\Exception $e) {
return 'Error during AI analysis: '.$e->getMessage();
}
}
}