refactor: refactor the code for qol.go
This commit is contained in:
51
internal/qol/results/writer.go
Normal file
51
internal/qol/results/writer.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package results
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
type DNSMetric struct {
|
||||
Domain string `json:"domain"`
|
||||
QueryType string `json:"query_type"`
|
||||
Protocol string `json:"protocol"`
|
||||
DNSSEC bool `json:"dnssec"`
|
||||
DNSServer string `json:"dns_server"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
Duration int64 `json:"duration_ns"`
|
||||
DurationMs float64 `json:"duration_ms"`
|
||||
RequestSize int `json:"request_size_bytes"`
|
||||
ResponseSize int `json:"response_size_bytes"`
|
||||
ResponseCode string `json:"response_code"`
|
||||
Error string `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
type MetricsWriter struct {
|
||||
encoder *json.Encoder
|
||||
file *os.File
|
||||
}
|
||||
|
||||
func NewMetricsWriter(path string) (*MetricsWriter, error) {
|
||||
file, err := os.Create(path)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("create json output: %w", err)
|
||||
}
|
||||
|
||||
return &MetricsWriter{
|
||||
encoder: json.NewEncoder(file),
|
||||
file: file,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (mw *MetricsWriter) WriteMetric(metric DNSMetric) error {
|
||||
return mw.encoder.Encode(metric)
|
||||
}
|
||||
|
||||
func (mw *MetricsWriter) Close() error {
|
||||
if mw.file != nil {
|
||||
return mw.file.Close()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user