Example #1
0
 /**
  * Start sync
  */
 public function actionStart()
 {
     // generate key
     $os = DIRECTORY_SEPARATOR == '\\' ? "windows" : "linux";
     $mac_addr = new CMac($os);
     $ip_addr = new CIp($os);
     // get system
     $sys = new CSys();
     $strRKEY = '';
     if (file_exists(WEB_ROOT . '/js/RKEY.TXT')) {
         $strRKEY = file_get_contents(WEB_ROOT . '/js/RKEY.TXT');
     }
     // init IndexController
     $indexController = new IndexController();
     $checkState = $indexController->actionCheck(true);
     // init cache
     $redis = $this->getRedis();
     $countData = json_decode($redis->readByKey('speed.count.log'), 1);
     // get run model
     $strRunMode = RunModel::model()->getRunMode();
     // get alived machine count
     $intCountMachine = max(count($checkState['alived']['BTC']) + count($checkState['died']['BTC']), count($checkState['alived']['LTC']) + count($checkState['died']['LTC']));
     // get machine number
     $strCheckTar = CUtilMachine::getCheckMode($sys->cursys);
     $aryUsb = UsbModel::model()->getUsbCheckResult($strRunMode, $strCheckTar);
     // get max accept number
     $intMaxNum = max($countData['BTC']['A'], $countData['BTC']['R'], $countData['LTC']['A'], $countData['LTC']['R']);
     if ($intMaxNum > 0) {
         $countData['last'] = time();
         $countData['noar'] = 0;
     } else {
         if (count($aryUsb['usb']) > 0) {
             $countData['noar'] += 1;
         }
     }
     // if need reload conf
     $boolIsReloadConf = false;
     if (!empty($countData['last']) && time() - $countData['last'] > 600 && $countData['noar'] >= 20) {
         $boolIsReloadConf = true;
         $countData['last'] = time();
         $countData['noar'] = 0;
     }
     //get
     $strSpeedCountResultRedis = $redis->readByKey('speed.count.result');
     $speedCountResult = $strSpeedCountResultRedis == '' ? array() : json_decode($strSpeedCountResultRedis, 1);
     // get local speed data
     $aryLocalSpeedData = SpeedModel::model()->createSyncSpeedData();
     $arySyncData = array();
     $arySyncData['key'] = md5($mac_addr->mac_addr . '-' . $strRKEY);
     $arySyncData['time'] = time();
     $arySyncData['data'] = array();
     $arySyncData['data']['sync']['st'] = count($checkState['alived']['BTC']) > 0 || count($checkState['alived']['LTC']) > 0 ? $checkState['super'] === true ? 2 : 1 : -1;
     $arySyncData['data']['sync']['sp'] = array('count' => $intCountMachine, 'error' => $speedCountResult['error'], 'normal' => $speedCountResult['normal'], 'lsusb' => 0);
     $arySyncData['data']['sync']['ar'] = $countData;
     $arySyncData['data']['sync']['ve'] = CUR_VERSION_NUM;
     $arySyncData['data']['sync']['md'] = $strRunMode;
     $arySyncData['data']['sync']['ip'] = $ip_addr->ip_addr;
     $arySyncData['data']['sync']['sys'] = $sys->cursys;
     $arySyncData['data']['sync']['info'] = SYS_INFO;
     $arySyncData['data']['sync']['pw'] = LoginModel::model()->getUserPwd();
     $arySyncData['data']['sync']['localSpeed'] = $aryLocalSpeedData;
     //将本地配置传送到服务端
     $aryRunMode = str_split($strRunMode);
     $aryConfSettingTemp = array();
     foreach ($aryRunMode as $strMode) {
         $strMode = strtolower($strMode);
         $aryConfSetting = json_decode($redis->readByKey("{$strMode}tc.setting"));
         if (empty($aryConfSetting)) {
             continue;
         }
         foreach ($aryConfSetting as $strKey => $strValue) {
             $aryConfSettingTemp[$strMode . $strKey] = $strValue;
         }
         unset($aryConfSetting);
     }
     $arySyncData['data']['sync']['conf'] = json_encode($aryConfSettingTemp);
     unset($aryConfSettingTemp);
     //将本地配置传到服务端
     if ($boolIsReloadConf === true) {
         $arySyncData['data']['sync']['reloadconf'] = 1;
     }
     $arySyncData['data'] = urlencode(base64_encode(json_encode($arySyncData['data'])));
     // sync data
     $aryCallBack = UtilApi::callSyncData($arySyncData);
     if ($aryCallBack['ISOK'] !== 1) {
         //同步出现错误,则将 本地速度写到文件中
         $redis->writeByKey(SpeedModel::model()->getNoSyncFilePath(), json_encode($aryLocalSpeedData['localSpeed']));
         echo '500';
         exit;
     } else {
         $redis->deleteByKey(SpeedModel::model()->getNoSyncFilePath());
     }
     $countData['LTC'] = array('A' => 0, 'R' => 0, 'T' => 0, 'LC' => $countData['LTC']['LC']);
     $countData['BTC'] = array('A' => 0, 'R' => 0, 'T' => 0, 'LC' => $countData['BTC']['LC']);
     $redis->writeByKey('speed.count.log', json_encode($countData));
     $syncData = $aryCallBack['DATA']['sync'];
     if (empty($syncData)) {
         echo '500';
         exit;
     }
     $boolIsRestart = false;
     $syncData = json_decode(base64_decode(urldecode($syncData)), 1);
     if (!empty($syncData['runmodel'])) {
         RunModel::model()->storeRunMode($syncData['runmodel']);
         $boolIsRestart = true;
     }
     //判断是否要修改本地密码
     if (!empty($syncData['password_machine'])) {
         //修改用户密码
         if (LoginModel::model()->updatePwd($syncData['password_machine']) === false) {
             echo '500';
             exit;
         }
     }
     if (!empty($syncData['upgrade'])) {
         $strVersion = $syncData['upgrade'];
         if (!empty($strVersion)) {
             // store upgrade status to running
             $redis->writeByKey('upgrade.run.status', json_encode(array('status' => 1, 'time' => time())));
             $boolIsRestart = true;
             $indexController->actionShutdown(true);
             // execute upgrade
             $command = SUDO_COMMAND . "cd " . WEB_ROOT . ";" . SUDO_COMMAND . "wget " . MAIN_DOMAIN . "/down/v{$strVersion}.zip;" . SUDO_COMMAND . "unzip -o v{$strVersion}.zip;" . SUDO_COMMAND . "rm -rf v{$strVersion}.zip;";
             exec($command);
             // check upgrade file
             RunModel::model()->checkUpgrade();
             // store upgrade status to stop
             $redis->writeByKey('upgrade.run.status', json_encode(array('status' => 0, 'time' => time())));
         }
     }
     if (!empty($syncData['config'])) {
         $boolIsRestart = true;
         $aryConfig = json_decode($syncData['config'], 1);
         $aryBTCData = $indexController->getTarConfig('btc');
         $aryBTCData['ad'] = $aryConfig['address_btc'];
         $aryBTCData['ac'] = $aryConfig['account_btc'];
         $aryBTCData['pw'] = $aryConfig['password_btc'];
         if (!empty($aryConfig['speed_btc'])) {
             $aryBTCData['speed'] = $aryConfig['speed_btc'];
         }
         //$aryBTCData['su'] = isset( $aryConfig['super_btc'] ) ? $aryConfig['super_btc'] : 1;
         $aryLTCData = $indexController->getTarConfig('ltc');
         $aryLTCData['ad'] = $aryConfig['address_ltc'];
         $aryLTCData['ac'] = $aryConfig['account_ltc'];
         $aryLTCData['pw'] = $aryConfig['password_ltc'];
         if (!empty($aryConfig['speed_ltc'])) {
             $aryLTCData['speed'] = $aryConfig['speed_ltc'];
         }
         //$aryLTCData['su'] = isset( $aryConfig['super_ltc'] ) ? $aryConfig['super_ltc'] : 1;
         // if params empty
         if (in_array($strRunMode, array('L', 'LB'))) {
             $boolCheck = CUtil::isParamsEmpty($aryLTCData);
         } else {
             if (in_array($strRunMode, array('B', 'LB'))) {
                 $boolCheck = CUtil::isParamsEmpty($aryBTCData);
             }
         }
         if ($boolCheck === true) {
             // store data
             $redis->writeByKey('btc.setting', json_encode($aryBTCData));
             $redis->writeByKey('ltc.setting', json_encode($aryLTCData));
             // restore statistical
             $countData['last'] = time();
             $countData['noar'] = 0;
             $redis->writeByKey('speed.count.log', json_encode($countData));
         }
     }
     if (!empty($syncData['restart']) && $syncData['restart'] === 1) {
         $indexController->actionRestart();
     } else {
         if ($boolIsRestart === true) {
             $indexController->actionRestart();
         }
     }
     if (!empty($syncData['reboot']) && $syncData['reboot'] === 1) {
         $indexController->actionReboot();
     }
     echo '200';
     exit;
 }
Example #2
0
 /**
  * Index method
  */
 public function actionIndex()
 {
     //检查是否登入
     Nbt::app()->login->checkIsLogin();
     try {
         $this->replaceSeoTitle(CUtil::i18n('controllers,index_index_seoTitle'));
         // open redis
         $redis = $this->getRedis();
         // 是否获取指定类型运算频率
         $intFreq = null;
         if (SYS_INFO === 'SF3301_D_V1') {
             $intFreq = array(0, 1);
         }
         // 可调速度集合
         $aryBTCSpeed = CUtilMachine::getSpeedList(SYS_INFO, is_null($intFreq) ? null : $intFreq[0]);
         $aryLTCSpeed = CUtilMachine::getSpeedList(SYS_INFO, is_null($intFreq) ? null : $intFreq[1]);
         // get default speed
         $intDefaultBTCSpeed = self::getDefaultSpeed(is_null($intFreq) ? null : $intFreq[0]);
         $intDefaultLTCSpeed = self::getDefaultSpeed(is_null($intFreq) ? null : $intFreq[1]);
         // Tip data
         $aryTipData = array();
         $aryBTCData = array();
         $aryLTCData = array();
         $btcVal = $redis->readByKey('btc.setting');
         $ltcVal = $redis->readByKey('ltc.setting');
         $aryBTCData = empty($btcVal) ? array() : json_decode($btcVal, true);
         if (empty($aryBTCData['speed'])) {
             $aryBTCData['speed'] = $intDefaultBTCSpeed;
         }
         $aryLTCData = empty($ltcVal) ? array() : json_decode($ltcVal, true);
         if (empty($aryLTCData['speed'])) {
             $aryLTCData['speed'] = $intDefaultLTCSpeed;
         }
         // get run model
         $strRunMode = $this->getRunMode();
         // if commit save
         if (Nbt::app()->request->isPostRequest) {
             $strBTCAddress = isset($_POST['address_btc']) ? htmlspecialchars($_POST['address_btc']) : '';
             $strBTCAccount = isset($_POST['account_btc']) ? htmlspecialchars($_POST['account_btc']) : '';
             $strBTCPassword = isset($_POST['password_btc']) ? htmlspecialchars($_POST['password_btc']) : '';
             $intBTCSpeed = isset($_POST['run_speed_btc']) ? intval($_POST['run_speed_btc']) : $intDefaultBTCSpeed;
             $strLTCAddress = isset($_POST['address_ltc']) ? htmlspecialchars($_POST['address_ltc']) : '';
             $strLTCAccount = isset($_POST['account_ltc']) ? htmlspecialchars($_POST['account_ltc']) : '';
             $strLTCPassword = isset($_POST['password_ltc']) ? htmlspecialchars($_POST['password_ltc']) : '';
             $intLTCSpeed = isset($_POST['run_speed_ltc']) ? intval($_POST['run_speed_ltc']) : $intDefaultLTCSpeed;
             $strGetRunMode = isset($_POST['runmodel']) ? htmlspecialchars($_POST['runmodel']) : '';
             if (!empty($strGetRunMode) && in_array($strGetRunMode, array('L', 'LB'))) {
                 RunModel::model()->storeRunMode($strGetRunMode);
                 $strRunMode = $strGetRunMode;
             }
             $aryBTCData['ad'] = $strBTCAddress;
             $aryBTCData['ac'] = $strBTCAccount;
             $aryBTCData['pw'] = $strBTCPassword;
             $aryBTCData['speed'] = $intBTCSpeed;
             //$aryBTCData['su'] = isset( $aryBTCData['su'] ) ? $aryBTCData['su'] : 1;
             $aryLTCData['ad'] = $strLTCAddress;
             $aryLTCData['ac'] = $strLTCAccount;
             $aryLTCData['pw'] = $strLTCPassword;
             $aryLTCData['speed'] = $intLTCSpeed;
             //$aryLTCData['su'] = isset( $aryLTCData['su'] ) ? $aryLTCData['su'] : 1;
             if (in_array($strRunMode, array('L'))) {
                 $boolCheck = CUtil::isParamsEmpty($aryLTCData);
                 if ($boolCheck === false) {
                     throw new CModelException(CUtil::i18n('exception,scrypt_setting_haveNullData'));
                 }
             } else {
                 if (in_array($strRunMode, array('B'))) {
                     $boolCheck = CUtil::isParamsEmpty($aryBTCData);
                     if ($boolCheck === false) {
                         throw new CModelException(CUtil::i18n('exception,sha_setting_haveNullData'));
                     }
                 }
             }
             // store data
             $redis->writeByKey('btc.setting', json_encode($aryBTCData));
             $redis->writeByKey('ltc.setting', json_encode($aryLTCData));
             $redis->saveData();
             $aryTipData['status'] = 'success';
             $aryTipData['text'] = CUtil::i18n('controllers,index_saveData_success');
         }
     } catch (Exception $e) {
         $aryTipData['status'] = 'error';
         $aryTipData['text'] = $e->getMessage();
     }
     $aryData = array();
     $aryData['tip'] = $aryTipData;
     $aryData['btc'] = $aryBTCData;
     $aryData['ltc'] = $aryLTCData;
     $aryData['runmodel'] = $strRunMode;
     $aryData['speedDefBTC'] = $intDefaultBTCSpeed;
     $aryData['speedDefLTC'] = $intDefaultLTCSpeed;
     $aryData['speedBTC'] = $aryBTCData['speed'];
     $aryData['speedLTC'] = $aryLTCData['speed'];
     $aryData['aryBTCSpeed'] = $aryBTCSpeed;
     $aryData['aryLTCSpeed'] = $aryLTCSpeed;
     $this->render('index', $aryData);
 }