Compare commits

...

2 Commits

Author SHA1 Message Date
7783f4dc18 Add filearea stats
All checks were successful
Create Docker Image / Build Docker Image (x86_64) (push) Successful in 38s
Create Docker Image / Build Docker Image (arm64) (push) Successful in 1m48s
Create Docker Image / Final Docker Image Manifest (push) Successful in 9s
2024-10-23 21:17:38 +11:00
9c7d7bf932 Performance updates for domain/view 2024-10-23 20:46:49 +11:00
4 changed files with 58 additions and 11 deletions

View File

@ -115,7 +115,7 @@ class DomainController extends Controller
if (! $o->public && ! Gate::check('admin',$o)) if (! $o->public && ! Gate::check('admin',$o))
abort(404); abort(404);
$o->load(['zones.system','zones.domain','zones.addresses.nodes_hub','zones.addresses.echomail_from']); $o->load(['zones.system','zones.domain','zones.addresses.nodes_hub','zones.addresses']);
return view('domain.view') return view('domain.view')
->with('o',$o); ->with('o',$o);

View File

@ -124,6 +124,25 @@ class Domain extends Model
}); });
} }
public function filearea_stats()
{
$dt = Carbon::now()->startOfday();
$case = CaseBuilder::whenRaw("datetime >= '?'",$dt->subDays(7)->format('Y-m-d'))->thenRaw("'week'")
->whenRaw("datetime >= '?'",$dt->subMonth()->format('Y-m-d'))->thenRaw("'month'")
->elseRaw("'all'");
return Filearea::select(['fileareas.id','fileareas.name','description','active',DB::raw('count(files.id) AS count'),DB::raw('min(datetime) as first_file'),DB::raw('max(datetime) as last_file')])
->selectRaw($case->toRaw().' AS stats')
->join('files',['files.filearea_id'=>'fileareas.id'],NULL,NULL,'left outer')
->where('domain_id',$this->id)
->groupBy('fileareas.id')
->groupBy('fileareas.name')
->groupBy('stats')
->orderBy('fileareas.name')
->orderBy('last_file','DESC')
->get();
}
/** /**
* Determine if this zone is managed by this host * Determine if this zone is managed by this host
* *

View File

@ -11,6 +11,11 @@ class Filearea extends Model
{ {
use SoftDeletes,ScopeActive,AreaSecurity; use SoftDeletes,ScopeActive,AreaSecurity;
protected $casts = [
'first_file' => 'datetime:Y-m-d H:i:s',
'last_file' => 'datetime:Y-m-d H:i:s',
];
protected $fillable = [ protected $fillable = [
'name', 'name',
]; ];

View File

@ -58,10 +58,10 @@
<tbody> <tbody>
@foreach ($o->echoarea_stats()->groupBy('id') as $oo) @foreach ($o->echoarea_stats()->groupBy('id') as $oo)
<tr> <tr>
<td style="width: 15%;"><a href="{{ url('echoarea/addedit',[($x=$oo->first())->id]) }}">{{ $x->name }}</a></td> <td style="width: 10%;"><a href="{{ url('echoarea/addedit',[($x=$oo->first())->id]) }}">{{ $x->name }}</a></td>
<td>{{ $x->description }}</td> <td>{{ $x->description }}</td>
<td style="width: 15%;">{{ ($xx=$oo->min('first_message')) ? $xx->format('Y-m-d H:i') : '-' }}</td> <td>{{ ($xx=$oo->min('first_message')) ? $xx->format('Y-m-d H:i') : '-' }}</td>
<td style="width: 15%;">{{ $x->last_message ? $x->last_message->format('Y-m-d H:i') : '-' }}</td> <td>{{ $x->last_message ? $x->last_message->format('Y-m-d H:i') : '-' }}</td>
<td>{{ $x->active ? 'Active' : 'Archive' }}</td> <td>{{ $x->active ? 'Active' : 'Archive' }}</td>
<td class="text-end">{{ number_format($oo->where('stats','day')->pop()?->count) }}</td> <td class="text-end">{{ number_format($oo->where('stats','day')->pop()?->count) }}</td>
<td class="text-end">{{ number_format($oo->where('stats','week')->pop()?->count) }}</td> <td class="text-end">{{ number_format($oo->where('stats','week')->pop()?->count) }}</td>
@ -88,21 +88,35 @@
<div class="accordion-body"> <div class="accordion-body">
@if($o->fileareas->count()) @if($o->fileareas->count())
<p>This network provides the following File areas:</p> <p>This network provides the following File areas:</p>
<table class="table monotable" id="filearea"> <table class="table monotable w-100" id="filearea">
<thead> <thead>
<tr>
<th class="w-75" colspan="4"></th>
<th colspan="4" class="text-center">Files</th>
</tr>
<tr> <tr>
<th>Filearea</th> <th>Filearea</th>
<th>Description</th> <th>Description</th>
<th>Last File Sent</th> <th>First File</th>
<th>Last File</th>
<th>Area Active</th>
<th class="text-end">Week</th>
<th class="text-end">Month</th>
<th class="text-end">Total</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@foreach ($o->fileareas->sortBy('name') as $oo) @foreach ($o->filearea_stats()->groupBy('id') as $oo)
<tr> <tr>
<td style="width: 15%;"><a href="{{ url('filearea/addedit',[$oo->id]) }}">{{ $oo->name }}</a></td> <td style="width: 10%;"><a href="{{ url('echoarea/addedit',[($x=$oo->first())->id]) }}">{{ $x->name }}</a></td>
<td>{{ $oo->description }}</td> <td>{{ $x->description }}</td>
<td style="width: 15%;">-</td> <td>{{ ($xx=$oo->min('first_file')) ? $xx->format('Y-m-d H:i') : '-' }}</td>
<td>{{ $x->last_file ? $x->last_file->format('Y-m-d H:i') : '-' }}</td>
<td>{{ $x->active ? 'Active' : 'Archive' }}</td>
<td class="text-end">{{ number_format($oo->where('stats','week')->pop()?->count) }}</td>
<td class="text-end">{{ number_format($oo->where('stats','month')->pop()?->count) }}</td>
<td class="text-end">{{ number_format($oo->sum('count')) }}</td>
</tr> </tr>
@endforeach @endforeach
</tbody> </tbody>
@ -247,7 +261,16 @@
conditionalPaging: { conditionalPaging: {
style: 'fade', style: 'fade',
speed: 500 // optional speed: 500 // optional
} },
rowGroup: {
dataSrc: [4],
},
columnDefs: [
{
targets: [4],
visible: false,
},
],
}); });
$('#system').DataTable({ $('#system').DataTable({