Kaydet (Commit) 7f53c5aa authored tarafından mertcelen's avatar mertcelen

Server tracking added.

üst da0096a8
......@@ -9,6 +9,7 @@ use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\DB;
use App\Models\CronMail;
use App\Jobs\CronEmailJob;
use App\Models\MonitorServer;
use Illuminate\Contracts\Bus\Dispatcher;
use Carbon\Carbon;
......@@ -135,6 +136,21 @@ class Kernel extends ConsoleKernel
})
->everyMinute()
->name('Mail Check');
// Server monitoring
$schedule
->call(function () {
$servers = MonitorServer::all();
foreach($servers as $server){
$online = checkPort($server->ip_address,$server->port);
$server->update([
"online" => $online,
"last_checked" => Carbon::now()
]);
}
})
->everyMinute()
->name('Server Monitoring');
}
/**
......
<?php
namespace App\Http\Controllers;
use App\Http\Middleware\Server;
use Illuminate\Http\Request;
use App\Models\MonitorServer;
use App\Models\UserMonitors;
use Carbon\Carbon;
class ServerMonitorController extends Controller
{
public function add()
{
$obj = MonitorServer::where([
'ip_address' => request('ip_address'),
'port' => request('port')
])->first();
if(!$obj){
$status = checkPort(request('ip_address'),request('port'));
$obj = new MonitorServer([
'ip_address' => request('ip_address'),
'port' => request('port'),
'online' => $status,
'last_checked' => Carbon::now()
]);
$obj->save();
}
UserMonitors::create([
"name" => request('name'),
"server_monitor_id" => $obj->id,
"user_id" => user()->id
]);
return respond("Başarıyla eklendi!");
}
public function remove()
{
//Find Object.
$obj = UserMonitors::find(request('server_monitor_id'));
if(!$obj){
return respond("Bu sunucu takibi bulunamadı!",201);
}
//Let's search if this is the only occurence of tracking.
$monitors = UserMonitors::where('server_monitor_id',$obj->server_monitor_id)->get();
if($monitors->count() == 1){
MonitorServer::find($obj->server_monitor_id)->delete();
}
$obj->delete();
return respond("Sunucu takibi başarıyla silindi!");
}
public function refresh()
{
$obj = UserMonitors::find(request('server_monitor_id'));
if(!$obj){
return respond("Bu sunucu takibi bulunamadı!",201);
}
$server = MonitorServer::find($obj->server_monitor_id);
if(!$server){
return respond("Bu sunucu takibi bulunamadı!",201);
}
$status = checkPort($server->ip_address,$server->port);
$server->update([
"online" => $status,
"last_checked" => Carbon::now()
]);
return respond("Başarıyla yenilendi!");
}
public function list()
{
$servers = UserMonitors::where('user_id', user()->id)->get()->map(function($server){
$obj = MonitorServer::find($server->server_monitor_id);
if(!$obj){
return $server;
}
$server->online = $obj->online;
$server->last_checked = $obj->last_checked;
$server->ip_address = $obj->ip_address;
$server->port = $obj->port;
return $server;
});
return magicView('monitor.index',[
"monitor_servers" => $servers,
"servers" => servers()
]);
}
public function get()
{
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class MonitorServer extends Model
{
use UsesUuid;
protected $fillable = [
"last_checked", "online", "port", "ip_address"
];
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class UserMonitors extends Model
{
use UsesUuid;
protected $fillable = [
"user_id", "server_monitor_id", "name"
];
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMonitorServersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('monitor_servers', function (Blueprint $table) {
$table->uuid('id');
$table->string('ip_address');
$table->integer('port');
$table->boolean('online');
$table->timestamp('last_checked');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('monitor_servers');
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUserMonitorsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('user_monitors', function (Blueprint $table) {
$table->uuid('id');
$table->string('name');
$table->uuid('server_monitor_id');
$table->uuid("user_id");
$table
->foreign("user_id")
->references("id")
->on("users")
->onDelete("cascade");
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('user_monitors');
}
}
......@@ -136,6 +136,12 @@
<p>{{__("Bileşenler")}}</p>
</a>
</li>
<li class="nav-item">
<a href='/takip' class="nav-link">
<i class="nav-icon fas fa-grip-horizontal"></i>
<p>{{__("Sunucu Takibi")}}</p>
</a>
</li>
</ul>
</nav>
<!-- /.sidebar-menu -->
......
@extends('layouts.app')
@section('content')
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__("Ana Sayfa")}}</a></li>
<li class="breadcrumb-item active" aria-current="page">{{__("Sunucu Takibi")}}</li>
</ol>
</nav>
<div class="row">
@foreach($monitor_servers as $server)
@if($server->online)
<div class="col-md-3 monitorServer" id="{{$server->id}}">
<div class="info-box bg-success">
<span class="info-box-icon"><i class="fa fa-thumbs-up"></i></span>
<div class="info-box-content">
<span class="info-box-text">{{ $server->ip_address . " : " . $server->port}}</span>
<span class="info-box-number">{{$server->name}}</span>
<span class="progress-description">{{__("Son Kontrol : " . $server->last_checked)}}</span>
</div>
</div>
</div>
@else
<div class="col-md-3 monitorServer" id="{{$server->id}}">
<div class="info-box bg-danger">
<span class="info-box-icon"><i class="fa fa-thumbs-down"></i></span>
<div class="info-box-content">
<span class="info-box-text">{{ $server->ip_address . " : " . $server->port}}</span>
<span class="info-box-number">{{$server->name}}</span>
<span class="progress-description">{{__("Son Kontrol : " . $server->last_checked)}}</span>
</div>
</div>
</div>
@endif
@endforeach
</div>
@component('modal-component',[
"id" => "addNewMonitor",
"title" => "Yeni Sunucu Takibi Ekle"
])
<div class="row">
<div class="col-md-4">
<select name="server_list" id="server_list" class="select2">
@foreach($servers as $server)
<option value="{{$server->ip_address . ':' . $server->control_port}}">{{$server->name}}</option>
@endforeach
</select>
</div>
<div class="col-md-4">
<button class="btn btn-primary" onclick="loadServer()">{{__("Seçili sunucudan bilgileri oku")}}</button>
</div>
</div><br>
<div class="row" id="monitorInputs">
<div class="col-md-4">
@include('inputs', [
'inputs' => [
"İsim" => "name:text:Kolay hatırlanması için bir isim.",
]
])
</div>
<div class="col-md-3">
@include('inputs', [
'inputs' => [
"Sunucu İp Adresi" => "ip_address:text",
]
])
</div>
<div class="col-md-1">
@include('inputs', [
'inputs' => [
"Port" => "port:number",
]
])
</div>
</div><br>
<button class="btn btn-primary" onclick="addNewServerMonitor()">{{__("Ekle")}}</button>
@endcomponent
<script>
function loadServer(){
let arr = $("#server_list").val().split(":");
$("input[name='ip_address']").val(arr[0]);
$("input[name='port']").val(arr[1]);
}
function addNewServerMonitor(){
showSwal("Ekleniyor...","info");
let form = new FormData();
form.append("ip_address", $("input[name='ip_address']").val());
form.append("port", $("input[name='port']").val());
form.append("name", $("input[name='name']").val());
request("{{route('monitor_add')}}",form,function(success){
let json = JSON.parse(success);
showSwal(json.message,'success',2000);
setTimeout(() => {
location.reload();
}, 1500);
},function(error){
let json = JSON.parse(error);
showSwal(json.message,'error',2000);
});
}
$.contextMenu({
selector: '.monitorServer',
callback: function (key, options) {
let form = new FormData();
form.append('server_monitor_id',options.$trigger[0].getAttribute("id"));
switch(key){
case "refresh":
request("{{route('monitor_refresh')}}",form,function(success){
let json = JSON.parse(success);
showSwal(json.message,'success',2000);
setTimeout(() => {
location.reload();
}, 1500);
},function(error){
let json = JSON.parse(error);
showSwal(json.message,'error',2000);
});
break;
case "remove":
request("{{route('monitor_remove')}}",form,function(success){
let json = JSON.parse(success);
showSwal(json.message,'success',2000);
setTimeout(() => {
location.reload();
}, 1500);
},function(error){
let json = JSON.parse(error);
showSwal(json.message,'error',2000);
});
break;
}
},
items: {
"refresh" : {
"name" : "Şimdi Güncelle",
"icon" : "fas fa-redo"
},
"remove" : {
"name" : "Sil",
"icon" : "fas fa-trash"
},
}
});
function addNewMonitor(){
$("#addNewMonitor").modal('show');
}
</script>
<div class="float" onclick="addNewMonitor()" id="requestRecordButton">
<i class="fas fa-plus"></i>
</div>
<style>
.float {
position: fixed;
font-size: 25px;
line-height: 50px;
width: 50px;
height: 50px;
bottom: 20px;
right: 20px;
background-color: grey;
color: #FFF;
border-radius: 50px;
text-align: center;
box-shadow: 2px 2px 3px #999;
}
</style>
@endsection
\ No newline at end of file
......@@ -82,6 +82,14 @@ Route::group(['middleware' => ['auth', 'permissions']], function () {
Route::get('/kasa', 'UserController@userKeyList')->name('keys');
Route::get('/takip', 'ServerMonitorController@list')->name('monitor_list');
Route::post('/takip/sil', 'ServerMonitorController@remove')->name('monitor_remove');
Route::post('/takip/ekle', 'ServerMonitorController@add')->name('monitor_add');
Route::post('/takip/yenile', 'ServerMonitorController@refresh')->name('monitor_refresh');
Route::post('/onbellek_temizle', 'UserController@cleanSessions')->name(
'clean_sessions'
);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment