diff --git a/app/Http/Controllers/Api/ServerController.php b/app/Http/Controllers/Api/ServerController.php index b1c9ba9..5759b43 100644 --- a/app/Http/Controllers/Api/ServerController.php +++ b/app/Http/Controllers/Api/ServerController.php @@ -3,12 +3,13 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; +use App\Support\Cluster; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; class ServerController extends Controller { - public function __invoke(Request $request) + public function module_reports(Request $request) { $servers = Cache::get('servers', []); @@ -21,4 +22,10 @@ public function __invoke(Request $request) return $this->success($servers); } + + public function nodes() { + $nodes = Cluster::nodes(true); + + return $this->success($nodes); + } } diff --git a/app/Support/Cluster.php b/app/Support/Cluster.php index 3d27e6a..77c0a5d 100644 --- a/app/Support/Cluster.php +++ b/app/Support/Cluster.php @@ -97,9 +97,33 @@ public static function forever($key, $value): void self::set($key, $value, -1); } - public static function hget($key, $value, $default = null): string|array|null + public static function hget($key, $hashKey, $default = []): string|array|null { - return Redis::hget($key, $value, $default); + $value = Redis::hget(self::$prefix . $key, $hashKey); + + return $value ?: $default; + } + + public static function hgetAll($hashKey, $default = []): array + { + $value = Redis::hgetall(self::$prefix . $hashKey); + + return $value ?: $default; + } + + public static function nodes($hide_ip = false): array + { + $nodes = self::hgetAll('nodes'); + + foreach ($nodes as $key => $node) { + $nodes[$key] = json_decode($node, true); + + if ($hide_ip) { + unset($nodes[$key]['ip']); + } + } + + return $nodes; } public static function registerThisNode($report = true): void diff --git a/routes/api.php b/routes/api.php index b0cf2fe..1710a73 100644 --- a/routes/api.php +++ b/routes/api.php @@ -20,10 +20,12 @@ Route::resource('balances', BalanceController::class); -Route::get('servers', ServerController::class); +Route::get('servers', [ServerController::class, 'module_reports']); +Route::get('nodes', [ServerController::class, 'nodes']); Route::get('modules', [ModuleController::class, 'index']); + Route::resource('tasks', TaskController::class)->only(['index', 'show']); Route::get('forum/announcements', [ForumController::class, 'pinned']);