log_parser_bench_test.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package nginx_log
  2. import (
  3. "testing"
  4. )
  5. func BenchmarkLogParser_ParseLine(b *testing.B) {
  6. mockUA := NewMockUserAgentParser()
  7. parser := NewOptimizedLogParser(mockUA)
  8. logLine := `192.168.1.1 - - [25/Dec/2023:10:00:00 +0000] "GET /test HTTP/1.1" 200 1024 "https://example.com" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"`
  9. b.ResetTimer()
  10. for i := 0; i < b.N; i++ {
  11. _, _ = parser.ParseLine(logLine)
  12. }
  13. }
  14. func BenchmarkUserAgentParser_Parse(b *testing.B) {
  15. parser := NewSimpleUserAgentParser()
  16. userAgent := "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
  17. b.ResetTimer()
  18. for i := 0; i < b.N; i++ {
  19. _ = parser.Parse(userAgent)
  20. }
  21. }
  22. func BenchmarkLogParser_ParseLineComplex(b *testing.B) {
  23. parser := NewOptimizedLogParser(NewSimpleUserAgentParser())
  24. logLine := `192.168.1.1 - - [25/Dec/2023:10:00:00 +0000] "GET /api/v1/users/123?include=profile&format=json HTTP/1.1" 200 2048 "https://example.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" 0.456 0.123`
  25. b.ResetTimer()
  26. for i := 0; i < b.N; i++ {
  27. _, _ = parser.ParseLine(logLine)
  28. }
  29. }
  30. func BenchmarkUserAgentParser_ParseMobile(b *testing.B) {
  31. parser := NewSimpleUserAgentParser()
  32. userAgent := "Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1"
  33. b.ResetTimer()
  34. for i := 0; i < b.N; i++ {
  35. _ = parser.Parse(userAgent)
  36. }
  37. }
  38. func BenchmarkUserAgentParser_ParseAndroid(b *testing.B) {
  39. parser := NewSimpleUserAgentParser()
  40. userAgent := "Mozilla/5.0 (Linux; Android 11; SM-G991B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Mobile Safari/537.36"
  41. b.ResetTimer()
  42. for i := 0; i < b.N; i++ {
  43. _ = parser.Parse(userAgent)
  44. }
  45. }
  46. func BenchmarkDetectLogFormat(b *testing.B) {
  47. logLines := []string{`192.168.1.1 - - [25/Dec/2023:10:00:00 +0000] "GET /test HTTP/1.1" 200 1024 "https://example.com" "Mozilla/5.0"`}
  48. b.ResetTimer()
  49. for i := 0; i < b.N; i++ {
  50. _ = DetectLogFormat(logLines)
  51. }
  52. }