reloadNode.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace App\Jobs\VNet;
  3. use Arr;
  4. use Http;
  5. use Illuminate\Bus\Queueable;
  6. use Illuminate\Contracts\Queue\ShouldQueue;
  7. use Illuminate\Foundation\Bus\Dispatchable;
  8. use Illuminate\Queue\InteractsWithQueue;
  9. use Illuminate\Queue\SerializesModels;
  10. use Log;
  11. use Throwable;
  12. class reloadNode implements ShouldQueue
  13. {
  14. use Dispatchable;
  15. use InteractsWithQueue;
  16. use Queueable;
  17. use SerializesModels;
  18. private $nodes;
  19. public function __construct($nodes)
  20. {
  21. $this->nodes = $nodes;
  22. }
  23. public function handle(): bool
  24. {
  25. $allSuccess = true;
  26. foreach ($this->nodes as $node) {
  27. $ret = $this->send(($node->server ?: $node->ip).':'.$node->push_port, $node->auth->secret, [
  28. 'id' => $node->id,
  29. 'port' => (string) $node->port,
  30. 'passwd' => $node->passwd ?: '',
  31. 'method' => $node->method,
  32. 'protocol' => $node->protocol,
  33. 'obfs' => $node->obfs,
  34. 'protocol_param' => $node->protocol_param,
  35. 'obfs_param' => $node->obfs_param ?: '',
  36. 'push_port' => $node->push_port,
  37. 'single' => $node->single,
  38. 'secret' => $node->auth->secret,
  39. 'is_udp' => $node->is_udp,
  40. 'speed_limit' => $node->getRawOriginal('speed_limit'),
  41. 'client_limit' => $node->client_limit,
  42. 'redirect_url' => (string) sysConfig('redirect_url'),
  43. ]);
  44. if (! $ret) {
  45. $allSuccess = false;
  46. }
  47. }
  48. return $allSuccess;
  49. }
  50. public function send($host, $secret, $data): bool
  51. {
  52. $request = Http::baseUrl($host)->timeout(15)->withHeaders(['secret' => $secret]);
  53. $response = $request->post('api/v2/node/reload', $data);
  54. $message = $response->json();
  55. if ($message && Arr::has($message, ['success', 'content']) && $response->ok()) {
  56. if ($message['success'] === 'false') {
  57. Log::warning('【重载节点】失败:'.$host.' 反馈:'.$message['content']);
  58. return false;
  59. }
  60. Log::info('【重载节点】成功:'.$host.' 反馈:'.$message['content']);
  61. return true;
  62. }
  63. Log::warning('【重载节点】失败:'.$host);
  64. return false;
  65. }
  66. // 队列失败处理
  67. public function failed(Throwable $exception)
  68. {
  69. Log::error('【重载节点】推送异常:'.$exception);
  70. }
  71. }