// Copyright 2016 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 internal

import (
	"v.io/v23/naming"

	"v.io/x/ref/lib/stats"
	"v.io/x/ref/lib/stats/counter"
)

func NewCounters(id string) *Counters {
	base := naming.Join("messenger", id)
	return &Counters{
		numPeers:            stats.NewCounter(naming.Join(base, "num-peers")),
		numMessagesSent:     stats.NewCounter(naming.Join(base, "num-peer-messages-sent")),
		numBytesSent:        stats.NewCounter(naming.Join(base, "num-peer-bytes-sent")),
		numMessagesReceived: stats.NewCounter(naming.Join(base, "num-peer-messages-received")),
		numBytesReceived:    stats.NewCounter(naming.Join(base, "num-peer-bytes-received")),
	}
}

type Counters struct {
	numPeers            *counter.Counter
	numMessagesSent     *counter.Counter
	numBytesSent        *counter.Counter
	numMessagesReceived *counter.Counter
	numBytesReceived    *counter.Counter
}
