summaryrefslogtreecommitdiff
path: root/benchmarks/dcat_direct_benchmark_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'benchmarks/dcat_direct_benchmark_test.go')
-rw-r--r--benchmarks/dcat_direct_benchmark_test.go118
1 files changed, 118 insertions, 0 deletions
diff --git a/benchmarks/dcat_direct_benchmark_test.go b/benchmarks/dcat_direct_benchmark_test.go
new file mode 100644
index 0000000..0d23749
--- /dev/null
+++ b/benchmarks/dcat_direct_benchmark_test.go
@@ -0,0 +1,118 @@
+package benchmarks
+
+import (
+ "bytes"
+ "fmt"
+ "os"
+ "os/exec"
+ "testing"
+ "path/filepath"
+)
+
+// BenchmarkDCatDirect benchmarks dcat in direct/serverless mode
+func BenchmarkDCatDirect(b *testing.B) {
+ // Create test file if it doesn't exist
+ testFile := filepath.Join(b.TempDir(), "benchmark_test.log")
+
+ // Create a 100K line file for benchmarking
+ var buf bytes.Buffer
+ for i := 0; i < 100000; i++ {
+ fmt.Fprintf(&buf, "2025-01-01 10:00:00 INFO [app] Processing request ID=%d status=OK latency=42ms user=user%d path=/api/v1/endpoint%d\n",
+ i, i%100, i%10)
+ }
+
+ if err := os.WriteFile(testFile, buf.Bytes(), 0644); err != nil {
+ b.Fatal(err)
+ }
+
+ // Ensure dcat binary exists
+ dcatPath := "../dcat"
+ if _, err := os.Stat(dcatPath); err != nil {
+ b.Skip("dcat binary not found, run 'make build' first")
+ }
+
+ b.Run("NonTurbo", func(b *testing.B) {
+ os.Unsetenv("DTAIL_TURBOBOOST_ENABLE")
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ cmd := exec.Command(dcatPath, testFile)
+ cmd.Stdout = os.NewFile(0, os.DevNull)
+ if err := cmd.Run(); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+
+ b.Run("Turbo", func(b *testing.B) {
+ os.Setenv("DTAIL_TURBOBOOST_ENABLE", "yes")
+ defer os.Unsetenv("DTAIL_TURBOBOOST_ENABLE")
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ cmd := exec.Command(dcatPath, testFile)
+ cmd.Stdout = os.NewFile(0, os.DevNull)
+ if err := cmd.Run(); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+}
+
+// BenchmarkDCatDirectWithSizes tests different file sizes
+func BenchmarkDCatDirectWithSizes(b *testing.B) {
+ sizes := []struct {
+ name string
+ lines int
+ }{
+ {"1K", 1000},
+ {"10K", 10000},
+ {"100K", 100000},
+ }
+
+ dcatPath := "../dcat"
+ if _, err := os.Stat(dcatPath); err != nil {
+ b.Skip("dcat binary not found, run 'make build' first")
+ }
+
+ for _, size := range sizes {
+ b.Run(size.name, func(b *testing.B) {
+ // Create test file
+ testFile := filepath.Join(b.TempDir(), fmt.Sprintf("benchmark_%s.log", size.name))
+ var buf bytes.Buffer
+ for i := 0; i < size.lines; i++ {
+ fmt.Fprintf(&buf, "2025-01-01 10:00:00 INFO [app] Line %d data\n", i)
+ }
+ if err := os.WriteFile(testFile, buf.Bytes(), 0644); err != nil {
+ b.Fatal(err)
+ }
+
+ b.Run("NonTurbo", func(b *testing.B) {
+ os.Unsetenv("DTAIL_TURBOBOOST_ENABLE")
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ cmd := exec.Command(dcatPath, testFile)
+ cmd.Stdout = os.NewFile(0, os.DevNull)
+ if err := cmd.Run(); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+
+ b.Run("Turbo", func(b *testing.B) {
+ os.Setenv("DTAIL_TURBOBOOST_ENABLE", "yes")
+ defer os.Unsetenv("DTAIL_TURBOBOOST_ENABLE")
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ cmd := exec.Command(dcatPath, testFile)
+ cmd.Stdout = os.NewFile(0, os.DevNull)
+ if err := cmd.Run(); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+ }
+} \ No newline at end of file