This commit is contained in:
2026-03-02 23:21:47 +01:00
parent 589f560137
commit 6cfea15b9e
6 changed files with 537 additions and 7 deletions

128
test_sample.py Normal file
View File

@@ -0,0 +1,128 @@
#!/usr/bin/env python3
"""
Simple test script to verify the log parsing and monitoring functionality
"""
import sys
import os
import tempfile
import time
from main import LogParser, Config, LogMonitor
def test_log_parsing():
"""Test log parsing functionality"""
print("Testing log parsing...")
# Test access log
access_line = '45.153.34.68 - - [02/Mar/2026:21:22:38 +0000] "GET / HTTP/1.1" 444 0 "-" "Mozilla/5.0"'
parsed = LogParser.parse_log_line(access_line)
assert parsed is not None, "Failed to parse access log"
assert parsed['type'] == 'access', "Wrong log type"
assert parsed['ip'] == '45.153.34.68', "Wrong IP"
print("✓ Access log parsing works")
# Test error log
error_line = '2026/03/02 04:11:13 [error] 1083281#1083281: *3381930 connect() failed (113: No route to host) while connecting to upstream, client: 185.71.113.95, server: jellyfin.nussnougate.net, request: "POST /Sessions/Playing/Progress HTTP/1.1", upstream: "http://192.168.100.101:8096/Sessions/Playing/Progress", host: "jellyfin.nussnougate.net"'
parsed = LogParser.parse_log_line(error_line)
assert parsed is not None, "Failed to parse error log"
assert parsed['type'] == 'error', "Wrong log type"
assert parsed['ip'] == '185.71.113.95', "Wrong IP"
print("✓ Error log parsing works")
# Test NAXSI log
naxsi_line = '{"ip":"192.253.248.11","server":"jellyfin.nussnougate.net","uri":"/","config":"block","rid":"a3da57ce31e7a5489d0625abe261f6e0","cscore0":"$UWA","score0":8,"zone0":"HEADERS","id0":10000034,"var_name0":"user-agent"}, client: 192.253.248.11, server: jellyfin.nussnougate.net, request: "GET / HTTP/1.1", host: "jellyfin.nussnougate.net", referrer: "http://jellyfin.nussnougate.net//.git/HEAD"'
parsed = LogParser.parse_log_line(naxsi_line)
assert parsed is not None, "Failed to parse NAXSI log"
assert parsed['type'] == 'error', "Wrong log type"
assert parsed['subtype'] == 'naxsi', "Wrong subtype"
assert parsed['ip'] == '192.253.248.11', "Wrong IP"
print("✓ NAXSI log parsing works")
def test_config_loading():
"""Test configuration loading"""
print("\nTesting configuration loading...")
config = Config()
logbull_config = config.get_logbull_config()
assert 'host' in logbull_config, "Missing LogBull host in config"
assert 'project_id' in logbull_config, "Missing LogBull project_id in config"
log_files = config.get_log_files()
assert len(log_files) > 0, "No log files configured"
service_config = config.get_service_config()
assert 'poll_interval' in service_config, "Missing poll_interval in config"
print("✓ Configuration loading works")
def test_file_monitoring():
"""Test file monitoring functionality"""
print("\nTesting file monitoring...")
# Create temporary log file
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.log') as f:
temp_log_file = f.name
f.write('45.153.34.68 - - [02/Mar/2026:21:22:38 +0000] "GET / HTTP/1.1" 444 0 "-" "Mozilla/5.0"\n')
f.write('2026/03/02 04:11:13 [error] 1083281#1083281: *3381930 connect() failed (113: No route to host) while connecting to upstream, client: 185.71.113.95, server: test.example.com, request: "POST /test HTTP/1.1", host: "test.example.com"\n')
try:
# Create a test config with our temp file
test_config_content = """
logbull:
host: "http://localhost:4005"
project_id: "778e67d7-5ec6-4c48-b199-cfbded605557"
flush_interval: 1
log_files:
- "{}"
service:
poll_interval: 0.1
max_lines_per_batch: 10
log_level: "DEBUG"
""".format(temp_log_file)
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.yaml') as f:
temp_config_file = f.name
f.write(test_config_content)
# Test monitor initialization
config = Config(temp_config_file)
monitor = LogMonitor(config)
# Process logs
monitor.process_logs()
print("✓ File monitoring works")
finally:
# Clean up
os.unlink(temp_log_file)
os.unlink(temp_config_file)
def main():
"""Run all tests"""
print("Running tests for proxy-to-logbull...\n")
try:
test_log_parsing()
test_config_loading()
test_file_monitoring()
print("\n🎉 All tests passed! The service is ready to use.")
print("\nTo run the service:")
print(" python3 main.py")
print("\nTo run as a systemd service:")
print(" sudo cp proxy-to-logbull.service /etc/systemd/system/")
print(" sudo systemctl daemon-reload")
print(" sudo systemctl start proxy-to-logbull")
print(" sudo systemctl enable proxy-to-logbull")
except Exception as e:
print(f"\n❌ Test failed: {e}")
import traceback
traceback.print_exc()
sys.exit(1)
if __name__ == "__main__":
main()