From 935639b9086b625fc7006874c6ee491293748f1d Mon Sep 17 00:00:00 2001
From: Chris Lu <chris.lu@gmail.com>
Date: Sun, 16 Jun 2019 21:56:41 -0700
Subject: [PATCH] metrics: disk size for <collection, normal/EC>

---
 weed/stats/metrics.go    | 19 ++++++-------------
 weed/storage/store.go    |  9 ++++++---
 weed/storage/store_ec.go |  8 +++++---
 3 files changed, 17 insertions(+), 19 deletions(-)

diff --git a/weed/stats/metrics.go b/weed/stats/metrics.go
index 2408b607a..d487768af 100644
--- a/weed/stats/metrics.go
+++ b/weed/stats/metrics.go
@@ -60,23 +60,17 @@ var (
 		prometheus.GaugeOpts{
 			Namespace: "SeaweedFS",
 			Subsystem: "volumeServer",
-			Name:      "ecShards",
+			Name:      "ec_shards",
 			Help:      "Number of EC shards.",
 		})
-	VolumeServerVolumeSizeGauge = prometheus.NewGauge(
+
+	VolumeServerDiskSizeGauge = prometheus.NewGaugeVec(
 		prometheus.GaugeOpts{
 			Namespace: "SeaweedFS",
 			Subsystem: "volumeServer",
-			Name:      "totalVolumeSize",
+			Name:      "total_disk_size",
 			Help:      "Actual disk size used by volumes.",
-		})
-	VolumeServerEcShardSizeGauge = prometheus.NewGauge(
-		prometheus.GaugeOpts{
-			Namespace: "SeaweedFS",
-			Subsystem: "volumeServer",
-			Name:      "totalEcShardSize",
-			Help:      "Actual disk size used by ec shards.",
-		})
+		}, []string{"collection", "type"})
 )
 
 func init() {
@@ -88,8 +82,7 @@ func init() {
 	VolumeServerGather.MustRegister(VolumeServerRequestHistogram)
 	VolumeServerGather.MustRegister(VolumeServerVolumeCounter)
 	VolumeServerGather.MustRegister(VolumeServerEcShardCounter)
-	VolumeServerGather.MustRegister(VolumeServerVolumeSizeGauge)
-	VolumeServerGather.MustRegister(VolumeServerEcShardSizeGauge)
+	VolumeServerGather.MustRegister(VolumeServerDiskSizeGauge)
 
 }
 
diff --git a/weed/storage/store.go b/weed/storage/store.go
index 1f1337e59..2d8be7be3 100644
--- a/weed/storage/store.go
+++ b/weed/storage/store.go
@@ -162,7 +162,7 @@ func (s *Store) CollectHeartbeat() *master_pb.Heartbeat {
 	var volumeMessages []*master_pb.VolumeInformationMessage
 	maxVolumeCount := 0
 	var maxFileKey NeedleId
-	var totalVolumeSize uint64
+	collectionVolumeSize := make(map[string]uint64)
 	for _, location := range s.Locations {
 		maxVolumeCount = maxVolumeCount + location.MaxVolumeCount
 		location.Lock()
@@ -181,11 +181,14 @@ func (s *Store) CollectHeartbeat() *master_pb.Heartbeat {
 				}
 			}
 			fileSize, _, _ := v.FileStat()
-			totalVolumeSize += fileSize
+			collectionVolumeSize[v.Collection] += fileSize
 		}
 		location.Unlock()
 	}
-	stats.VolumeServerVolumeSizeGauge.Set(float64(totalVolumeSize))
+
+	for col, size := range collectionVolumeSize {
+		stats.VolumeServerDiskSizeGauge.WithLabelValues(col, "normal").Set(float64(size))
+	}
 
 	return &master_pb.Heartbeat{
 		Ip:             s.Ip,
diff --git a/weed/storage/store_ec.go b/weed/storage/store_ec.go
index d5e361041..b39776dcf 100644
--- a/weed/storage/store_ec.go
+++ b/weed/storage/store_ec.go
@@ -20,20 +20,22 @@ import (
 
 func (s *Store) CollectErasureCodingHeartbeat() *master_pb.Heartbeat {
 	var ecShardMessages []*master_pb.VolumeEcShardInformationMessage
-	var totalEcShardSize int64
+	collectionEcShardSize := make(map[string]int64)
 	for _, location := range s.Locations {
 		location.ecVolumesLock.RLock()
 		for _, ecShards := range location.ecVolumes {
 			ecShardMessages = append(ecShardMessages, ecShards.ToVolumeEcShardInformationMessage()...)
 
 			for _, ecShard := range ecShards.Shards {
-				totalEcShardSize += ecShard.Size()
+				collectionEcShardSize[ecShards.Collection] += ecShard.Size()
 			}
 		}
 		location.ecVolumesLock.RUnlock()
 	}
 
-	stats.VolumeServerEcShardSizeGauge.Set(float64(totalEcShardSize))
+	for col, size := range collectionEcShardSize {
+		stats.VolumeServerDiskSizeGauge.WithLabelValues(col, "ec").Set(float64(size))
+	}
 
 	return &master_pb.Heartbeat{
 		EcShards:      ecShardMessages,