Skip to content
Snippets Groups Projects
Commit 88b2b499 authored by Thibault Debatty's avatar Thibault Debatty
Browse files

fix case where server has no report summary

parent 7b664f9d
No related branches found
No related tags found
No related merge requests found
Pipeline #13349 failed
...@@ -6,6 +6,7 @@ use App\Jobs\RunAgent; ...@@ -6,6 +6,7 @@ use App\Jobs\RunAgent;
use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\File;
use Illuminate\Support\LazyCollection; use Illuminate\Support\LazyCollection;
use Illuminate\Support\Collection;
use Symfony\Component\Finder\SplFileInfo; use Symfony\Component\Finder\SplFileInfo;
/** /**
...@@ -125,7 +126,7 @@ class AgentScheduler ...@@ -125,7 +126,7 @@ class AgentScheduler
public function notifyReport(Report $report) public function notifyReport(Report $report)
{ {
$server = $report->server; $server = $report->server;
$reports = $server->lastReports(); $reports = $this->lastReportsOf($server);
$summary = new ReportSummary(); $summary = new ReportSummary();
$summary->time = time(); $summary->time = time();
...@@ -134,4 +135,28 @@ class AgentScheduler ...@@ -134,4 +135,28 @@ class AgentScheduler
$summary->status_code = Status::max($reports)->code(); $summary->status_code = Status::max($reports)->code();
$summary->save(); $summary->save();
} }
/**
* Get the last report for each label.
*
* @return Collection<Report> last report for each label
*/
public function lastReportsOf(Server $server) : Collection
{
$reports = new Collection();
foreach ($this->agentLabel() as $label) {
$reports->push($this->lastReportOf($server, $label));
}
return $reports->filter();
}
public function lastReportOf(Server $server, string $label) : ?Report
{
$start = time() - 24 * 3600;
return $server->reports()
->where("label", $label)
->where("time", ">", $start)
->orderByDesc("id")
->first();
}
} }
...@@ -54,4 +54,16 @@ class ReportSummary extends Model ...@@ -54,4 +54,16 @@ class ReportSummary extends Model
{ {
return Carbon::createFromTimestamp($this->time); return Carbon::createFromTimestamp($this->time);
} }
public static function default(Server $server) : ReportSummary
{
$summary = new ReportSummary();
$summary->server = $server;
$summary->server_id = $server->id;
$summary->time = 0;
$summary->status_code = -1;
$summary->reports = [];
return $summary;
}
} }
...@@ -105,13 +105,6 @@ class Server extends Model ...@@ -105,13 +105,6 @@ class Server extends Model
->get(); ->get();
} }
public function hasData() : bool
{
return true;
//return false;
//return $this->lastRecord() != null;
}
public function info() : ServerInfo public function info() : ServerInfo
{ {
if (is_null($this->info)) { if (is_null($this->info)) {
...@@ -133,6 +126,7 @@ class Server extends Model ...@@ -133,6 +126,7 @@ class Server extends Model
public function getSensorsNOK() : Collection public function getSensorsNOK() : Collection
{ {
$summary = $this->lastSummary(); $summary = $this->lastSummary();
if ($summary->status_code == 0) { if ($summary->status_code == 0) {
return new Collection(); return new Collection();
} }
...@@ -150,30 +144,6 @@ class Server extends Model ...@@ -150,30 +144,6 @@ class Server extends Model
} }
/**
* Get the last report for each label.
*
* @return Collection<Report> last report for each label
*/
public function lastReports()
{
$reports = new Collection();
foreach (AgentScheduler::get()->agentLabel() as $label) {
$reports->push($this->lastReport($label));
}
return $reports->filter();
}
public function lastReport(string $label) : ?Report
{
$start = time() - 24 * 3600;
return $this->reports()
->where("label", $label)
->where("time", ">", $start)
->orderByDesc("id")
->first();
}
public function summaries() public function summaries()
{ {
return $this->hasMany(ReportSummary::class); return $this->hasMany(ReportSummary::class);
...@@ -183,10 +153,18 @@ class Server extends Model ...@@ -183,10 +153,18 @@ class Server extends Model
public function lastSummary() : ReportSummary public function lastSummary() : ReportSummary
{ {
if (is_null($this->last_summary)) { if (! is_null($this->last_summary)) {
$this->last_summary = $this->summaries()->orderByDesc("id")->first(); return $this->last_summary;
}
// try to fetch from DB
$summary = $this->summaries()->orderByDesc("id")->first();
if (! is_null($summary)) {
$this->last_summary = $summary;
return $this->last_summary;
} }
$this->last_summary = ReportSummary::default($this);
return $this->last_summary; return $this->last_summary;
} }
......
...@@ -17,7 +17,6 @@ window.monitorServerToken = "{{ $server->read_token }}"; ...@@ -17,7 +17,6 @@ window.monitorServerToken = "{{ $server->read_token }}";
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
@if ($server->hasData())
<p> <p>
{!! $server->status()->badge() !!} {!! $server->status()->badge() !!}
{{ $server->lastSummary()->time()->toDateTimeString() }} {{ $server->lastSummary()->time()->toDateTimeString() }}
...@@ -45,11 +44,6 @@ window.monitorServerToken = "{{ $server->read_token }}"; ...@@ -45,11 +44,6 @@ window.monitorServerToken = "{{ $server->read_token }}";
</p> </p>
<p>Uptime: {{ $server->info()->uptime() }}</p> <p>Uptime: {{ $server->info()->uptime() }}</p>
@else
<p>No information to show for now...</p>
@endif
</div> </div>
</div> </div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment