From 2410d88f3d651f76a4a7e2e8c47889d8a852a6ca Mon Sep 17 00:00:00 2001 From: liuqixing Date: Wed, 2 Nov 2016 11:51:38 +0800 Subject: [PATCH 1/3] Added new class CMiniServer --- src/ladep/models/CCheck.php | 201 ++------------- src/ladep/models/classes/CMiniServer.php | 298 +++++++++++++++++++++++ 2 files changed, 315 insertions(+), 184 deletions(-) create mode 100644 src/ladep/models/classes/CMiniServer.php diff --git a/src/ladep/models/CCheck.php b/src/ladep/models/CCheck.php index af86ec9..652d366 100644 --- a/src/ladep/models/CCheck.php +++ b/src/ladep/models/CCheck.php @@ -9,7 +9,7 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; -use dekuan\vdata; + use dekuan\ladep\libs; use dekuan\ladep\models\classes; @@ -21,11 +21,6 @@ */ class CCheck { - // ... - const CONST_CHECK_SERVER_NAME = 'LADEP CHECK WEB SERVICE'; - const CONST_CHECK_SERVER_HOST = '127.0.0.1'; // server host - const CONST_CHECK_SERVER_PORT = 9916; // server port - // ... private $m_cProject = null; @@ -44,6 +39,7 @@ public function Run( $arrParameter, callable $pfnCbFunc ) $sErrorDesc = ''; $sErrorPath = ''; $cGit = new classes\CGit(); + $cMiniSrv = classes\CMiniServer::GetInstance(); if ( ! is_callable( $pfnCbFunc ) ) @@ -97,43 +93,34 @@ public function Run( $arrParameter, callable $pfnCbFunc ) if ( is_string( $sReleaseDir ) && is_dir( $sReleaseDir ) ) { + // + // try to stop mini http server + // + $cMiniSrv->SafeRestart( $sReleaseDir, $pfnCbFunc ); + // ... - if ( $this->_IsCheckServerListening() ) - { - $this->_StopCheckService( $pfnCbFunc ); - } + usleep( 1000 ); - if ( ! $this->_IsCheckServerListening() ) + if ( $cMiniSrv->IsListening() ) { - if ( $this->_StartCheckService( $sReleaseDir, $pfnCbFunc ) ) - { - sleep( 3 ); - - $nStatusCode = 0; - if ( $this->_IsWebsiteAvailable( $nStatusCode ) ) - { - $nRet = 0; + $pfnCbFunc( 'info', sprintf( "\t\t: Access: %s", $cMiniSrv->GetServerUrl() ) ); - // ... - $pfnCbFunc( 'info', "\t\t: Website works well!" ); - } - else - { - $pfnCbFunc( 'comment', sprintf( "\t\t# Website is not available, status code is %d.", $nStatusCode ) ); - } + $nStatusCode = 0; + if ( $cMiniSrv->IsWebAvailable( $nStatusCode ) ) + { + $nRet = 0; // ... - sleep( 1 ); - $this->_StopCheckService( $pfnCbFunc ); + $pfnCbFunc( 'info', "\t\t: Website works well!" ); } else { - $pfnCbFunc( 'error', "\t\t# Failed to start check web service." ); + $pfnCbFunc( 'comment', sprintf( "\t\t# Website is not available, status code is %d.", $nStatusCode ) ); } } else { - $pfnCbFunc( 'error', sprintf( "\t\t# Port %d already in use.", self::CONST_CHECK_SERVER_PORT ) ); + $pfnCbFunc( 'error', sprintf( "\t\t# Failed to start %s", $cMiniSrv->GetServerName() ) ); } } else @@ -162,159 +149,5 @@ public function Run( $arrParameter, callable $pfnCbFunc ) //////////////////////////////////////////////////////////////////////////////// // Private // - private function _IsCheckServerListening() - { - $bRet = false; - - // ... - $nErrorId = -1; - $sErrorStr = ''; - $nTimeout = 3; - - try - { - $fp = fsockopen( self::CONST_CHECK_SERVER_HOST, self::CONST_CHECK_SERVER_PORT, $nErrorId, $sErrorStr, $nTimeout ); - if ( false !== $fp ) - { - $bRet = true; - - fclose( $fp ); - } - } - catch ( \Exception $e ) - {} - - // ... - return $bRet; - } - - private function _IsWebsiteAvailable( & $nStatusCode = 0 ) - { - $cRequest = vdata\CRequest::GetInstance(); - - // ... - $bRet = false; - - // ... - $arrResp = null; - $sUrl = $this->_GetCheckServiceUrl(); - - $nCall = $cRequest->HttpRaw - ( - [ - 'method' => 'GET', - 'url' => $sUrl, - ], - $arrResp - ); - if ( vdata\CConst::ERROR_SUCCESS == $nCall && - $cRequest->IsValidRawResponse( $arrResp ) ) - { - // ... - $nStatusCode = $arrResp['status']; - - // ... - if ( 200 == $arrResp['status'] ) - { - $bRet = true; - } - } - - return $bRet; - } - - private function _GetCheckServiceUrl() - { - return sprintf( "http://%s:%d", self::CONST_CHECK_SERVER_HOST, self::CONST_CHECK_SERVER_PORT ); - } - - private function _StartCheckService( $sReleaseDir, callable $pfnCbFunc ) - { - if ( ! is_callable( $pfnCbFunc ) ) - { - throw new \RuntimeException( sprintf( "%s::%s pfnCbFunc is not callable function.", __CLASS__, __FUNCTION__ ) ); - } - if ( ! is_string( $sReleaseDir ) || ! is_dir( $sReleaseDir ) ) - { - $pfnCbFunc( 'error', "\t\t# Error in parameter [sReleaseDir] in " . __FUNCTION__ ); - return null; - } - - // ... - $bRet = false; - - // ... - $sCmdLine = sprintf - ( - "php -S %s:%d -t \"%s/public\" > /dev/null 2>&1 &", - self::CONST_CHECK_SERVER_HOST, - self::CONST_CHECK_SERVER_PORT, - libs\Lib::RTrimPath( $sReleaseDir ) - ); - - // ... - $cProcess = new Process\Process( $sCmdLine ); - $cProcess - ->setTimeout( libs\Config::Get( 'cmd_timeout' ) ) - ->enableOutput() - ->run() - ; - - if ( $cProcess->isSuccessful() ) - { - $bRet = true; - - if ( is_callable( $pfnCbFunc ) ) - { - $pfnCbFunc( 'info', "\t\t: Start [" . self::CONST_CHECK_SERVER_NAME . "] successfully." ); - } - } - else - { - if ( is_callable( $pfnCbFunc ) ) - { - $pfnCbFunc( 'error', "\t\t: Failed to start [" . self::CONST_CHECK_SERVER_NAME . "]." ); - $pfnCbFunc( 'error', $cProcess->getErrorOutput() ); - } - } - return $bRet; - } - - private function _StopCheckService( callable $pfnCbFunc ) - { - $bRet = false; - - if ( $this->_IsCheckServerListening() ) - { - // ... - $sCmdLine = sprintf( "kill -9 $(lsof -t -i:%d) > /dev/null 2>&1", self::CONST_CHECK_SERVER_PORT ); - - // ... - $cProcess = new Process\Process( $sCmdLine ); - $cProcess - ->setTimeout( libs\Config::Get( 'cmd_timeout' ) ) - ->enableOutput() - ->run() - ; - - if ( $cProcess->isSuccessful() ) - { - $bRet = true; - - $pfnCbFunc( 'info', "\t\t: Stop [" . self::CONST_CHECK_SERVER_NAME . "] successfully." ); - } - else - { - $pfnCbFunc( 'error', "\t\t: Failed to stop [" . self::CONST_CHECK_SERVER_NAME . "]." ); - $pfnCbFunc( 'error', $cProcess->getErrorOutput() ); - } - } - else - { - $pfnCbFunc( 'info', "\t\t: [" . self::CONST_CHECK_SERVER_NAME . "] already stopped." ); - } - - return $bRet; - } } \ No newline at end of file diff --git a/src/ladep/models/classes/CMiniServer.php b/src/ladep/models/classes/CMiniServer.php new file mode 100644 index 0000000..81c91bb --- /dev/null +++ b/src/ladep/models/classes/CMiniServer.php @@ -0,0 +1,298 @@ +m_sServerName = self::DEFAULT_CHECK_SERVER_NAME; + $this->m_sServerHost = self::DEFAULT_CHECK_SERVER_HOST; + $this->m_nServerPort = self::DEFAULT_CHECK_SERVER_PORT; + } + public function __destruct() + { + } + static function GetInstance() + { + if ( is_null( self::$g_cStaticMiniServerInstance ) || ! isset( self::$g_cStaticMiniServerInstance ) ) + { + self::$g_cStaticMiniServerInstance = new self(); + } + return self::$g_cStaticMiniServerInstance; + } + + + // + // configuration + // + public function GetServerName() + { + return $this->m_sServerName; + } + public function SetServerName( $vVal ) + { + if ( ! delib\CLib::IsExistingString( $vVal ) ) + { + return false; + } + + $this->m_sServerName = $vVal; + return true; + } + + public function GetServerHost() + { + return $this->m_sServerHost; + } + public function SetServerHost( $vVal ) + { + if ( ! delib\CLib::IsExistingString( $vVal ) ) + { + return false; + } + + $this->m_sServerHost = $vVal; + return true; + } + + public function GetServerPort() + { + return $this->m_nServerPort; + } + public function SetServerPort( $vVal ) + { + if ( ! is_numeric( $vVal ) ) + { + return false; + } + + $this->m_nServerPort = $vVal; + return true; + } + + + public function SafeRestart( $sDocRoot, callable $pfnCbFunc ) + { + $bRet = false; + + // + // try to stop mini http server + // + for ( $i = 0; $i < 3; $i ++ ) + { + if ( $this->IsListening() ) + { + $this->StopServer( $pfnCbFunc ); + sleep( 1 ); + } + + if ( ! $this->IsListening() ) + { + break; + } + } + + // + // try to start mini http server + // + for ( $i = 0; $i < 3; $i ++ ) + { + if ( ! $this->IsListening() ) + { + $this->StartServer( $sDocRoot, $pfnCbFunc ); + sleep( 3 ); + } + + if ( $this->IsListening() ) + { + $bRet = true; + break; + } + } + + return $bRet; + } + + public function IsListening() + { + $bRet = false; + + // ... + $nErrorId = -1; + $sErrorStr = ''; + $nTimeout = 3; + + try + { + $fp = fsockopen( $this->m_sServerHost, $this->m_nServerPort, $nErrorId, $sErrorStr, $nTimeout ); + if ( false !== $fp ) + { + $bRet = true; + + fclose( $fp ); + } + } + catch ( \Exception $e ) + {} + + // ... + return $bRet; + } + + public function IsWebAvailable( & $nStatusCode = 0 ) + { + $cRequest = vdata\CRequest::GetInstance(); + + // ... + $bRet = false; + + // ... + $arrResp = null; + $sUrl = $this->GetServerUrl(); + + $nCall = $cRequest->HttpRaw + ( + [ + 'method' => 'GET', + 'url' => $sUrl, + ], + $arrResp + ); + if ( vdata\CConst::ERROR_SUCCESS == $nCall && + $cRequest->IsValidRawResponse( $arrResp ) ) + { + // ... + $nStatusCode = $arrResp['status']; + + // ... + if ( 200 == $arrResp['status'] ) + { + $bRet = true; + } + } + + return $bRet; + } + + public function GetServerUrl() + { + return sprintf( "http://%s:%d", $this->m_sServerHost, $this->m_nServerPort ); + } + + public function StartServer( $sDocRoot, callable $pfnCbFunc ) + { + if ( ! is_callable( $pfnCbFunc ) ) + { + throw new \RuntimeException( sprintf( "%s::%s pfnCbFunc is not callable function.", __CLASS__, __FUNCTION__ ) ); + } + if ( ! is_string( $sDocRoot ) || ! is_dir( $sDocRoot ) ) + { + $pfnCbFunc( 'error', "\t\t# Error in parameter [sReleaseDir] in " . __FUNCTION__ ); + return null; + } + + // ... + $bRet = false; + + // ... + $sCmdLine = sprintf + ( + "php -S %s:%d -t \"%s/public\" > /dev/null 2>&1 &", + $this->m_sServerHost, + $this->m_nServerPort, + libs\Lib::RTrimPath( $sDocRoot ) + ); + + // ... + $cProcess = new Process\Process( $sCmdLine ); + $cProcess + ->setTimeout( libs\Config::Get( 'cmd_timeout' ) ) + ->enableOutput() + ->run() + ; + + if ( $cProcess->isSuccessful() ) + { + $bRet = true; + + if ( is_callable( $pfnCbFunc ) ) + { + $pfnCbFunc( 'info', "\t\t: Start [" . $this->m_sServerName . "] successfully." ); + } + } + else + { + if ( is_callable( $pfnCbFunc ) ) + { + $pfnCbFunc( 'error', "\t\t: Failed to start [" . $this->m_sServerName . "]." ); + $pfnCbFunc( 'error', $cProcess->getErrorOutput() ); + } + } + + return $bRet; + } + + public function StopServer( callable $pfnCbFunc ) + { + $bRet = false; + + if ( $this->IsListening() ) + { + // ... + $sCmdLine = sprintf( "kill -9 $(lsof -t -i:%d) > /dev/null 2>&1", $this->m_nServerPort ); + + // ... + $cProcess = new Process\Process( $sCmdLine ); + $cProcess + ->setTimeout( libs\Config::Get( 'cmd_timeout' ) ) + ->enableOutput() + ->run() + ; + + if ( $cProcess->isSuccessful() ) + { + $bRet = true; + + $pfnCbFunc( 'info', "\t\t: Stop [" . $this->m_sServerName . "] successfully." ); + } + else + { + $pfnCbFunc( 'error', "\t\t: Failed to stop [" . $this->m_sServerName . "]." ); + $pfnCbFunc( 'error', $cProcess->getErrorOutput() ); + } + } + else + { + $pfnCbFunc( 'info', "\t\t: [" . $this->m_sServerName . "] already stopped." ); + } + + return $bRet; + } +} \ No newline at end of file From 232df0f19c9ac7b05e3d8cb117bf3e2256af04f5 Mon Sep 17 00:00:00 2001 From: liuqixing Date: Thu, 3 Nov 2016 12:12:16 +0800 Subject: [PATCH 2/3] command check update --- ladep.phar | Bin 3070293 -> 3072168 bytes src/ladep/models/CCheck.php | 9 ++++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ladep.phar b/ladep.phar index 2d8a3b0156f3317c9778789753107c7e80c93d06..1c5aa0d0bb03fd1c898312df0f95d7a4f548f545 100755 GIT binary patch delta 8831 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 T7c%Xmb3Ql0*BrMXyEyw_pgnhU delta 7501 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 HJL&%b#vl(T diff --git a/src/ladep/models/CCheck.php b/src/ladep/models/CCheck.php index 652d366..f8b9337 100644 --- a/src/ladep/models/CCheck.php +++ b/src/ladep/models/CCheck.php @@ -96,6 +96,8 @@ public function Run( $arrParameter, callable $pfnCbFunc ) // // try to stop mini http server // + $pfnCbFunc( 'info', + sprintf( "MINI-SERVER\t: Try to launch a mini-server on tcp port %d to check your website", $cMiniSrv->GetServerPort() ) ); $cMiniSrv->SafeRestart( $sReleaseDir, $pfnCbFunc ); // ... @@ -103,7 +105,7 @@ public function Run( $arrParameter, callable $pfnCbFunc ) if ( $cMiniSrv->IsListening() ) { - $pfnCbFunc( 'info', sprintf( "\t\t: Access: %s", $cMiniSrv->GetServerUrl() ) ); + $pfnCbFunc( 'sinfo', sprintf( "CHECKING\t: %s", $cMiniSrv->GetServerUrl() ) ); $nStatusCode = 0; if ( $cMiniSrv->IsWebAvailable( $nStatusCode ) ) @@ -111,12 +113,13 @@ public function Run( $arrParameter, callable $pfnCbFunc ) $nRet = 0; // ... - $pfnCbFunc( 'info', "\t\t: Website works well!" ); + $pfnCbFunc( 'sinfo', "\t\t\t\t\t\t[WORKS WELL]" ); } else { - $pfnCbFunc( 'comment', sprintf( "\t\t# Website is not available, status code is %d.", $nStatusCode ) ); + $pfnCbFunc( 'scomment', sprintf( "\t\t\t\t\t\t[NOT AVAILABLE] http code %d.", $nStatusCode ) ); } + $pfnCbFunc( 'info', "" ); } else { From 3d8edebc66a29ccf8d733b02f9912572b26b7d5e Mon Sep 17 00:00:00 2001 From: liuqixing Date: Thu, 3 Nov 2016 14:43:14 +0800 Subject: [PATCH 3/3] version 1.0.16 was released --- ladep.phar | Bin 3072168 -> 3075703 bytes manifest.json | 6 ++++++ 2 files changed, 6 insertions(+) diff --git a/ladep.phar b/ladep.phar index 1c5aa0d0bb03fd1c898312df0f95d7a4f548f545..daf2123b5c778480c51280fe54791352b9f99dcb 100755 GIT binary patch delta 8959 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 delta 6958 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 diff --git a/manifest.json b/manifest.json index e1b1477..3faf314 100644 --- a/manifest.json +++ b/manifest.json @@ -82,5 +82,11 @@ "sha1" : "c7ef21d971caaf078eb410b6e0ec3ae2a34c3882", "url" : "https://github.com/dekuan/ladep/raw/1.0.15/ladep.phar", "version" : "1.0.15" + }, + { + "name" : "ladep.phar", + "sha1" : "df71adabaf487112fab8640acfdeea8ca7da29fe", + "url" : "https://github.com/dekuan/ladep/raw/1.0.16/ladep.phar", + "version" : "1.0.16" } ] \ No newline at end of file