Ejemplo n.º 1
0
 public function buildLogger(Container $container)
 {
     $logger = new Logger($container['names_resolver']);
     /** @var Config $config */
     $config = $container['config'];
     $loggingConfig = $config->getSection('logging');
     $shouldResolve = Ar::get($loggingConfig, 'resolve') ?: false;
     $logger->setResolveNames($shouldResolve);
     $loggingEntries = Ar::get($loggingConfig, 'handlers') ?: [];
     Ar::each($loggingEntries, function ($loggingEntry) use($logger, $container) {
         $filter = Ar::get($loggingEntry, 'filter') ?: 255;
         $handlerName = Ar::get($loggingEntry, 'handler');
         switch ($handlerName) {
             case 'slack':
                 $channels = Ar::get($loggingEntry, 'channels') ?: [];
                 $handler = (new SlackHandler($container['slack_facade']))->setChannels($channels)->setFilter($filter);
                 break;
             case 'console':
                 $handler = (new ConsoleOutputHandler())->setFilter($filter);
                 break;
             default:
                 return;
         }
         $logger->addHandler($handler);
     });
     $container['logger'] = $logger;
 }
Ejemplo n.º 2
0
 /**
  * Processes !-command
  * @param RequestDto $dto
  */
 public function processCommand(RequestDto $dto)
 {
     $words = preg_split('/\\s+/is', $dto->getText());
     $command = Ar::get($words, 0);
     if (null === $command || '!' !== substr($command, 0, 1)) {
         return;
     }
     $command = substr($command, 1);
     Logger::get()->info("id: %s, %s is executing command \"%s\" at %s", $dto->getId(), $dto->getUser(), $dto->getText(), $dto->getChannel());
     /** @var BaseCommandHandler $commandHandler */
     foreach ($this->commandHandlers as $commandHandler) {
         $commandName = $commandHandler->getName();
         if (is_array($commandName)) {
             if (!in_array($command, $commandName)) {
                 continue;
             }
         } else {
             if ($commandName !== $command) {
                 continue;
             }
         }
         $allowed = $this->checkAccess($dto, $commandHandler);
         if (!$allowed) {
             $this->slackFacade->multiSendMessage([$dto->getChannel()], sprintf('SYSTEM: access to command !%s denied', $commandHandler->getName()));
             Logger::get()->warning("id: %s, access denied for %s trying to run \"%s\" at %s", $dto->getId(), $dto->getUser(), $dto->getText(), $dto->getChannel());
             return;
         }
         unset($words[0]);
         if ($commandHandler->canProcessCommand($words, $dto->getChannel())) {
             /** @var SlackFacade $slackFacade */
             $slackFacade = Registry::get('container')['slack_facade'];
             $commandHandler->setCallerId($dto->getUser());
             $commandHandler->setCallerName($slackFacade->getUserNameById($dto->getUser()));
             Logger::get()->debug("id: %s, starting %s command handler", $dto->getId(), $commandHandler->getName());
             $commandHandler->processCommand($words, $dto->getChannel());
             Logger::get()->debug("id: %s, finished %s command handler", $dto->getId(), $commandHandler->getName());
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * Fires request to Slack server and returns response
  * @param string $method Slack API method to call
  * @param array $data request data
  * @return array
  * @throws \Exception
  */
 private function processRequest($method, $data = [])
 {
     $methodsToFilter = ['api.test', 'rtm.start', 'chat.postMessage'];
     $method = $this->getApiMethodName($method);
     $url = self::BASE_URL . $method;
     $data['token'] = $this->token;
     if (true !== Ar::get($data, 'in_logger')) {
         Logger::get()->raw("➡️ %s", $url, json_encode($data));
     }
     /** @var ApiCache $cache */
     $cache = Registry::get('container')['api_cache'];
     $cachedResponse = $cache->get($url, $data);
     if (null !== $cachedResponse && !in_array($method, $methodsToFilter)) {
         if (true !== Ar::get($data, 'in_logger')) {
             Logger::get()->raw("⬅️ %s: cache hit", $url);
         }
         return $cachedResponse;
     }
     $result = $this->curlRequest->getCurlResult($url, [CURLOPT_POST => true, CURLOPT_POSTFIELDS => $data])['body'];
     if (true !== Ar::get($data, 'in_logger')) {
         Logger::get()->raw("⬅️ %s", $url, $result);
     }
     if (!in_array($method, $methodsToFilter)) {
         $cache->set($url, $data, json_decode($result, true));
     }
     return json_decode($result, true);
 }
 public function processCommand(array $args, $channel)
 {
     Logger::get()->warning('Server restarted by %s', $this->getCallerName());
     Posix::execute(['sudo service supervisord restart']);
 }