Beispiel #1
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     #$this->executePre($input, $output);
     #$bytesizeFormatter = new Binary();
     #$bytesize = new ByteSize($bytesizeFormatter);
     $bytesize = new ByteSize();
     if ($input->hasOption('name') && $input->getOption('name')) {
         print PhpChat::NAME;
     } elseif ($input->hasOption('name_lc') && $input->getOption('name_lc')) {
         print strtolower(PhpChat::NAME);
     } elseif ($input->hasOption('version_number') && $input->getOption('version_number')) {
         print PhpChat::VERSION;
     } elseif ($input->hasOption('connections') && $input->getOption('connections')) {
         print 'Live Connections' . PHP_EOL . PHP_EOL;
         $this->executePre($input, $output);
         $this->log = new Logger($this->getName());
         #$this->log->pushHandler(new StreamHandler('php://stdout', Logger::DEBUG));
         $this->log->pushHandler(new StreamHandler($this->getLogfilePath(), Logger::DEBUG));
         $this->initIpcKernelConnection();
         $color = new Color();
         $startTime = time();
         $time = time();
         $seconds = 0;
         $oldClients = array();
         $clientsIdMax = 0;
         $tcols = (int) exec('tput cols');
         $tlines = (int) exec('tput lines');
         #print 'cols: '.$tcols.PHP_EOL;
         #print 'lines: '.$tlines.PHP_EOL;
         $baseLines = 5;
         print ' Traffic IN:  N/A' . PHP_EOL;
         print ' Traffic OUT: N/A' . PHP_EOL;
         #print ' Traffic AVG: N/A'.PHP_EOL;
         print ' Clients: N/A' . PHP_EOL;
         #sleep(1);
         #print '---A'.PHP_EOL;
         print '' . PHP_EOL;
         #sleep(1);
         #print '---B'.PHP_EOL;
         print ' ' . PHP_EOL;
         #sleep(1);
         Console::cursorJumpToColumn(1);
         #sleep(1);
         Console::cursorUp($baseLines);
         #sleep(1);
         while (!$this->getExit()) {
             #$this->log->debug('run');
             if (!$this->ipcKernelConnection->run()) {
                 $this->log->info('Connection to kernel process end unexpected.');
                 $this->setExit(1);
             }
             $update = false;
             if ($time != time()) {
                 $time = time();
                 $seconds++;
                 $tcols = (int) exec('tput cols');
                 $tlines = (int) exec('tput lines');
                 $update = true;
             }
             $update = true;
             if ($update) {
                 $clientsInfo = $this->ipcKernelConnection->execSync('serverClientsInfo');
                 $clientsId = $clientsInfo['clientsId'];
                 $clientsChanged = 0;
                 foreach ($clientsInfo['clients'] as $newClientId => $newClient) {
                     if (isset($oldClients[$newClientId])) {
                         $oldClient = $oldClients[$newClientId];
                         $changed = false;
                         foreach (static::$CONNECTION_INFO_FIELDS as $fieldName) {
                             if ($oldClient[$fieldName] != $newClient[$fieldName]) {
                                 $this->log->debug('update ' . $newClientId . ': ' . $fieldName . '=' . (int) $newClient[$fieldName]);
                                 $oldClients[$newClientId][$fieldName] = $newClient[$fieldName];
                                 $oldClients[$newClientId]['lastUpdate'] = time();
                             }
                         }
                         if ($changed) {
                             $clientsChanged++;
                         }
                     } else {
                         $this->log->debug('new client: ' . $newClientId);
                         $oldClients[$newClientId] = array('lastUpdate' => time(), 'hasId' => $newClient['hasId'], 'hasTalkRequest' => $newClient['hasTalkRequest'], 'hasTalk' => $newClient['hasTalk'], 'hasTalkClose' => $newClient['hasTalkClose'], 'hasShutdown' => $newClient['hasShutdown'], 'isChannelPeer' => $newClient['isChannelPeer'], 'isChannelLocal' => $newClient['isChannelLocal'], 'isOutbound' => $newClient['isOutbound'], 'isInbound' => $newClient['isInbound'], 'isBridgeServer' => $newClient['isBridgeServer'], 'isBridgeClient' => $newClient['isBridgeClient'], 'shutdown' => 0, 'status' => '.');
                     }
                 }
                 foreach ($oldClients as $oldClientId => $oldClient) {
                     if (!isset($clientsInfo['clients'][$oldClientId]) || $oldClient['hasShutdown']) {
                         if (!$oldClients[$oldClientId]['shutdown']) {
                             $this->log->debug('update ' . $oldClientId . ': shutdown=1');
                             $oldClients[$oldClientId]['shutdown'] = time();
                             $oldClients[$oldClientId]['lastUpdate'] = time();
                         }
                     }
                     if ($oldClient['isOutbound']) {
                         $oldClients[$oldClientId]['status'] = 'o';
                     }
                     if ($oldClient['isInbound']) {
                         $oldClients[$oldClientId]['status'] = 'i';
                     }
                     if ($oldClient['isChannelPeer'] || $oldClient['isChannelLocal']) {
                         $oldClients[$oldClientId]['status'] = 'c';
                     }
                     if ($oldClient['isBridgeServer'] || $oldClient['isBridgeClient']) {
                         $oldClients[$oldClientId]['status'] = 'b';
                     }
                     if ($oldClient['hasTalkRequest']) {
                         $oldClients[$oldClientId]['status'] = 't';
                     }
                     if ($oldClient['hasTalk']) {
                         $oldClients[$oldClientId]['status'] = 'T';
                     }
                     if ($oldClient['hasTalkClose']) {
                         $oldClients[$oldClientId]['status'] = 'X';
                     }
                     if ($oldClient['shutdown']) {
                         #$this->log->debug('client '.$oldClientId.' has shutdown: '.(time() - $oldClient['shutdown']));
                         $oldClients[$oldClientId]['status'] = 'x';
                         if ($oldClient['shutdown'] <= time() - 5) {
                             unset($oldClients[$oldClientId]);
                         }
                     }
                 }
                 $oldClientsLen = count($oldClients);
                 Console::cursorJumpToColumn(15);
                 #sleep(1);
                 print $bytesize->format($clientsInfo['traffic']['in']);
                 #sleep(1);
                 Console::lineClearRight();
                 #sleep(1);
                 print Console::cursorDown();
                 #sleep(1);
                 Console::cursorJumpToColumn(15);
                 #sleep(1);
                 print $bytesize->format($clientsInfo['traffic']['out']);
                 #sleep(1);
                 Console::lineClearRight();
                 #sleep(1);
                 print Console::cursorDown();
                 #sleep(1);
                 Console::cursorJumpToColumn(11);
                 #sleep(1);
                 print $oldClientsLen . ' / ' . $clientsId;
                 #sleep(1);
                 Console::lineClearRight();
                 #sleep(1);
                 print Console::cursorDown();
                 #sleep(1);
                 /*Console::cursorJumpToColumn(15);
                 		#sleep(1);
                 		$trafficTotal = bcadd($clientsInfo['traffic']['in'], $clientsInfo['traffic']['out']);
                 		print $bytesize->format(bcdiv($trafficTotal, time() - $clientsInfo['timeCreated'])).'/s';
                 		#print time() - $clientsInfo['timeCreated'];
                 		#sleep(1);
                 		Console::lineClearRight();
                 		#sleep(1);
                 		print Console::cursorDown();
                 		#sleep(1);*/
                 print Console::cursorDown();
                 #sleep(1);
                 Console::cursorJumpToColumn(2);
                 #sleep(1);
                 #print PHP_EOL.' ';
                 #sleep(1);
                 $line = 0;
                 $lineClients = 0;
                 foreach ($oldClients as $oldClientId => $oldClient) {
                     #$this->log->debug('client '.$oldClientId.' print: '.(time() - $oldClient['lastUpdate']));
                     $output = $oldClient['status'];
                     if ($oldClient['lastUpdate'] >= time() - 2) {
                         $output = $color($oldClient['status'])->bg_green;
                     } elseif ($oldClient['lastUpdate'] <= time() - 60) {
                         #$output = $color($oldClient['status'])->dark;
                         $output = $color($oldClient['status'])->bg_blue;
                     }
                     print $output;
                     $lineClients++;
                     if ($lineClients >= $tcols - 2) {
                         $lineClients = 0;
                         $line++;
                         print PHP_EOL . ' ';
                     }
                 }
                 Console::screenClearToBottom();
                 #sleep(1);
                 print PHP_EOL;
                 #sleep(1);
                 Console::cursorJumpToColumn(1);
                 #sleep(1);
                 Console::cursorUp($line + $baseLines);
                 #sleep(1);
             }
             usleep(static::LOOP_USLEEP);
         }
         #sleep(1);
         Console::cursorUp();
         #sleep(1);
         Console::screenClearToBottom();
         #sleep(1);
         $this->executePost();
         $this->log->info('exit');
     } else {
         $settings = $this->getSettings();
         $localNode = new Node();
         $localNode->setIdHexStr($settings->data['node']['id']);
         $localNode->setUri($settings->data['node']['uriLocal']);
         $localNode->setSslKeyPub(file_get_contents($settings->data['node']['sslKeyPubPath']));
         $trafficIn = $bytesize->format($settings->data['node']['traffic']['in']);
         $trafficIn .= ' (' . $settings->data['node']['traffic']['in'] . ' byte)';
         $trafficOut = $bytesize->format($settings->data['node']['traffic']['out']);
         $trafficOut .= ' (' . $settings->data['node']['traffic']['out'] . ' byte)';
         print '--------' . PHP_EOL;
         print 'Informations about local node:' . PHP_EOL;
         print '   Version: ' . PhpChat::NAME . '/' . PhpChat::VERSION . ' (release ' . PhpChat::RELEASE . ')' . PHP_EOL;
         print '   ID: ' . $localNode->getIdHexStr() . PHP_EOL;
         print '   Public key fingerprint: ' . $localNode->getSslKeyPubFingerprint() . PHP_EOL;
         print '   Last public IP: ' . $settings->data['node']['uriPub'] . PHP_EOL;
         print '   Listen IP:Port: ' . $settings->data['node']['uriLocal'] . PHP_EOL;
         print '   Traffic IN:  ' . $trafficIn . PHP_EOL;
         print '   Traffic OUT: ' . $trafficOut . PHP_EOL;
         print '   Nickname: ' . $settings->data['user']['nickname'] . PHP_EOL;
         print '   SSL version: ' . OPENSSL_VERSION_TEXT . PHP_EOL;
         print '--------' . PHP_EOL;
         print '   Pub Key Base64:' . PHP_EOL . base64_encode($localNode->getSslKeyPub()) . PHP_EOL;
         print '--------' . PHP_EOL;
     }
     #$this->executePost();
 }
Beispiel #2
0
 public function testCreateGuzzleHttpClient()
 {
     $runName = uniqid('', true);
     $prvFileName = 'testfile_cronjob_id_rsa_' . date('Ymd_His') . '_' . $runName . '.prv';
     $pubFileName = 'testfile_cronjob_id_rsa_' . date('Ymd_His') . '_' . $runName . '.pub';
     $settignsFileName = 'testfile_cronjob_settings_' . date('Ymd_His') . '_' . $runName . '.pub';
     file_put_contents('test_data/' . $prvFileName, static::NODE_LOCAL_SSL_KEY_PRV);
     file_put_contents('test_data/' . $pubFileName, static::NODE_LOCAL_SSL_KEY_PUB);
     $settings = new Settings('test_data/' . $settignsFileName);
     $settings->data['datadir'] = 'test_data';
     $settings->data['node']['id'] = Node::genIdHexStr(static::NODE_LOCAL_SSL_KEY_PUB);
     $settings->data['node']['sslKeyPrvPass'] = '******';
     $settings->data['node']['sslKeyPrvPath'] = 'test_data/' . $prvFileName;
     $settings->data['node']['sslKeyPubPath'] = 'test_data/' . $pubFileName;
     $settings->data['node']['bridge']['client']['enabled'] = true;
     $localNode = new Node();
     $localNode->setIdHexStr($settings->data['node']['id']);
     $localNode->setUri($settings->data['node']['uriLocal']);
     $localNode->setSslKeyPub(file_get_contents($settings->data['node']['sslKeyPubPath']));
     $table = new Table();
     $table->setDatadirBasePath($settings->data['datadir']);
     $table->setLocalNode($localNode);
     $nodesNewDb = new NodesNewDb('test_data/testfile_cronjob_nodesnewdb2.yml');
     $nodesNewDb->nodeAddConnect('tcp://192.168.241.21', false);
     $nodesNewDb->nodeAddConnect('tcp://192.168.241.22', true);
     $nodesNewDb->nodeAddFind('cafed00d-2131-4159-8e11-0b4dbadb1742', false);
     $nodesNewDb->nodeAddFind('cafed00d-2131-4159-8e11-0b4dbadb1743', true);
     $cronjobLog = new Logger('cronjob');
     #$cronjobLog->pushHandler(new LoggerStreamHandler('php://stdout', Logger::DEBUG));
     $cronjob = new Cronjob();
     $cronjob->setLog($cronjobLog);
     $cronjob->setSettings($settings);
     $cronjob->setTable($table);
     $cronjob->setNodesNewDb($nodesNewDb);
     $httpClient = $cronjob->createGuzzleHttpClient();
     #fwrite(STDOUT, 'client: '.get_class($httpClient).''.PHP_EOL);
     #\Doctrine\Common\Util\Debug::dump($httpClient);
     $this->assertTrue(is_object($httpClient));
     $url = 'http://www.example.com/';
     $response = null;
     try {
         #fwrite(STDOUT, 'get url: '.$url.''.PHP_EOL);
         $request = $httpClient->get($url);
         #fwrite(STDOUT, 'request: '.get_class($request).''.PHP_EOL);
         $response = $request->send();
         #fwrite(STDOUT, 'response: '.get_class($response).''.PHP_EOL);
     } catch (Exception $e) {
         #fwrite(STDOUT, 'url failed, "'.$url.'": '.$e->getMessage().PHP_EOL);
     }
     /*if($response){
     			fwrite(STDOUT, 'response: '.$response->getStatusCode().PHP_EOL);
     			fwrite(STDOUT, 'content-type: '.$response->getHeader('content-type').PHP_EOL);
     		}
     		else{
     			fwrite(STDOUT, 'response failed'.PHP_EOL);
     		}*/
 }
Beispiel #3
0
 public function testNodeFindByKeyPubFingerprint()
 {
     $localNode = new Node();
     $localNode->setIdHexStr('10000001-2002-4004-8008-100000000001');
     $table = new Table();
     $table->setLocalNode($localNode);
     $node_a = new Node();
     $node_a->setIdHexStr('10000001-2002-4004-8008-010000000002');
     $node_a->setSslKeyPub(static::NODE_PUB1);
     $table->nodeEnclose($node_a);
     $node_b = new Node();
     $node_b->setIdHexStr('10000001-2002-4004-8008-010000000004');
     $node_b->setSslKeyPub(static::NODE_PUB2);
     $table->nodeEnclose($node_b);
     $node_c = new Node();
     $node_c->setIdHexStr('10000001-2002-4004-8008-010000000008');
     $node_c->setSslKeyPub(static::NODE_PUB3);
     $table->nodeEnclose($node_c);
     $node_d = new Node();
     $node_d->setIdHexStr('10000001-2002-4004-8008-010000000010');
     $node_d->setSslKeyPub(static::NODE_PUB4);
     $table->nodeEnclose($node_d);
     // @codingStandardsIgnoreStart
     $this->assertEquals('FC_SxeHaAyWhC5k3u5Dt7asUcTXHpqtKBGPaAAW1unQu7iBdD75EhhrKb9DjWJFSTNCRM5s6wBW7ntA1C1', $node_a->getSslKeyPubFingerprint());
     $this->assertEquals('FC_U2SazcAsbeRFz7zUXLZsdKvR28XNRk9C7CBNhi2vFe9fbi9QjBUy1Wqb3LK6MHBmNmvMUr69ChaqZe1', $node_b->getSslKeyPubFingerprint());
     $this->assertEquals('FC_V5XQ3ReRPSWeakGv8o48cMXycnqTfK4kfRa9LGSxbxE6ee9s4zz5ucWcfwEUTmBFcHtZBLK2dpY1DHH', $node_c->getSslKeyPubFingerprint());
     $this->assertEquals('FC_U25pDTHoiEEpop6PLggboYRiGjMszhRp4cstJE6aUJXLn79YjnQYfDLgbppw4FzR455Fr5nUCbvdiuw', $node_d->getSslKeyPubFingerprint());
     $this->assertEquals($node_a, $table->nodeFindByKeyPubFingerprint('FC_SxeHaAyWhC5k3u5Dt7asUcTXHpqtKBGPaAAW1unQu7iBdD75EhhrKb9DjWJFSTNCRM5s6wBW7ntA1C1'));
     $this->assertEquals($node_b, $table->nodeFindByKeyPubFingerprint('FC_U2SazcAsbeRFz7zUXLZsdKvR28XNRk9C7CBNhi2vFe9fbi9QjBUy1Wqb3LK6MHBmNmvMUr69ChaqZe1'));
     $this->assertEquals($node_c, $table->nodeFindByKeyPubFingerprint('FC_V5XQ3ReRPSWeakGv8o48cMXycnqTfK4kfRa9LGSxbxE6ee9s4zz5ucWcfwEUTmBFcHtZBLK2dpY1DHH'));
     $this->assertEquals($node_d, $table->nodeFindByKeyPubFingerprint('FC_U25pDTHoiEEpop6PLggboYRiGjMszhRp4cstJE6aUJXLn79YjnQYfDLgbppw4FzR455Fr5nUCbvdiuw'));
     $this->assertEquals(null, $table->nodeFindByKeyPubFingerprint('xyz'));
     // @codingStandardsIgnoreEnd
 }
Beispiel #4
0
 public function testNodeFindByKeyPubFingerprint()
 {
     $localNode = new Node();
     $localNode->setIdHexStr('10000001-2002-4004-8008-100000000001');
     $table = new Table();
     $table->setLocalNode($localNode);
     $node_a = new Node();
     $node_a->setIdHexStr('10000001-2002-4004-8008-010000000002');
     $node_a->setSslKeyPub(static::NODE_PUB1);
     $table->nodeEnclose($node_a);
     $node_b = new Node();
     $node_b->setIdHexStr('10000001-2002-4004-8008-010000000004');
     $node_b->setSslKeyPub(static::NODE_PUB2);
     $table->nodeEnclose($node_b);
     $node_c = new Node();
     $node_c->setIdHexStr('10000001-2002-4004-8008-010000000008');
     $node_c->setSslKeyPub(static::NODE_PUB3);
     $table->nodeEnclose($node_c);
     $node_d = new Node();
     $node_d->setIdHexStr('10000001-2002-4004-8008-010000000010');
     $node_d->setSslKeyPub(static::NODE_PUB4);
     $table->nodeEnclose($node_d);
     $this->assertEquals('FC_6JtmjHgZjZmgc3Q5mts5C2wmiuMa1TWyR', $node_a->getSslKeyPubFingerprint());
     $this->assertEquals('FC_FeYW3XyyaF8cHJXaRT1QJMdQRGsCiiz69', $node_b->getSslKeyPubFingerprint());
     $this->assertEquals('FC_NtKjyedUakTj3MPuckWjF4aY23JvGmm8w', $node_c->getSslKeyPubFingerprint());
     $this->assertEquals('FC_EYj4eSzaxkwMfQkmtdTSBLrx5CZqdXPMq', $node_d->getSslKeyPubFingerprint());
     $this->assertEquals($node_b, $table->nodeFindByKeyPubFingerprint('FC_FeYW3XyyaF8cHJXaRT1QJMdQRGsCiiz69'));
     $this->assertEquals($node_c, $table->nodeFindByKeyPubFingerprint('FC_NtKjyedUakTj3MPuckWjF4aY23JvGmm8w'));
 }
Beispiel #5
0
 /**
  * @expectedException RuntimeException
  */
 public function testSetSslKeyPubRuntimeException()
 {
     $node = new Node();
     $node->setSslKeyPub('invalid');
 }