diff --git a/api/proto/gosdn/networkelement/networkelement.proto b/api/proto/gosdn/networkelement/networkelement.proto index 34b4ec2add78faa304c3c70afefa966d770d58c3..2ce4e5df736ff187bbf54caa909eaa3f3c014d5d 100644 --- a/api/proto/gosdn/networkelement/networkelement.proto +++ b/api/proto/gosdn/networkelement/networkelement.proto @@ -389,4 +389,4 @@ message SubscribePathRequest { message SubscribePathResponse { int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. repeated gnmi.Notification mne_notification = 2; -} \ No newline at end of file +} diff --git a/applications/rtdt-manager/rtdt-manager/rtdt-manager.go b/applications/rtdt-manager/rtdt-manager/rtdt-manager.go index 5c136713914689d9fb3a6bb0638fcccbba9bf888..d08f800f64f180558ce73575eacf58221be96b84 100644 --- a/applications/rtdt-manager/rtdt-manager/rtdt-manager.go +++ b/applications/rtdt-manager/rtdt-manager/rtdt-manager.go @@ -277,7 +277,7 @@ func (r *RtdtManager) RunBenchmark0(numTests int64) error { if err != nil { fmt.Printf("Encountered error: %v\n", err) } - time.Sleep(time.Second * 1) + time.Sleep(time.Second * 2) } r.benchmark0 = false return nil diff --git a/controller/benchmark/benchmark.go b/controller/benchmark/benchmark.go new file mode 100644 index 0000000000000000000000000000000000000000..2ce9a7d405eca726ea8a20e7d6d4279ec7d22a80 --- /dev/null +++ b/controller/benchmark/benchmark.go @@ -0,0 +1,53 @@ +package rtdt_benchmark + +import ( + "encoding/json" + "fmt" + "os" + "time" +) + +type Rtdt_Benchmark struct { + CtlRcvPathRequest time.Time + CtlRcvCommitRequest time.Time + CtlSendGnmi time.Time + CtlRcvGnmi time.Time +} + +var CurrentBenchmark Rtdt_Benchmark + +func AppendToJsonFile(r *Rtdt_Benchmark) { + var benchmarks []Rtdt_Benchmark + if _, err := os.Stat("/app/gosdn_share/measure_controller.json"); err == nil { + data, err := os.ReadFile("/app/gosdn_share/measure_controller.json") + if err != nil { + fmt.Println("Error reading file:", err) + return + } + if len(data) > 0 { + err = json.Unmarshal(data, &benchmarks) + if err != nil { + fmt.Println("Error unmarshaling JSON:", err) + return + } + } + } else if !os.IsNotExist(err) { + fmt.Println("Error checking file status:", err) + return + } + + // Append the new benchmark + benchmarks = append(benchmarks, *r) + + // Marshal and write back to file + outData, err := json.MarshalIndent(benchmarks, "", " ") + if err != nil { + fmt.Println("Error marshaling JSON:", err) + return + } + + err = os.WriteFile("/app/gosdn_share/measure_controller.json", outData, 0644) + if err != nil { + fmt.Println("Error writing to file:", err) + } +} diff --git a/controller/northbound/server/networkElement.go b/controller/northbound/server/networkElement.go index 6ea85a4895a51a448c829984fbf064474addea89..4ce53396dd59ce9c4ffa93245c0f96651aa45457 100644 --- a/controller/northbound/server/networkElement.go +++ b/controller/northbound/server/networkElement.go @@ -10,6 +10,7 @@ import ( plugin_registry "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-registry" ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport" + rtdt_benchmark "code.fbi.h-da.de/danet/gosdn/controller/benchmark" "code.fbi.h-da.de/danet/gosdn/controller/config" "code.fbi.h-da.de/danet/gosdn/controller/conflict" "code.fbi.h-da.de/danet/gosdn/controller/customerrs" @@ -712,6 +713,8 @@ func (n *NetworkElementServer) initialNetworkElementRootPathRequest(ctx context. // SetChangeList sets a list of changes. func (n *NetworkElementServer) SetChangeList(ctx context.Context, request *mnepb.SetChangeListRequest) (*mnepb.SetChangeListResponse, error) { labels := prometheus.Labels{"service": "mne", "rpc": "set"} + rtdt_benchmark.CurrentBenchmark.CtlRcvCommitRequest = time.Now() + start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) @@ -748,6 +751,7 @@ func (n *NetworkElementServer) SetChangeList(ctx context.Context, request *mnepb Id: cuid.String(), } } + rtdt_benchmark.AppendToJsonFile(&rtdt_benchmark.CurrentBenchmark) return &mnepb.SetChangeListResponse{ Timestamp: time.Now().UnixNano(), Responses: responses, @@ -800,6 +804,8 @@ func (n *NetworkElementServer) Confirm(u uuid.UUID) error { // SetPathList sets a list of paths. func (n *NetworkElementServer) SetPathList(ctx context.Context, request *mnepb.SetPathListRequest) (*mnepb.SetPathListResponse, error) { + rtdt_benchmark.CurrentBenchmark = rtdt_benchmark.Rtdt_Benchmark{} + rtdt_benchmark.CurrentBenchmark.CtlRcvPathRequest = time.Now() labels := prometheus.Labels{"service": "mne", "rpc": "set"} start := metrics.StartHook(labels, grpcRequestsTotal) defer metrics.FinishHook(labels, start, grpcRequestDurationSecondsTotal, grpcRequestDurationSeconds) diff --git a/controller/nucleus/gnmi_transport.go b/controller/nucleus/gnmi_transport.go index f25f8c0093e828916bb5c0fe88defcb3b22cd6f1..4abf8de429cdfa922d20a38bd46b0ffa031c502f 100644 --- a/controller/nucleus/gnmi_transport.go +++ b/controller/nucleus/gnmi_transport.go @@ -6,6 +6,7 @@ import ( "os" "time" + rtdt_benchmark "code.fbi.h-da.de/danet/gosdn/controller/benchmark" "code.fbi.h-da.de/danet/gosdn/controller/config" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/change" tpInterface "code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport" @@ -124,7 +125,9 @@ func (g *Gnmi) applyDiff(ctx context.Context, payload change.Payload) error { Update: updates, } + rtdt_benchmark.CurrentBenchmark.CtlSendGnmi = time.Now() resp, err := g.client.Set(ctx, setRequest) + rtdt_benchmark.CurrentBenchmark.CtlRcvGnmi = time.Unix(0, resp.Timestamp) if err != nil { return err }