diff --git a/.gitignore b/.gitignore index f64b612..b607033 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,7 @@ generated/ *.dylib *.dll *.exe -parselog_cli +LumberJack # ========================================== # Language Server & IDE Support (Arch Linux / Dev Tools) diff --git a/CMakeLists.txt b/CMakeLists.txt index 25cfd5d..e9d46a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.15) -project(ParseLogCLI LANGUAGES CXX) +project(LumberJack LANGUAGES CXX) # System and compiler configurations set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -11,7 +11,7 @@ include(FetchContent) # ========================================== # 1. CORE LIBRARY TARGET # ========================================== -add_library(parselog_core +add_library(LumberJack_core log_parsing/log_parsing.cpp ip_to_geo/ip_to_geo.cpp env_reader/env.cpp @@ -20,7 +20,7 @@ add_library(parselog_core ) # Include paths for your modules and MaxMind headers -target_include_directories(parselog_core PRIVATE +target_include_directories(LumberJack_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/log_parsing ${CMAKE_CURRENT_SOURCE_DIR}/ip_to_geo ${CMAKE_CURRENT_SOURCE_DIR}/third_party/include @@ -30,41 +30,41 @@ target_include_directories(parselog_core PRIVATE if(WIN32) if(MSVC) # Windows via Visual Studio Compiler - target_link_libraries(parselog_core PRIVATE + target_link_libraries(LumberJack_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/maxminddb.lib ) else() # Windows via MinGW/GCC Toolchain - target_link_libraries(parselog_core PRIVATE + target_link_libraries(LumberJack_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a ) endif() # Windows requires Windows Sockets API linked for libmaxminddb network resolutions - target_link_libraries(parselog_core PRIVATE ws2_32) + target_link_libraries(LumberJack_core PRIVATE ws2_32) elseif(APPLE) # macOS Specific Path Integrations (Handles Intel /opt/local and Apple Silicon /opt/homebrew) find_library(MAXMIND_LIB maxminddb HINTS /opt/homebrew/lib /usr/local/lib /opt/local/lib) if(MAXMIND_LIB) - target_link_libraries(parselog_core PRIVATE ${MAXMIND_LIB}) + target_link_libraries(LumberJack_core PRIVATE ${MAXMIND_LIB}) else() # Fallback to local static file repository boundary if brew package is missing - target_link_libraries(parselog_core PRIVATE + target_link_libraries(LumberJack_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a ) endif() else() # Standard Linux (Ubuntu, Arch Linux, Fedora, etc.) - target_link_libraries(parselog_core PRIVATE + target_link_libraries(LumberJack_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a ) endif() # Version definitions needed by your GeoLite2PP wrapper -target_compile_definitions(parselog_core PRIVATE +target_compile_definitions(LumberJack_core PRIVATE GEOLITE2PP_VERSION="0.0.1" ) @@ -81,18 +81,18 @@ FetchContent_MakeAvailable(ftxui) # ========================================== # 3. APPLICATION EXECUTABLE # ========================================== -add_executable(parselog_cli main.cpp) +add_executable(LumberJack main.cpp) -target_link_libraries(parselog_cli +target_link_libraries(LumberJack PRIVATE - parselog_core + LumberJack_core ftxui::screen ftxui::dom ftxui::component ) # CROSS-PLATFORM FIXED: Output targets route uniformly into the root project space -set_target_properties(parselog_cli PROPERTIES +set_target_properties(LumberJack PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}" RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}" diff --git a/README.md b/README.md index 49bed3a..32c7e50 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -This TUI program is for taking in an Apache2 access log file and providing an interactive interface to check your logs. +LumberJack TUI takes in an Apache2 access log file and provides an interactive interface to check your logs. REQUIREMENTS: - Access to a GeoLite2-City.mmdb database file. @@ -11,5 +11,7 @@ NOTES: FUTURE CHANGES: -- Filtering functionality +- Better filtering functionality +- Ban IP functionality +- Access Date/Time column - Sorting by column (asc/desc) \ No newline at end of file diff --git a/env_reader/env.hpp b/env_reader/env.hpp index b4ff117..ccd91c3 100644 --- a/env_reader/env.hpp +++ b/env_reader/env.hpp @@ -1,7 +1,7 @@ /** * @file env.hpp * @author Lewis Price (lewis.e.price@outlook.com) - * @brief + * @brief A set of functions for reading/creating the .env file * @version 1.0.0 * @date 2026-06-09 * diff --git a/ip_to_geo/ip_to_geo.hpp b/ip_to_geo/ip_to_geo.hpp index 77dab6a..a3576bd 100644 --- a/ip_to_geo/ip_to_geo.hpp +++ b/ip_to_geo/ip_to_geo.hpp @@ -1,9 +1,9 @@ /** - * @file ip_to_geo.h - * @author Lew Price (lewis.e.price@outlook.com) + * @file ip_to_geo.hpp + * @author Lewis Price (lewis.e.price@outlook.com) * @brief A series of functions for checking the location of a given IP - * @version 0.1 - * @date 2026-06-03 + * @version 1.0.0 + * @date 2026-06-09 * * @copyright Copyright (c) 2026 * diff --git a/log_parsing/log_parsing.hpp b/log_parsing/log_parsing.hpp index 26e591c..7e99441 100644 --- a/log_parsing/log_parsing.hpp +++ b/log_parsing/log_parsing.hpp @@ -1,9 +1,9 @@ /** - * @file log_parsing.h - * @author Lew Price (lewis.e.price@outlook.com) + * @file log_parsing.hpp + * @author Lewis Price (lewis.e.price@outlook.com) * @brief A series of functions for parsing the access logs of an Apache2 webserver. - * @version 0.1 - * @date 2026-05-28 + * @version 1.0.0 + * @date 2026-06-09 * * @copyright Copyright (c) 2026 * diff --git a/main.cpp b/main.cpp index 4b94676..ea0a83f 100644 --- a/main.cpp +++ b/main.cpp @@ -1,3 +1,14 @@ +/** + * @file main.cpp + * @author Lewis Price (lewis.e.price@outlook.com) + * @brief The main run file for LumberJack TUI + * @version 1.0.0 + * @date 2026-06-09 + * + * @copyright Copyright (c) 2026 + * + */ + #include #include #include @@ -213,7 +224,7 @@ int main() { " Resize columns: Shift+← / Shift+→ " "│ Switch column: ← / → " "│ Scroll: ↑↓ or wheel " - "│ q = quit "; + "│ q / esc = quit "; return vbox({ text(" ParseLogCLI Live Monitor ") | bold | color(Color::Blue) | border,