diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index d2b1904..91da5e4 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -2,6 +2,7 @@ namespace App\Console; +use App\Jobs\Remote; use App\Jobs\HostCost; use App\Jobs\UserSave; use Illuminate\Console\Scheduling\Schedule; @@ -22,6 +23,9 @@ protected function schedule(Schedule $schedule) // dispatch HostCost job $schedule->job(new HostCost())->everyFiveMinutes(); $schedule->job(new UserSave())->everyTenMinutes(); + $schedule->job(new Remote\FetchModule())->everyMinute()->onOneServer(); + $schedule->job(new Remote\PushHost())->everyMinute()->onOneServer(); + $schedule->job(new Remote\PushWorkOrder())->everyMinute()->onOneServer(); } diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 0a1d72b..af3905c 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -2,13 +2,13 @@ namespace App\Http\Controllers; -use App\Helpers\ApiResponse; +// use App\Helpers\ApiResponse; use App\Models\User; use GuzzleHttp\Client; use GuzzleHttp\Exception\ClientException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Carbon; +// use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Str; @@ -19,6 +19,15 @@ class AuthController extends Controller public function index(Request $request) { + + + // test + $handle = new \App\Jobs\Remote\PushHost(); + $handle->handle(); + + $handle = new \App\Jobs\Remote\PushWorkOrder(); + $handle->handle(); + // if logged in if (Auth::check()) { $token_name = 'login token ' . now()->toDateString(); diff --git a/app/Http/Controllers/User/WorkOrder/WorkOrderController.php b/app/Http/Controllers/User/WorkOrder/WorkOrderController.php index d81d438..a50ab57 100644 --- a/app/Http/Controllers/User/WorkOrder/WorkOrderController.php +++ b/app/Http/Controllers/User/WorkOrder/WorkOrderController.php @@ -30,9 +30,10 @@ public function store(Request $request) { return $this->error('module_id 和 host_id 至少要填写一个'); } + $workOrder = WorkOrder::create([ 'title' => $request->title, - 'content' => $request->content, + 'content' => $request['content'], 'module_id' => $request->module_id, 'host_id' => $request->host_id, 'status' => 'pending', diff --git a/app/Jobs/Remote/FetchModule.php b/app/Jobs/Remote/FetchModule.php new file mode 100644 index 0000000..28b0069 --- /dev/null +++ b/app/Jobs/Remote/FetchModule.php @@ -0,0 +1,53 @@ +api_token, $module->url); + // dd($module->url); + $response = $http->get('remote'); + + if ($response->successful()) { + Cache::set('module_' . $module->id, $response->status()); + // $module->update([ + // 'data' => $response->json() + // ]); + } + + } + }); + } +} diff --git a/app/Jobs/Remote/PushHost.php b/app/Jobs/Remote/PushHost.php new file mode 100644 index 0000000..7bec1a1 --- /dev/null +++ b/app/Jobs/Remote/PushHost.php @@ -0,0 +1,52 @@ +with(['module', 'user'])->chunk(100, function ($hosts) { + foreach ($hosts as $host) { + $http = Http::remote($host->module->api_token, $host->module->url); + $host->status = 'running'; + + $response = $http->post('hosts', $host->toArray()); + + if (!$response->successful()) { + $host->status = 'error'; + } + + $host->save(); + + } + }); + } +} diff --git a/app/Jobs/Remote/PushWorkOrder.php b/app/Jobs/Remote/PushWorkOrder.php new file mode 100644 index 0000000..8bc6bfd --- /dev/null +++ b/app/Jobs/Remote/PushWorkOrder.php @@ -0,0 +1,60 @@ +with(['module', 'user', 'host'])->chunk(100, function ($workOrders) { + foreach ($workOrders as $workOrder) { + + if ($workOrder->host->status === 'pending') { + continue; + } + + $http = Http::remote($workOrder->module->api_token, $workOrder->module->url); + $workOrder->status = 'open'; + + $response = $http->post('work-orders', $workOrder->toArray()); + + if (!$response->successful()) { + $workOrder->status = 'error'; + } + + $workOrder->save(); + + + dd($response); + } + }); + + } +} diff --git a/app/Models/User/Host.php b/app/Models/User/Host.php deleted file mode 100644 index d823194..0000000 --- a/app/Models/User/Host.php +++ /dev/null @@ -1,72 +0,0 @@ - 'array' - ]; - - - // user - public function user() { - return $this->belongsTo(User::class); - } - - // module - public function module() { - return $this->belongsTo(Module::class); - } - - // workorders - public function workorders() { - return $this->hasMany(Workorder::class); - } - - // module 远程一对一 - // public function module() { - // return $this->hasOneThrough(Module::class, ProviderModule::class); - // } - - - // scope - public function scopeActive($query) { - return $query->where('status', 'running')->where('price', '!=', 0); - } - - // on create - protected static function boot() - { - parent::boot(); - - static::creating(function ($model) { - // $model->load('module'); - // $model->module->load(['provider', 'module']); - - // add to queue - - }); - } -} diff --git a/app/Models/Workorder/Workorder.php b/app/Models/Workorder/Workorder.php index c0eedd9..001c9eb 100644 --- a/app/Models/Workorder/Workorder.php +++ b/app/Models/Workorder/Workorder.php @@ -2,11 +2,12 @@ namespace App\Models\WorkOrder; -use App\Exceptions\CommonException; use App\Models\Host; +use App\Models\User; use App\Models\Module\Module; -use Illuminate\Database\Eloquent\Factories\HasFactory; +use App\Exceptions\CommonException; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Factories\HasFactory; class WorkOrder extends Model { @@ -23,6 +24,10 @@ class WorkOrder extends Model 'status', ]; + // user + public function user() { + return $this->belongsTo(User::class); + } // replies public function replies() diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index ee8ca5b..608bee3 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use Illuminate\Support\Facades\Http; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider @@ -24,5 +25,12 @@ public function register() public function boot() { // + + Http::macro('remote', function ($api_token, $url) { + return Http::withHeaders([ + 'X-Remote-Api-Token' => $api_token, + ])->baseUrl($url); + }); + } } diff --git a/database/migrations/2022_08_19_082540_add_url_to_modules_table.php b/database/migrations/2022_08_19_082540_add_url_to_modules_table.php new file mode 100644 index 0000000..b366537 --- /dev/null +++ b/database/migrations/2022_08_19_082540_add_url_to_modules_table.php @@ -0,0 +1,33 @@ +string('url')->nullable()->after('api_token')->index(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('modules', function (Blueprint $table) { + // + }); + } +};