1
0
Fork 0
mnemonics/route/metric.go

61 lines
1.7 KiB
Go
Raw Normal View History

2016-03-07 04:31:13 +09:00
package route
import (
"github.com/gin-gonic/gin"
"runtime"
"time"
2016-03-07 19:16:06 +09:00
"amuz.es/go/mnemonics/util"
2016-03-07 04:31:13 +09:00
"fmt"
)
var (
startTime = time.Now()
)
2016-03-07 19:16:06 +09:00
func Metric(c *gin.Context) {
memory:=serializeMemoryStat()
content := gin.H{"memory":memory}
c.JSON(200, content)
2016-03-07 04:31:13 +09:00
}
2016-03-07 19:16:06 +09:00
func serializeMemoryStat() map[string]interface{} {
2016-03-07 04:31:13 +09:00
m := new(runtime.MemStats)
runtime.ReadMemStats(m)
2016-03-07 19:16:06 +09:00
return gin.H{
"uptime":util.TimeSincePro(startTime),
"numGoroutine":runtime.NumGoroutine(),
"memAllocated":util.FileSize(int64(m.Alloc)),
"memTotal":util.FileSize(int64(m.TotalAlloc)),
"memSys":util.FileSize(int64(m.Sys)),
"lookups":m.Lookups,
"memMallocs":m.Mallocs,
"memFrees":m.Frees,
"heapAlloc":util.FileSize(int64(m.HeapAlloc)),
"heapSys":util.FileSize(int64(m.HeapSys)),
"heapIdle":util.FileSize(int64(m.HeapIdle)),
"heapInuse":util.FileSize(int64(m.HeapInuse)),
"heapReleased":util.FileSize(int64(m.HeapReleased)),
"heapObjects":m.HeapObjects,
"stackInuse":util.FileSize(int64(m.StackInuse)),
"stackSys":util.FileSize(int64(m.StackSys)),
"mSpanInuse":util.FileSize(int64(m.MSpanInuse)),
"mSpanSys":util.FileSize(int64(m.MSpanSys)),
"mCacheInuse":util.FileSize(int64(m.MCacheInuse)),
"mCacheSys":util.FileSize(int64(m.MCacheSys)),
"buckHashSys":util.FileSize(int64(m.BuckHashSys)),
"gCSys":util.FileSize(int64(m.GCSys)),
"otherSys":util.FileSize(int64(m.OtherSys)),
"nextGC":util.FileSize(int64(m.NextGC)),
"lastGC":fmt.Sprintf("%.1fs", float64(time.Now().UnixNano() - int64(m.LastGC)) / 1000 / 1000 / 1000),
"pauseTotalNs":fmt.Sprintf("%.1fs", float64(m.PauseTotalNs) / 1000 / 1000 / 1000),
"pauseNs":fmt.Sprintf("%.3fs", float64(m.PauseNs[(m.NumGC + 255) % 256]) / 1000 / 1000 / 1000),
"numGC":m.NumGC}
2016-03-07 04:31:13 +09:00
}