// Copyright 2020 The Go 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 worker

import (
	"context"
	"strconv"
	"time"

	"go.opencensus.io/stats"
	"go.opencensus.io/stats/view"
	"go.opencensus.io/tag"
)

var (
	// keyEnqueueStatus is a census tag used to keep track of the status
	// of the modules being enqueued.
	keyEnqueueStatus = tag.MustNewKey("enqueue.status")
	enqueueStatus    = stats.Int64(
		"go-discovery/worker_enqueue_count",
		"The status of a module version enqueued to Cloud Tasks.",
		stats.UnitDimensionless,
	)
	// EnqueueResponseCount counts worker enqueue responses by response type.
	EnqueueResponseCount = &view.View{
		Name:        "go-discovery/worker-enqueue/count",
		Measure:     enqueueStatus,
		Aggregation: view.Count(),
		Description: "Worker enqueue request count",
		TagKeys:     []tag.Key{keyEnqueueStatus},
	}

	processingLag = stats.Int64(
		"go-discovery/worker_processing_lag",
		"Time from appearing in the index to being processed.",
		stats.UnitSeconds,
	)
	ProcessingLag = &view.View{
		Name:        "go-discovery/worker_processing_lag",
		Measure:     processingLag,
		Aggregation: view.LastValue(),
		Description: "worker processing lag",
	}
)

func recordEnqueue(ctx context.Context, status int) {
	stats.RecordWithTags(ctx,
		[]tag.Mutator{tag.Upsert(keyEnqueueStatus, strconv.Itoa(status))},
		enqueueStatus.M(int64(status)))
}

func recordProcessingLag(ctx context.Context, d time.Duration) {
	stats.Record(ctx, processingLag.M(d.Milliseconds()/1000))
}
