| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- <?php
- /**
- * Created by PhpStorm.
- * Author: 芸众商城 www.yunzshop.com
- * Date: 2017/3/9
- * Time: 下午5:26
- */
- namespace app\backend\modules\supervisord\controllers;
- use app\backend\modules\supervisord\services\Supervisor;
- use app\common\components\BaseController;
- use app\common\facades\SiteSetting;
- use app\common\helpers\Cache;
- use app\common\helpers\Url;
- use app\common\facades\Setting;
- use app\host\HostManager;
- use Illuminate\Support\Facades\Redis;
- use Predis\Connection\ConnectionException;
- class SupervisordController extends BaseController
- {
- private $supervisor = null;
- public function preAction()
- {
- parent::preAction();
- $this->supervisor = app('supervisor');
- $this->supervisor->setTimeout(5000); // microseconds
- }
- /**
- * 商城设置
- * @return mixed
- */
- public function index()
- {
- //print_r($supervisor->getState());
- //$allProcessInfo = $this->supervisor->getAllProcessInfo();
- //$allProcessInfo = $supervisor->stopProcess("dev1-worker:dev1-worker_01");
- //$allProcessInfo = $supervisor->readLog(0);
- //$allProcessInfo = $supervisor->logMessage();
- //dd($allProcessInfo);
- $supervisord = SiteSetting::get('supervisor');
- return view('supervisor.index', [
- 'service_type' => $supervisord['service_type'] ?: 0
- ])->render();
- }
- public function store()
- {
- $setting = request()->input('setting');
- if ($setting) {
- $setting['address']['ip'] = $setting['address']['ip'] ? trim($setting['address']['ip']) : 'http://127.0.0.1';
- SiteSetting::set('supervisor', $setting);
- return $this->successJson("设置保存成功", Url::absoluteWeb('supervisord.supervisord.store'));
- }
- $supervisord = SiteSetting::get('supervisor');
- $data['address']['ip'] = 'http://127.0.0.1';
- $supervisord['address']['ip'] ?: SiteSetting::set('supervisor', $data);
- return view('supervisor.store', [
- 'setting' => json_encode($supervisord)
- ])->render();
- }
- public function process()
- {
- //print_r($supervisor->getState());
- $allProcessInfo = $this->supervisor->getAllProcessInfo();
- $state = $this->supervisor->getState();
- // dd($state);
- foreach ($allProcessInfo as $host => &$value) {
- foreach ($value->val as $key => &$val) {
- $val['cstate'] = false;
- // echo $val;
- }
- }
- $current_time = time();
- $queue_hearteat = [
- 'daemon' => $this->daemonStatus(),
- 'cron' => \app\backend\modules\survey\models\CronHeartbeat::getLog($current_time),
- 'job' => \app\backend\modules\survey\models\JobHeartbeat::getLog($current_time),
- 'redis' => $this->getRedisStatus()
- ];
- return json_encode([
- 'process' => $allProcessInfo,
- 'state' => $state,
- 'queue_hearteat' => $queue_hearteat,
- 'queue_hearteat_icon' => 'icon-fontclass-deng',
- ]);
- }
- public function showlog()
- {
- $process = \YunShop::request()->process;
- $hostname = \YunShop::request()->hostname;
- $this->supervisor->setCurrentHostname($hostname);
- $result = $this->supervisor->tailProcessStdoutLog($process, 1, 100000);
- $this->supervisor->setCurrentHostname();
- //取当前hostname的数据
- $result = $result[$hostname];
- return json_encode($result);
- }
- public function clearlog()
- {
- $process = \YunShop::request()->process;
- $hostname = \YunShop::request()->hostname;
- $this->supervisor->setCurrentHostname($hostname);
- $result = $this->supervisor->clearProcessLogs($process);
- $this->supervisor->setCurrentHostname();
- $result = $result[$hostname];
- return json_encode($result);
- }
- public function stop()
- {
- $process = \YunShop::request()->process;
- $hostname = \YunShop::request()->hostname;
- $this->supervisor->setCurrentHostname($hostname);
- $result = $this->supervisor->stopProcess($process);
- $this->supervisor->setCurrentHostname();
- $result = $result[$hostname];
- return json_encode($result);
- }
- public function stopAll()
- {
- $result = $this->supervisor->stopAllProcesses();
- return json_encode($result);
- }
- public function start()
- {
- $process = \YunShop::request()->process;
- $hostname = \YunShop::request()->hostname;
- $this->supervisor->setCurrentHostname($hostname);
- $result = $this->supervisor->startProcess($process);
- $this->supervisor->setCurrentHostname();
- $result = $result[$hostname];
- return json_encode($result);
- }
- public function startAll()
- {
- (new HostManager())->restart();
- $result = $this->supervisor->startAllProcesses();
- return json_encode($result);
- }
- public function restart()
- {
- (new HostManager())->restart();
- $result = $this->supervisor->restart();
- return json_encode($result);
- }
- private function daemonStatus()
- {
- $all_status = app('supervisor')->getState();
- $queue_status = 'green';
- $msg = '正常';
- $title = '';
- if (!function_exists('stream_socket_server')) {
- return array('queue_status' => 'yellow', 'msg' => '请解禁stream_socket_server函数');
- }
- foreach ($all_status as $hostname => $status) {
- $code = '正常';
- if ($status->val['statecode'] != 1) {
- $queue_status = 'not_running';
- $msg = $code = '异常';
- }
- $title .= '服务器' . $hostname . ":$code\r\n";
- }
- if (count($all_status) == 1) {
- $title = $msg;
- }
- return array('queue_status' => $queue_status, 'msg' => $msg, 'title' => $title);
- }
- /**
- * @return array
- * uninstall redis未安装
- * unexecute redis未执行
- */
- private function getRedisStatus()
- {
- try {
- if (!class_exists('Predis\Client')) {
- return array('queue_status' => 'uninstall', 'msg' => '未安装');
- }
- $res = \Illuminate\Support\Facades\Redis::ping() == 'PONG';
- if ($res) {
- return array('queue_status' => 'green', 'msg' => '正常');
- }
- } catch (ConnectionException $exception) {
- return array('queue_status' => 'unconnection', 'msg' => '连接失败');
- } catch (\Exception $exception) {
- return array('queue_status' => 'unexecute', 'msg' => '无法使用');
- }
- }
- }
|