package handler

import (
	"context"
	"runtime"
	"time"

	proto "github.com/micro/go-micro/debug/proto"
)

type Debug struct {
	proto.DebugHandler
	started int64
}

var (
	DefaultHandler = newDebug()
)

func newDebug() *Debug {
	return &Debug{
		started: time.Now().Unix(),
	}
}

func (d *Debug) Health(ctx context.Context, req *proto.HealthRequest, rsp *proto.HealthResponse) error {
	rsp.Status = "ok"
	return nil
}

func (d *Debug) Stats(ctx context.Context, req *proto.StatsRequest, rsp *proto.StatsResponse) error {
	var mstat runtime.MemStats
	runtime.ReadMemStats(&mstat)

	rsp.Started = uint64(d.started)
	rsp.Uptime = uint64(time.Now().Unix() - d.started)
	rsp.Memory = mstat.Alloc
	rsp.Gc = mstat.PauseTotalNs
	rsp.Threads = uint64(runtime.NumGoroutine())
	return nil
}