// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

import (
	"encoding/json"
	"fmt"
	"os"
	"path/filepath"
	"time"

	cloudmonitoring "google.golang.org/api/monitoring/v3"

	"v.io/jiri/tool"
	"v.io/v23/context"
	"v.io/x/devtools/internal/test"
	"v.io/x/lib/gcm"
)

// checkRPCLoadTest checks the result of RPC load test and sends the result to GCM.
func checkRPCLoadTest(v23ctx *context.T, ctx *tool.Context, s *cloudmonitoring.Service) error {
	// Parse result file.
	seq := ctx.NewSeq()
	resultFile := filepath.Join(os.Getenv("WORKSPACE"), "load_stats.json")
	bytes, err := seq.ReadFile(resultFile)
	if err != nil {
		return err
	}
	var results struct {
		MsecPerRpc float64
		Qps        float64
	}
	if err := json.Unmarshal(bytes, &results); err != nil {
		return nil
	}

	// Send to GCM.
	items := map[string]float64{
		"latency": results.MsecPerRpc,
		"qps":     results.Qps,
	}
	mdRpcLoadTest, err := gcm.GetMetric("rpc-load-test", projectFlag)
	if err != nil {
		return err
	}
	fi, err := seq.Stat(resultFile)
	if err != nil {
		return err
	}
	timeStr := fi.ModTime().UTC().Format(time.RFC3339)
	for label, value := range items {
		if err := sendDataToGCM(s, mdRpcLoadTest, value, timeStr, "", "", label); err != nil {
			test.Fail(ctx, "%s: %f\n", label, value)
			return fmt.Errorf("Timeseries Write failed: %v", err)
		}
		test.Pass(ctx, "%s: %f\n", label, value)
	}
	return nil
}
