Added in network graph on about screen
This commit is contained in:
parent
0be4ac0ad5
commit
b333d38095
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
@ -53,6 +54,21 @@ class Domain extends Model
|
|||||||
|
|
||||||
/* METHODS */
|
/* METHODS */
|
||||||
|
|
||||||
|
public function daily_area_stats(): Collection
|
||||||
|
{
|
||||||
|
if (! $this->echoareas->count())
|
||||||
|
return collect();
|
||||||
|
|
||||||
|
$where = ['echoarea_id'=>$this->echoareas->pluck('id')->toArray()];
|
||||||
|
|
||||||
|
$echostats = Echomail::countGroupBy(['datetime',['datetime'=>'%Y-%m-%d']],$where);
|
||||||
|
|
||||||
|
return $echostats
|
||||||
|
->sortBy(function($item) { return $item->id->datetime; })
|
||||||
|
->map(function($item) { return ['x'=>Carbon::createFromFormat('Y-m-d',$item->id->datetime)->timestamp*1000,'y'=>$item->count]; })
|
||||||
|
->values();
|
||||||
|
}
|
||||||
|
|
||||||
public function stats(System $o=NULL): Collection
|
public function stats(System $o=NULL): Collection
|
||||||
{
|
{
|
||||||
if (! $this->echoareas->count())
|
if (! $this->echoareas->count())
|
||||||
@ -63,7 +79,7 @@ class Domain extends Model
|
|||||||
if ($o)
|
if ($o)
|
||||||
$where->put('fftn_id',$o->addresses()->pluck('id'));
|
$where->put('fftn_id',$o->addresses()->pluck('id'));
|
||||||
|
|
||||||
$echostats = Echomail::countGroupBy('echoarea_id',$where->toArray());
|
$echostats = Echomail::countGroupBy(['echoarea_id'],$where->toArray());
|
||||||
|
|
||||||
return $this->echoareas->map(function($item) use ($echostats) {
|
return $this->echoareas->map(function($item) use ($echostats) {
|
||||||
$stats = $echostats->filter(function($x) use ($item) {
|
$stats = $echostats->filter(function($x) use ($item) {
|
||||||
|
@ -45,7 +45,7 @@ trait UseMongo
|
|||||||
|
|
||||||
/* METHODS */
|
/* METHODS */
|
||||||
|
|
||||||
public static function countGroupBy(string $field,array $where=[]): Collection
|
public static function countGroupBy(array $fields,array $where=[]): Collection
|
||||||
{
|
{
|
||||||
$query = collect();
|
$query = collect();
|
||||||
|
|
||||||
@ -64,9 +64,20 @@ trait UseMongo
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$gb = collect();
|
||||||
|
foreach ($fields as $field)
|
||||||
|
if (is_array($field)) {
|
||||||
|
foreach ($field as $k=>$v) {
|
||||||
|
$gb->put('datetime',['$dateToString'=>['format'=>$v,'date'=>'$'.$k]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$gb->put($field,'$'.$field);
|
||||||
|
}
|
||||||
|
|
||||||
$query->push([
|
$query->push([
|
||||||
'$group' => [
|
'$group' => [
|
||||||
'_id' => [$field=>'$'.$field],
|
'_id' => $gb->toArray(),
|
||||||
'count' => ['$sum' => 1]
|
'count' => ['$sum' => 1]
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
<h2>About the FTN Clearing House</h2>
|
<h2>About the FTN Clearing House</h2>
|
||||||
|
|
||||||
<p>Welcome to the FTN Clearing House.</p>
|
<p>Welcome to the FTN Clearing House.</p>
|
||||||
|
|
||||||
|
<div style="float:right; width: 50%; height: 20em;" id="network_traffic"></div>
|
||||||
<p>The FTN Clearing House (FCH) is both a FTN Mailer and FTN message tosser, where mail is stored internally in a DB. FCH can also hatch and toss files into FTN networks for both up/downstream nodes.</p>
|
<p>The FTN Clearing House (FCH) is both a FTN Mailer and FTN message tosser, where mail is stored internally in a DB. FCH can also hatch and toss files into FTN networks for both up/downstream nodes.</p>
|
||||||
<p>It was created as an idea to bring modern technology and capabilities to a legacy computing network that existed in the 1970's, 1980's and 1990's (before the Internet basically).</p>
|
<p>It was created as an idea to bring modern technology and capabilities to a legacy computing network that existed in the 1970's, 1980's and 1990's (before the Internet basically).</p>
|
||||||
|
|
||||||
@ -63,3 +65,66 @@ If you have more than 1 BBS, then the Clearing House can receive all your mail f
|
|||||||
<p>This web UI has been inspired by the great work at <a href="https://int10h.org">int10h.org</a>. If you have ideas to make it even better, please send me a message, or submit your comments in <a href="https://dev.leenooks.net/bbs/clrghouz">gitlab</a></p>
|
<p>This web UI has been inspired by the great work at <a href="https://int10h.org">int10h.org</a>. If you have ideas to make it even better, please send me a message, or submit your comments in <a href="https://dev.leenooks.net/bbs/clrghouz">gitlab</a></p>
|
||||||
<span class="float-end"><strong class="highlight">clrghouz</strong> <small>[<strong class="gray">{{ gethostname() }}</strong>@if (File::exists('../VERSION')) @ <strong class="success">{{ chop(File::get('../VERSION')) }}</strong>@endif]</small></span>
|
<span class="float-end"><strong class="highlight">clrghouz</strong> <small>[<strong class="gray">{{ gethostname() }}</strong>@if (File::exists('../VERSION')) @ <strong class="success">{{ chop(File::get('../VERSION')) }}</strong>@endif]</small></span>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
@section('page-scripts')
|
||||||
|
@js('highcharts')
|
||||||
|
|
||||||
|
<script>
|
||||||
|
Highcharts.chart('network_traffic', {
|
||||||
|
chart: {
|
||||||
|
type: 'spline',
|
||||||
|
zoomType: 'x',
|
||||||
|
resetZoomButton: {
|
||||||
|
position: {
|
||||||
|
x: 0,
|
||||||
|
y: -40,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
credits: {
|
||||||
|
enabled: false
|
||||||
|
},
|
||||||
|
exporting: {
|
||||||
|
buttons: false
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
text: 'FTN Network Traffic'
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'datetime',
|
||||||
|
title: {
|
||||||
|
text: 'Time'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
title: {
|
||||||
|
text: 'Echomail'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
symbolWidth: 40
|
||||||
|
},
|
||||||
|
plotOptions: {
|
||||||
|
series: {
|
||||||
|
point: {
|
||||||
|
events: {
|
||||||
|
click: function () {
|
||||||
|
//window.location.href = this.series.options.website;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cursor: 'pointer'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
@foreach (\App\Models\Domain::active()->public()->get() as $o)
|
||||||
|
{
|
||||||
|
name: '{{ $o->name }}',
|
||||||
|
data: {!! $o->daily_area_stats() !!},
|
||||||
|
dashStyle: 'ShortDot',
|
||||||
|
},
|
||||||
|
@endforeach
|
||||||
|
],
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@append
|
@ -106,6 +106,9 @@
|
|||||||
credits: {
|
credits: {
|
||||||
enabled: false
|
enabled: false
|
||||||
},
|
},
|
||||||
|
exporting: {
|
||||||
|
buttons: false
|
||||||
|
},
|
||||||
title: {
|
title: {
|
||||||
text: 'Echomail Statistics'
|
text: 'Echomail Statistics'
|
||||||
},
|
},
|
||||||
@ -147,10 +150,6 @@
|
|||||||
series: {
|
series: {
|
||||||
borderWidth: 0,
|
borderWidth: 0,
|
||||||
grouping: false,
|
grouping: false,
|
||||||
xdataLabels: {
|
|
||||||
enabled: false,
|
|
||||||
format: ''//'{point.y:.0f}'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
@ -190,6 +189,12 @@
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
drilldown: {
|
drilldown: {
|
||||||
|
drillUpButton: {
|
||||||
|
position: {
|
||||||
|
x: 0,
|
||||||
|
y: -50,
|
||||||
|
}
|
||||||
|
},
|
||||||
series: [
|
series: [
|
||||||
@foreach($o->addresses->pluck('zone.domain')->sortBy('name') as $oo)
|
@foreach($o->addresses->pluck('zone.domain')->sortBy('name') as $oo)
|
||||||
@php($x = $oo->stats())
|
@php($x = $oo->stats())
|
||||||
|
Loading…
Reference in New Issue
Block a user