156 lines
3.7 KiB
Go
156 lines
3.7 KiB
Go
package http
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"net/http"
|
|
|
|
"go-common/app/admin/main/apm/conf"
|
|
mpprof "go-common/app/admin/main/apm/model/pprof"
|
|
"go-common/library/ecode"
|
|
"go-common/library/log"
|
|
bm "go-common/library/net/http/blademaster"
|
|
)
|
|
|
|
func buildSvg(c *bm.Context) {
|
|
v := new(struct {
|
|
URL string `form:"url" validate:"required"`
|
|
URI string `form:"uri" validate:"required"`
|
|
SvgName string `form:"name" validate:"required"`
|
|
Time int64 `form:"time" validate:"required"`
|
|
HostName string `form:"hostname" validate:"required"`
|
|
})
|
|
var err error
|
|
if err = c.Bind(v); err != nil {
|
|
return
|
|
}
|
|
if !(v.URI == "profile" || v.URI == "heap") {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
err = apmSvc.Pprof(v.URL, v.URI, v.SvgName, v.HostName, v.Time, 2)
|
|
c.JSON(nil, err)
|
|
}
|
|
|
|
func readSvg(c *bm.Context) {
|
|
v := new(struct {
|
|
SvgName string `form:"name" validate:"required"`
|
|
URI string `form:"uri" validate:"required"`
|
|
HostName string `form:"hostname" validate:"required"`
|
|
})
|
|
var err error
|
|
if err = c.Bind(v); err != nil {
|
|
return
|
|
}
|
|
url := conf.Conf.Pprof.Dir + "/" + v.SvgName + "_" + v.HostName + "_" + v.URI + ".svg"
|
|
data, err := ioutil.ReadFile(url)
|
|
if err != nil {
|
|
log.Error("readfile error(%v)", err)
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
c.Bytes(http.StatusOK, "image/svg+xml; charset=utf-8", data)
|
|
}
|
|
|
|
func heap(c *bm.Context) {
|
|
v := new(struct {
|
|
URL string `form:"url" validate:"required"`
|
|
URI string `form:"uri" validate:"required"`
|
|
SvgName string `form:"name" validate:"required"`
|
|
HostName string `form:"hostname" validate:"required"`
|
|
})
|
|
var err error
|
|
var data []byte
|
|
if err = c.Bind(v); err != nil {
|
|
return
|
|
}
|
|
if v.URI != "heap" {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
err = apmSvc.Pprof(v.URL, v.URI, v.SvgName, v.HostName, 1, 1)
|
|
if err != nil {
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
url := conf.Conf.Pprof.Dir + "/" + v.SvgName + "_" + v.HostName + "_" + v.URI + ".svg"
|
|
data, err = ioutil.ReadFile(url)
|
|
if err != nil {
|
|
log.Error("readfile error(%v)", err)
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
c.Bytes(http.StatusOK, "image/svg+xml; charset=utf-8", data)
|
|
}
|
|
|
|
func flame(c *bm.Context) {
|
|
v := new(struct {
|
|
URL string `form:"url" validate:"required"`
|
|
URI string `form:"uri" validate:"required"`
|
|
SvgName string `form:"name" validate:"required"`
|
|
Time int64 `form:"time"`
|
|
HostName string `form:"hostname" validate:"required"`
|
|
})
|
|
var err error
|
|
var data []byte
|
|
if err = c.Bind(v); err != nil {
|
|
return
|
|
}
|
|
if !(v.URI == "profile" || v.URI == "heap") {
|
|
c.JSON(nil, ecode.RequestErr)
|
|
return
|
|
}
|
|
|
|
if v.URI == "heap" {
|
|
err = apmSvc.Torch(c, v.URL, v.URI, v.SvgName, v.HostName, 1, 1)
|
|
if err != nil {
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
url := conf.Conf.Pprof.Dir + "/" + v.SvgName + "_" + v.HostName + "_" + v.URI + "_flame.svg"
|
|
data, err = ioutil.ReadFile(url)
|
|
if err != nil {
|
|
log.Error("readfile error(%v)", err)
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
c.Bytes(http.StatusOK, "image/svg+xml; charset=utf-8", data)
|
|
} else {
|
|
err = apmSvc.Torch(c, v.URL, v.URI, v.SvgName, v.HostName, v.Time, 2)
|
|
c.JSON(nil, err)
|
|
}
|
|
}
|
|
|
|
func activeWarning(c *bm.Context) {
|
|
// var (
|
|
// err error
|
|
// body []byte
|
|
// )
|
|
// if body, err = ioutil.ReadAll(c.Request.Body); err != nil {
|
|
// c.JSON(nil, fmt.Errorf("warning body empty"))
|
|
// return
|
|
// }
|
|
// if err = apmSvc.ActiveWarning(c, string(body)); err != nil {
|
|
// c.JSON(nil, err)
|
|
// return
|
|
// }
|
|
// ioutil.ReadAll You need close body.
|
|
c.JSON(nil, nil)
|
|
}
|
|
|
|
func pprof(c *bm.Context) {
|
|
var (
|
|
err error
|
|
pws = make([]*mpprof.Warn, 0)
|
|
req = &mpprof.Params{}
|
|
)
|
|
if err = c.Bind(req); err != nil {
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
if pws, err = apmSvc.PprofWarn(c, req); err != nil {
|
|
c.JSON(nil, err)
|
|
return
|
|
}
|
|
c.JSON(pws, nil)
|
|
}
|