mirror of
https://github.com/mivodev/mivo.git
synced 2026-01-26 13:31:56 +07:00
Initial Release v1.0.0: Full feature set with Docker automation, Nginx/Alpine stack
This commit is contained in:
87
app/Controllers/TrafficController.php
Normal file
87
app/Controllers/TrafficController.php
Normal file
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use App\Core\Controller;
|
||||
use App\Models\Config;
|
||||
use App\Libraries\RouterOSAPI;
|
||||
|
||||
class TrafficController extends Controller
|
||||
{
|
||||
public function monitor($session)
|
||||
{
|
||||
// 1. Get Session Config
|
||||
$configModel = new Config();
|
||||
$config = $configModel->getSession($session);
|
||||
|
||||
if (!$config) {
|
||||
http_response_code(404);
|
||||
echo json_encode(['error' => 'Session not found']);
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. Connect to RouterOS
|
||||
$API = new RouterOSAPI();
|
||||
// $API->debug = true;
|
||||
|
||||
// Fast Fail for Traffic Monitor to prevent blocking PHP server
|
||||
$API->attempts = 1;
|
||||
$API->timeout = 2;
|
||||
|
||||
if ($API->connect($config['ip_address'], $config['username'], $config['password'])) {
|
||||
// 3. Get Interface Name from GET param > Config > default 'ether1'
|
||||
$interface = $_GET['interface'] ?? $config['interface'] ?? 'ether1';
|
||||
|
||||
// 4. Fetch Traffic
|
||||
// /interface/monitor-traffic interface=ether1 once
|
||||
$traffic = $API->comm('/interface/monitor-traffic', [
|
||||
"interface" => $interface,
|
||||
"once" => "",
|
||||
]);
|
||||
|
||||
$API->disconnect();
|
||||
|
||||
// 5. Return JSON
|
||||
if (!empty($traffic) && !isset($traffic['!trap'])) {
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($traffic[0]);
|
||||
} else {
|
||||
echo json_encode(['error' => 'No data']);
|
||||
}
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'Connection failed']);
|
||||
}
|
||||
}
|
||||
|
||||
public function getInterfaces($session)
|
||||
{
|
||||
// 1. Get Session Config
|
||||
$configModel = new Config();
|
||||
$config = $configModel->getSession($session);
|
||||
|
||||
if (!$config) {
|
||||
http_response_code(404);
|
||||
echo json_encode(['error' => 'Session not found']);
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. Connect
|
||||
$API = new RouterOSAPI();
|
||||
if ($API->connect($config['ip_address'], $config['username'], $config['password'])) {
|
||||
// 3. Fetch Interfaces
|
||||
// Use comm() to safely handle response parsing and filtering
|
||||
$interfaces = $API->comm('/interface/print', [
|
||||
".proplist" => "name,type"
|
||||
]);
|
||||
$API->disconnect();
|
||||
|
||||
// 4. Return
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($interfaces);
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'Connection failed']);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user