Ejemplo n.º 1
0
FifoReaderManager::FifoReaderManager(
    folly::EventBase& evb, ParserMap& map, std::string dir,
    std::unique_ptr<boost::regex> filenamePattern)
    : evb_(evb),
      parserMap_(map),
      directory_(std::move(dir)),
      filenamePattern_(std::move(filenamePattern)) {
  runScanDirectory();
}
Ejemplo n.º 2
0
FifoReaderManager::FifoReaderManager(
    folly::EventBase& evb, MessageReadyFn messageReady, std::string dir,
    std::unique_ptr<boost::regex> filenamePattern)
    : evb_(evb),
      messageReady_(std::move(messageReady)),
      directory_(std::move(dir)),
      filenamePattern_(std::move(filenamePattern)) {
  runScanDirectory();
}
Ejemplo n.º 3
0
void FifoReaderManager::runScanDirectory() {
  auto fifos = getMatchedFiles();
  for (const auto& fifo : fifos) {
    if (fifoReaders_.find(fifo) != fifoReaders_.end()) {
      continue;
    }
    auto fd = ::open(fifo.c_str(), O_RDONLY | O_NONBLOCK);
    if (fd >= 0) {
      auto pipeReader = folly::AsyncPipeReader::UniquePtr(
          new folly::AsyncPipeReader(&evb_, fd));
      auto callback = folly::make_unique<FifoReadCallback>(fifo, parserMap_);
      pipeReader->setReadCB(callback.get());
      fifoReaders_.emplace(fifo,
                           FifoReader(std::move(pipeReader),
                                      std::move(callback)));
    } else {
      PLOG(WARNING) << "Error opening fifo: " << fifo;
    }
  }

  evb_.runAfterDelay([this]() {
      runScanDirectory();
    }, kPollDirectoryIntervalMs);
}