Program Listing for File log_filter.h

Return to documentation for file (/tmp/ws/src/log_view/include/log_view/log_filter.h)

#ifndef LOG_VIEW_LOG_FILTER_H_
#define LOG_VIEW_LOG_FILTER_H_

#include <array>
#include <cstdint>
#include <deque>
#include <map>

#include <log_view/datatypes.h>
#include <log_view/log_store.h>

namespace log_view {

class LogFilter {
public:
  explicit LogFilter(LogStorePtr& logs);

  void setCursorOffset(int64_t offset) { cursor_offset_ = offset; }

  void setFilter(const std::string& filter);
  std::string getFilterString() const { return filter_string_; }
  void setExclude(const std::string& exclude);
  void setDebugLevel(bool enable);
  void setInfoLevel(bool enable);
  void setWarnLevel(bool enable);
  void setErrorLevel(bool enable);
  void setFatalLevel(bool enable);
  void setEnableNodeFilter(bool enable);
  void toggleNode(const std::string& node);
  void selectAllNodes();
  void invertNodes();

  bool getDebugLevel() const { return debug_level_; }
  bool getInfoLevel() const { return info_level_; }
  bool getWarnLevel() const { return warn_level_; }
  bool getErrorLevel() const { return error_level_; }
  bool getFatalLevel() const { return fatal_level_; }
  bool getEnableNodeFilter() const { return filter_nodes_; }

  void reset();
  void update();
  void idleProcess();

  void setCursor(int64_t index);
  size_t getCursor();

  void clearSelect();

  void setSelectStart(int64_t index);
  int64_t getSelectStart();

  void setSelectEnd(int64_t index);
  int64_t getSelectEnd();

  void search(const std::string& pattern);
  void nextMatch();
  void prevMatch();
  void clearSearch();
  std::string getSearch() const { return search_; }

  const std::deque<LogLine>& indices() const { return log_indices_; }
  const std::map<std::string, NodeData>& nodes() const { return nodes_; }

  int64_t search_cursor_ = -1;
  int64_t search_cursor_fwd_ = -1;
  int64_t search_cursor_rev_ = -1;

private:
  bool accepted(const LogEntry& entry, bool new_entry = false);

  LogStorePtr logs_;

  std::deque<LogLine> log_indices_;
  size_t latest_log_index_ = 0;
  size_t earliest_log_index_ = 0;

  int64_t cursor_ = -1;
  int64_t select_start_ = -1;
  int64_t select_end_ = -1;

  int64_t cursor_offset_ = 0;

  enum SearchDirection { SEARCH_BOTH, SEARCH_FWD, SEARCH_REV };
  std::string search_;
  int search_direction_ = SEARCH_BOTH;

  bool debug_level_ = true;
  bool info_level_ = true;
  bool warn_level_ = true;
  bool error_level_ = true;
  bool fatal_level_ = true;
  bool filter_nodes_ = false;

  std::string filter_string_;

  std::vector<std::string> filter_list_;
  std::vector<std::string> exclude_list_;

  std::map<std::string, NodeData> nodes_;
};
typedef std::shared_ptr<LogFilter> LogFilterPtr;

}  // namespace log_view

#endif  // LOG_VIEW_LOG_FILTER_H_