func (store *dataStore) ServerStats() *common.ServerStats { serverStats := common.ServerStats{ Dirs: make([]common.StorageDirectoryStats, len(store.shards)), } for shardIdx := range store.shards { shard := store.shards[shardIdx] serverStats.Dirs[shardIdx].Path = shard.path r := levigo.Range{ Start: []byte{0}, Limit: []byte{0xff}, } vals := shard.ldb.GetApproximateSizes([]levigo.Range{r}) serverStats.Dirs[shardIdx].ApproximateBytes = vals[0] serverStats.Dirs[shardIdx].LevelDbStats = shard.ldb.PropertyValue("leveldb.stats") store.msink.lg.Debugf("levedb.stats for %s: %s\n", shard.path, shard.ldb.PropertyValue("leveldb.stats")) } serverStats.LastStartMs = store.startMs serverStats.CurMs = common.TimeToUnixMs(time.Now().UTC()) serverStats.ReapedSpans = atomic.LoadUint64(&store.rpr.ReapedSpans) store.msink.PopulateServerStats(&serverStats) return &serverStats }
// Read the server stats. func (msink *MetricsSink) PopulateServerStats(stats *common.ServerStats) { msink.lock.Lock() defer msink.lock.Unlock() stats.IngestedSpans = msink.IngestedSpans stats.WrittenSpans = msink.WrittenSpans stats.ServerDroppedSpans = msink.ServerDropped stats.MaxWriteSpansLatencyMs = msink.wsLatencyCircBuf.Max() stats.AverageWriteSpansLatencyMs = msink.wsLatencyCircBuf.Average() stats.HostSpanMetrics = make(common.SpanMetricsMap) for k, v := range msink.HostSpanMetrics { stats.HostSpanMetrics[k] = &common.SpanMetrics{ Written: v.Written, ServerDropped: v.ServerDropped, } } }