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;
use Illuminate\Support\Facades\File;
use Illuminate\Support\LazyCollection;
use Illuminate\Support\Collection;
use Symfony\Component\Finder\SplFileInfo;
/**
......@@ -125,7 +126,7 @@ class AgentScheduler
public function notifyReport(Report $report)
{
$server = $report->server;
$reports = $server->lastReports();
$reports = $this->lastReportsOf($server);
$summary = new ReportSummary();
$summary->time = time();
......@@ -134,4 +135,28 @@ class AgentScheduler
$summary->status_code = Status::max($reports)->code();
$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
{
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
->get();
}
public function hasData() : bool
{
return true;
//return false;
//return $this->lastRecord() != null;
}
public function info() : ServerInfo
{
if (is_null($this->info)) {
......@@ -133,6 +126,7 @@ class Server extends Model
public function getSensorsNOK() : Collection
{
$summary = $this->lastSummary();
if ($summary->status_code == 0) {
return new Collection();
}
......@@ -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()
{
return $this->hasMany(ReportSummary::class);
......@@ -183,10 +153,18 @@ class Server extends Model
public function lastSummary() : ReportSummary
{
if (is_null($this->last_summary)) {
$this->last_summary = $this->summaries()->orderByDesc("id")->first();
if (! is_null($this->last_summary)) {
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;
}
......
......@@ -17,7 +17,6 @@ window.monitorServerToken = "{{ $server->read_token }}";
<div class="card">
<div class="card-body">
@if ($server->hasData())
<p>
{!! $server->status()->badge() !!}
{{ $server->lastSummary()->time()->toDateTimeString() }}
......@@ -45,11 +44,6 @@ window.monitorServerToken = "{{ $server->read_token }}";
</p>
<p>Uptime: {{ $server->info()->uptime() }}</p>
@else
<p>No information to show for now...</p>
@endif
</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