diff --git a/src/jobs/http.go b/src/jobs/http.go index 1ebd9a6f..611b07ed 100644 --- a/src/jobs/http.go +++ b/src/jobs/http.go @@ -79,8 +79,10 @@ func fastHTTPJob(ctx context.Context, globalConfig GlobalConfig, args Args, debu return err } - trafficMonitor := metrics.Default.NewWriter("traffic", uuid.New().String()) + trafficMonitor := metrics.Default.NewWriter(metrics.Traffic, uuid.New().String()) go trafficMonitor.Update(ctx, time.Second) + processedTrafficMonitor := metrics.Default.NewWriter(metrics.ProcessedTraffic, uuid.NewString()) + go processedTrafficMonitor.Update(ctx, time.Second) req := fasthttp.AcquireRequest() defer fasthttp.ReleaseRequest(req) @@ -102,12 +104,13 @@ func fastHTTPJob(ctx context.Context, globalConfig GlobalConfig, args Args, debu dataSize += len(key) + len(value) } + trafficMonitor.Add(dataSize) if err := sendFastHTTPRequest(client, req, debug); err != nil { if debug { log.Printf("Error sending request %v: %v", req, err) } } else { - trafficMonitor.Add(dataSize) + processedTrafficMonitor.Add(dataSize) } time.Sleep(time.Duration(jobConfig.IntervalMs) * time.Millisecond) diff --git a/src/jobs/packetgen.go b/src/jobs/packetgen.go index 795d7bdc..43a07c45 100644 --- a/src/jobs/packetgen.go +++ b/src/jobs/packetgen.go @@ -67,7 +67,7 @@ func packetgenJob(ctx context.Context, globalConfig GlobalConfig, args Args, deb return err } - trafficMonitor := metrics.Default.NewWriter("traffic", uuid.New().String()) + trafficMonitor := metrics.Default.NewWriter(metrics.Traffic, uuid.New().String()) go trafficMonitor.Update(ctx, time.Second) for jobConfig.Next(ctx) { diff --git a/src/jobs/rawnet.go b/src/jobs/rawnet.go index 6bca5ec8..59270b86 100644 --- a/src/jobs/rawnet.go +++ b/src/jobs/rawnet.go @@ -47,7 +47,7 @@ func tcpJob(ctx context.Context, globalConfig GlobalConfig, args Args, debug boo return fmt.Errorf("error parsing body template %q: %v", jobConfig.Body, err) } - trafficMonitor := metrics.Default.NewWriter("traffic", uuid.New().String()) + trafficMonitor := metrics.Default.NewWriter(metrics.Traffic, uuid.New().String()) go trafficMonitor.Update(ctx, time.Second) for jobConfig.Next(ctx) { @@ -123,7 +123,7 @@ func udpJob(ctx context.Context, globalConfig GlobalConfig, args Args, debug boo return fmt.Errorf("error parsing body template %q: %v", jobConfig.Body, err) } - trafficMonitor := metrics.Default.NewWriter("traffic", uuid.New().String()) + trafficMonitor := metrics.Default.NewWriter(metrics.Traffic, uuid.New().String()) go trafficMonitor.Update(ctx, time.Second) for jobConfig.Next(ctx) { diff --git a/src/metrics/metrics.go b/src/metrics/metrics.go index b02eb1e4..d1f7dee2 100644 --- a/src/metrics/metrics.go +++ b/src/metrics/metrics.go @@ -29,6 +29,12 @@ import ( "time" ) +// supported default metrics +const ( + Traffic = "traffic" + ProcessedTraffic = "processed_traffic" +) + // Storage is a general struct to store custom metrics type Storage struct { trackers map[string]*metricTracker @@ -44,7 +50,8 @@ var Default Storage func init() { Default = Storage{trackers: make(map[string]*metricTracker)} - Default.trackers["traffic"] = &metricTracker{} + Default.trackers[Traffic] = &metricTracker{} + Default.trackers[ProcessedTraffic] = &metricTracker{} } func (ms *Storage) Write(name, jobID string, value int) { diff --git a/src/runner/runner.go b/src/runner/runner.go index e1bb2830..99f3f409 100644 --- a/src/runner/runner.go +++ b/src/runner/runner.go @@ -152,7 +152,8 @@ func dumpMetrics(path, name, clientID string, debug bool) { } }() - bytesGenerated := metrics.Default.Read(name) + bytesGenerated := metrics.Default.Read(metrics.Traffic) + bytesProcessed := metrics.Default.Read(metrics.ProcessedTraffic) err := utils.ReportStatistics(int64(bytesGenerated), clientID) if err != nil && debug { log.Println("error reporting statistics:", err) @@ -160,7 +161,10 @@ func dumpMetrics(path, name, clientID string, debug bool) { if bytesGenerated > 0 { log.Println("Атака проводиться успішно! Руський воєнний корабль іди нахуй!") log.Println("Attack is successful! Russian warship, go fuck yourself!") - log.Printf("The app has generated approximately %v bytes of traffic", bytesGenerated) + log.Printf("The app has generated approximately %v bytes of traffic\n", bytesGenerated) + if bytesProcessed > 0 { + log.Printf("Of which for %v bytes we received some response from the target", bytesProcessed) + } } else { log.Println("The app doesn't seem to generate any traffic, please contact your admin") }