diff --git a/app/AgentScheduler.php b/app/AgentScheduler.php index 8ec0514d0a71d6187570aa558fea02ba010ed5a6..47f93a8ab8c6246a3b813bd29609bcaf60c19286 100644 --- a/app/AgentScheduler.php +++ b/app/AgentScheduler.php @@ -118,7 +118,7 @@ class AgentScheduler } foreach ($this->triggers[$trigger_label] as $agent) { - RunAgent::dispatch($agent, $record->server); + RunAgent::dispatch($agent, $record); } } } diff --git a/app/Http/Controllers/RecordController.php b/app/Http/Controllers/RecordController.php new file mode 100644 index 0000000000000000000000000000000000000000..0ec024abdf13b3bdc7e36499ac71a291069b14ef --- /dev/null +++ b/app/Http/Controllers/RecordController.php @@ -0,0 +1,13 @@ +<?php + +namespace App\Http\Controllers; + +use App\Record; + +class RecordController extends Controller +{ + public function show(Record $record) + { + return view("record.show")->with(["record" => $record]); + } +} diff --git a/app/Jobs/RunAgent.php b/app/Jobs/RunAgent.php index 1d32e8db325b79d51ce6d660314028f66646cfd5..b2f3fb61b93048265e13ce85f574b36ca8255b52 100644 --- a/app/Jobs/RunAgent.php +++ b/app/Jobs/RunAgent.php @@ -3,7 +3,7 @@ namespace App\Jobs; use App\Sensor; -use App\Server; +use App\Record; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -24,19 +24,19 @@ class RunAgent implements ShouldQueue /** * - * @var Server + * @var Record */ - public $server; + public $record; /** * Create a new job instance. * * @return void */ - public function __construct(Sensor $agent, Server $server) + public function __construct(Sensor $agent, Record $record) { $this->agent = $agent; - $this->server = $server; + $this->record = $record; } /** @@ -47,12 +47,16 @@ class RunAgent implements ShouldQueue public function handle() { $trigger_label = $this->agent->config()->trigger_label; - $records = $this->server->lastRecords($trigger_label); + $record = $this->record; + $server = $this->record->server; - $report = $this->agent->analyze($records, $this->server->info()); + $records = $server->lastRecords($trigger_label); + + $report = $this->agent->analyze($records, $server->info()); $report->time = time(); - $report->server_id = $this->server->id; + $report->server_id = $server->id; $report->label = $this->agent->config()->label; + $report->record_id = $record->id; $report->save(); } } diff --git a/app/Record.php b/app/Record.php index d12fac44a6763efc52c2d4cada1b8a686a4877b4..d3713c7b4b4aa55a215407190abc7f87d77ef7d9 100644 --- a/app/Record.php +++ b/app/Record.php @@ -2,6 +2,7 @@ namespace App; +use Carbon\Carbon; use Illuminate\Database\Eloquent\Model; /** @@ -30,4 +31,9 @@ class Record extends Model return false; } + + public function time() : Carbon + { + return Carbon::createFromTimestamp($this->time); + } } diff --git a/app/Report.php b/app/Report.php index 030280ae508044de30c807b36025e0cc3e28de4c..d17cdf54bcb3cbb5d5fab737f4209b29f6cc0eb8 100644 --- a/app/Report.php +++ b/app/Report.php @@ -33,6 +33,11 @@ class Report extends Model implements HasStatus parent::__construct($attributes); } + public function record() + { + return $this->belongsTo(Record::class); + } + public function setTitle(string $title) : Report { $this->title = $title; diff --git a/app/ServerInfo.php b/app/ServerInfo.php index 266453466c38f10196874316df2dda466df2cfe8..79db2e8287cdfc98671a138d3823810aa5806d9a 100644 --- a/app/ServerInfo.php +++ b/app/ServerInfo.php @@ -194,7 +194,7 @@ class ServerInfo { $record = $this->server->lastRecord("version"); if (is_null($record)) { - return new Carbon(); + return Carbon::createFromTimestamp(0); } return Carbon::createFromTimestamp($record->time); diff --git a/database/migrations/2024_02_18_144251_reports_add_record_id.php b/database/migrations/2024_02_18_144251_reports_add_record_id.php new file mode 100644 index 0000000000000000000000000000000000000000..6772ff388d398d0b51638d205cef47da80420dcb --- /dev/null +++ b/database/migrations/2024_02_18_144251_reports_add_record_id.php @@ -0,0 +1,35 @@ +<?php + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +class ReportsAddRecordId extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::table('reports', function (Blueprint $table) { + $table->unsignedBigInteger("record_id")->nullable(); + + $table->foreign('record_id')->references('id')->on('records') + ->onDelete("cascade"); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('reports', function (Blueprint $table) { + // + }); + } +} diff --git a/resources/views/record/show.blade.php b/resources/views/record/show.blade.php new file mode 100644 index 0000000000000000000000000000000000000000..2a3c8ed470ce1262595656f9b83d43394298150f --- /dev/null +++ b/resources/views/record/show.blade.php @@ -0,0 +1,25 @@ +@extends('layouts.app') + +@section('content') +<div class="container"> + + <p> + <span class="badge badge-secondary">#{{ $record->id }}</span> + <span class="badge badge-primary">{{ $record->label }}</span> + <a class="badge badge-primary" + href="{{ action("ServerController@show", ["server" => $record->server]) }}"> + <i class="fas fa-desktop"></i> {{ $record->server->name }} + </a> + <span class="badge badge-secondary"> + <i class="far fa-clock"></i> {{ $record->time() }} + </span> + </p> + + <div class="card"> + <div class="card-body"> + <pre><code class="small">{{ $record->data }}</code></pre> + </div> + </div> + +</div> +@endsection diff --git a/resources/views/server/show.blade.php b/resources/views/server/show.blade.php index 1003b405304c3c6d4612cb016f530617fc9f830e..1caadef4799d97024526db24e6c5743961472f3b 100644 --- a/resources/views/server/show.blade.php +++ b/resources/views/server/show.blade.php @@ -59,6 +59,10 @@ window.monitorServerToken = "{{ $server->read_token }}"; {{ $report->title() }} <div class="float-right"> + <a class="badge badge-secondary" + href="{{ action("RecordController@show", ["record" => $report->record]) }}"> + <i class="fas fa-search"></i> + </a> {!! $report->status()->badge() !!} </div> </div> diff --git a/routes/web.php b/routes/web.php index f1b5f2abd3932ddb0f42dd26e69bd1e7d2650615..a8fcb16947e637dbecf173a5d4fb6200b8af1e0f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -55,3 +55,4 @@ Route::get( Route::resource('app/organizations', 'OrganizationController'); Route::resource("app/organizations.user", "OrganizationUserController")->only(["create", "store", "destroy"]); Route::resource('app/servers', 'ServerController')->except(["index"]); +Route::get("app/records/{record}", "RecordController@show");