From 4579c2c4b5acccb188ce7126ffd34aa85c726f13 Mon Sep 17 00:00:00 2001 From: "iVampireSP.com" Date: Wed, 31 Aug 2022 16:51:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Remote/ServerController.php | 105 ------------------ app/Http/Controllers/ServerController.php | 58 +--------- app/Jobs/Remote/FetchModule.php | 21 +++- ...8_13_100808_create_server_status_table.php | 43 ------- routes/api.php | 2 + 5 files changed, 22 insertions(+), 207 deletions(-) delete mode 100644 app/Http/Controllers/Remote/ServerController.php delete mode 100644 database/migrations/2022_08_13_100808_create_server_status_table.php diff --git a/app/Http/Controllers/Remote/ServerController.php b/app/Http/Controllers/Remote/ServerController.php deleted file mode 100644 index 59a5418..0000000 --- a/app/Http/Controllers/Remote/ServerController.php +++ /dev/null @@ -1,105 +0,0 @@ -cache = Cache::tags(['remote']); - - // // 临时修改 prefix - // $this->cache->setPrefix('remote_' . auth('remote')->id()); - // } - - // public function all() { - // return $this->cache->get('servers', function () { - // return []; - // }); - // } - /** - * Display a listing of the resource. - * - * @return \Illuminate\Http\Response - */ - public function index() - { - // // - // $servers = $this->cache->get('servers', function () { - // return []; - // }); - - $servers = Status::module()->get(); - - return $this->success($servers); - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(Request $request, Status $server) - { - // - $request->validate([ - 'name' => 'required|string', - 'ip' => 'sometimes|ip', - // status only allow online or offline - 'status' => 'required|in:online,offline,maintenance', - ]); - - $server = $server->create([ - 'name' => $request->name, - 'ip' => $request->ip, - 'status' => $request->status, - 'module_id' => auth('remote')->id() - ]); - - return $this->success($server); - } - - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param int $id - * @return \Illuminate\Http\Response - */ - public function update(StatusRequest $request, Status $server) - { - // only allow name,ip,status - $request->validate([ - 'name' => 'sometimes|string', - 'ip' => 'sometimes|ip', - 'status' => 'sometimes|in:online,offline,maintenance', - ]); - - $server->update($request->only(['name', 'ip', 'status'])); - - return $this->updated($server); - } - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function destroy(Status $status) - { - // delete - $status->provider()->delete(); - return $this->deleted(); - - } -} diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 17fac77..35fd8f4 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -7,61 +7,7 @@ class ServerController extends Controller { - /** - * Display a listing of the resource. - * - * @return \Illuminate\Http\Response - */ - public function index() - { - // get all servers from cache - // $servers = Cache::remember('servers', now()->addMinutes(5), function () { - // return \App\Models\Server::all(); - // }); - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(Request $request) - { - // - } - - /** - * Display the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function show($id) - { - // - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param int $id - * @return \Illuminate\Http\Response - */ - public function update(Request $request, $id) - { - // - } - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function destroy($id) - { - // + public function __invoke() { + return $this->success(Cache::get('servers', [])); } } diff --git a/app/Jobs/Remote/FetchModule.php b/app/Jobs/Remote/FetchModule.php index dc8e431..ebac6d4 100644 --- a/app/Jobs/Remote/FetchModule.php +++ b/app/Jobs/Remote/FetchModule.php @@ -34,20 +34,35 @@ public function __construct() public function handle() { // - Module::whereNotNull('url')->chunk(100, function ($modules) { + Module::whereNotNull('url')->chunk(100, function ($modules) { + $servers = []; + foreach ($modules as $module) { $http = Http::remote($module->api_token, $module->url); // dd($module->url); $response = $http->get('remote'); if ($response->successful()) { - Cache::set('module_' . $module->id, $response->status()); + $json = $response->json(); + + if (isset($json['data']['servers'])) { + // 只保留 name, status + $servers = array_merge($servers, array_map(function ($server) { + return [ + 'name' => $server['name'], + 'status' => $server['status'], + 'updated_at' => $server['updated_at'], + ]; + }, $json['data']['servers'])); + } // $module->update([ // 'data' => $response->json() // ]); } - } + + // Cache servers + Cache::put('servers', $servers, now()->addMinutes(10)); }); } } diff --git a/database/migrations/2022_08_13_100808_create_server_status_table.php b/database/migrations/2022_08_13_100808_create_server_status_table.php deleted file mode 100644 index 37ac7eb..0000000 --- a/database/migrations/2022_08_13_100808_create_server_status_table.php +++ /dev/null @@ -1,43 +0,0 @@ -id(); - - $table->string('name'); - - $table->string('ip')->nullable(); - - $table->string('status'); - - $table->string('module_id')->index(); - $table->foreign('module_id')->references('id')->on('modules')->onDelete('cascade'); - - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('server_status'); - } -}; diff --git a/routes/api.php b/routes/api.php index 1587f20..d58f0f9 100644 --- a/routes/api.php +++ b/routes/api.php @@ -4,12 +4,14 @@ use App\Http\Controllers\User\DropController; use App\Http\Controllers\User\TaskController; use App\Http\Controllers\Remote\ModuleController; +use App\Http\Controllers\ServerController; use App\Http\Controllers\UserController; use App\Http\Controllers\User\WorkOrder\ReplyController; use App\Http\Controllers\User\WorkOrder\WorkOrderController; Route::name('api.')->middleware(['api', 'auth:sanctum'])->group(function () { Route::apiResource('users', UserController::class); + Route::get('servers', ServerController::class); Route::apiResource('drops', DropController::class);