/** * 获取矿机数据 * * @author zhangyi * @date 2014-6-5 */ public function actionSpeedData() { $isOk = 0; $msg = ''; $aryData = array(); try { $objSpeedModel = SpeedModel::model(); /* if( Nbt::app() -> request -> isAjaxRequest ) { */ $aryData = $objSpeedModel->getSpeedDataByFile(); $strMode = ''; // If Sfards 3301 chip if (strpos(SYS_INFO, 'SF3301') === 0) { $strMode = 'sf'; } //如果数据不存在,则刷新一次数据 if (empty($aryData) && $objSpeedModel->refreshSpeedData($strMode) === true) { $aryData = $objSpeedModel->getSpeedDataByFile(); } //如果数据依然不存在,则抛出系统异常错误 if (!empty($aryData)) { $aryTemp['L'] = array_values($aryData['L']); $aryTemp['B'] = array_values($aryData['B']); $aryData = $aryTemp; unset($aryTemp); $isOk = 1; } else { throw new CModelException(CUtil::i18n('exception,sys_error')); } /* } else { throw new CModelException( CUtil::i18n('exception,sys_error') ); } */ } catch (CModelException $e) { $msg = $e->getMessage(); } echo $this->encodeAjaxData($isOk, $aryData, $msg); exit; }
/** * 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; }