pull/25/head
sunface 7 years ago
parent b93493243a
commit 962ed940a9

@ -3,7 +3,6 @@ package api
import ( import (
"net/http" "net/http"
"net/rpc" "net/rpc"
"tfgo/tfe/api/async"
"time" "time"
"github.com/mafanr/juz/api/filter" "github.com/mafanr/juz/api/filter"
@ -26,7 +25,7 @@ type ApiServer struct {
} }
func (p *ApiServer) Start() { func (p *ApiServer) Start() {
g.L.Info("start tfe..") g.Info("start tfe..")
// 初始化mysql连接 // 初始化mysql连接
misc.InitMysql() misc.InitMysql()
@ -51,7 +50,7 @@ func (p *ApiServer) Start() {
} }
func (o *ApiServer) Shutdown() { func (o *ApiServer) Shutdown() {
g.L.Info("shutdown tfe..") g.Info("shutdown tfe..")
} }
func (p *ApiServer) listen() { func (p *ApiServer) listen() {
@ -60,8 +59,6 @@ func (p *ApiServer) listen() {
// 回调相关 // 回调相关
//同步回调接口 //同步回调接口
e.Any("/*", p.router.route, timing) e.Any("/*", p.router.route, timing)
//异步回调接口
e.POST("/notify", async.Notify)
e.Logger.Fatal(e.Start(":" + misc.Conf.Api.Port)) e.Logger.Fatal(e.Start(":" + misc.Conf.Api.Port))
} }
@ -70,7 +67,7 @@ func timing(f echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error { return func(c echo.Context) error {
ts := time.Now() ts := time.Now()
rid := (ts.UnixNano()/10)*10 + misc.Conf.Api.ServerID rid := (ts.UnixNano()/10)*10 + misc.Conf.Api.ServerID
g.L.Info("New request accepted", zap.Int64("rid", rid), zap.String("ip", c.RealIP())) g.Info("New request accepted", zap.Int64("rid", rid), zap.String("ip", c.RealIP()))
c.Set("rid", rid) c.Set("rid", rid)
defer func() { defer func() {
// 统计请求指标 // 统计请求指标
@ -85,9 +82,9 @@ func timing(f echo.HandlerFunc) echo.HandlerFunc {
err := c.Get("error_msg") err := c.Get("error_msg")
if err == nil { if err == nil {
g.L.Info("Request success", zap.Int64("rid", rid)) g.Info("Request success", zap.Int64("rid", rid))
} else { } else {
g.L.Info("Request failed", zap.Int64("rid", rid), zap.Error(err.(error))) g.Info("Request failed", zap.Int64("rid", rid), zap.Error(err.(error)))
} }
}() }()
@ -98,7 +95,7 @@ func timing(f echo.HandlerFunc) echo.HandlerFunc {
func (as *ApiServer) initTraffic() { func (as *ApiServer) initTraffic() {
r, err := rpc.Dial("tcp", misc.Conf.Traffic.Host+":"+misc.Conf.Traffic.Port) r, err := rpc.Dial("tcp", misc.Conf.Traffic.Host+":"+misc.Conf.Traffic.Port)
if err != nil { if err != nil {
g.L.Fatal("connect to raffic error", zap.Error(err)) g.Fatal("connect to raffic error", zap.Error(err))
} }
as.router.Filter.Rpc = r as.router.Filter.Rpc = r
@ -108,15 +105,15 @@ func (as *ApiServer) initTraffic() {
var res int var res int
err := as.router.Filter.Rpc.Call("RateLimiter.Ping", 1, &res) err := as.router.Filter.Rpc.Call("RateLimiter.Ping", 1, &res)
if err != nil || res != 1 { if err != nil || res != 1 {
g.L.Warn("rpc ping failed", zap.Error(err)) g.Warn("rpc ping failed", zap.Error(err))
r, err := rpc.Dial("tcp", misc.Conf.Traffic.Host+":"+misc.Conf.Traffic.Port) r, err := rpc.Dial("tcp", misc.Conf.Traffic.Host+":"+misc.Conf.Traffic.Port)
if err != nil { if err != nil {
g.L.Warn("re-connect to traffic error", zap.Error(err)) g.Warn("re-connect to traffic error", zap.Error(err))
time.Sleep(2 * time.Second) time.Sleep(2 * time.Second)
continue continue
} }
as.router.Filter.Rpc = r as.router.Filter.Rpc = r
g.L.Info("re-connect to traffic ok") g.Info("re-connect to traffic ok")
} }
time.Sleep(3 * time.Second) time.Sleep(3 * time.Second)

@ -44,7 +44,7 @@ func (f *Filter) BeforeRoute(r *req.Request) Result {
// 黑白名单 // 黑白名单
err := f.checkBW(r) err := f.checkBW(r)
if err != nil { if err != nil {
g.L.Info("BeforeRoute failed", zap.Error(err)) g.Info("BeforeRoute failed", zap.Error(err))
// 统计被阻挡数 // 统计被阻挡数
stats.Limits.With(prometheus.Labels{ stats.Limits.With(prometheus.Labels{
"api_id": r.Api.APIID, "api_id": r.Api.APIID,
@ -57,7 +57,7 @@ func (f *Filter) BeforeRoute(r *req.Request) Result {
// 参数校验 // 参数校验
err = f.verifyParam(r) err = f.verifyParam(r)
if err != nil { if err != nil {
g.L.Info("BeforeRoute failed", zap.Error(err)) g.Info("BeforeRoute failed", zap.Error(err))
return Result{http.StatusBadRequest, g.ParamInvalidC, g.ParamInvalidE} return Result{http.StatusBadRequest, g.ParamInvalidC, g.ParamInvalidE}
} }

@ -21,7 +21,7 @@ func (f *Filter) DecApiRate(r *req.Request) {
err := f.Rpc.Call("RateLimiter.DecApiRate", &misc.TrafficConReq{r.Api.APIID, r.Api.TrafficStrategy, ""}, &res) err := f.Rpc.Call("RateLimiter.DecApiRate", &misc.TrafficConReq{r.Api.APIID, r.Api.TrafficStrategy, ""}, &res)
if err != nil { if err != nil {
if !strings.Contains(err.Error(), "shut down") { if !strings.Contains(err.Error(), "shut down") {
g.L.Warn("rpc出错了", zap.Error(err)) g.Warn("rpc出错了", zap.Error(err))
} }
} }
} }
@ -48,7 +48,7 @@ func (f *Filter) IncApiRate(r *req.Request) (int, error) {
err := f.Rpc.Call("RateLimiter.IncApiRate", &misc.TrafficConReq{r.Api.APIID, r.Api.TrafficStrategy, val}, &res) err := f.Rpc.Call("RateLimiter.IncApiRate", &misc.TrafficConReq{r.Api.APIID, r.Api.TrafficStrategy, val}, &res)
if err != nil { if err != nil {
if !strings.Contains(err.Error(), "shut down") { if !strings.Contains(err.Error(), "shut down") {
g.L.Warn("rpc出错了", zap.Error(err)) g.Warn("rpc出错了", zap.Error(err))
} }
return 0, nil return 0, nil
} }

@ -33,7 +33,7 @@ func (f *Filter) trafficRoute(r *req.Request) {
api := apiI.(*misc.API) api := apiI.(*misc.API)
// 是否在路由ip列表中如果在直接路由 // 是否在路由ip列表中如果在直接路由
if strings.Contains(r.Api.TrafficIPs, r.ClientIP) { if strings.Contains(r.Api.TrafficIPs, r.ClientIP) {
g.Debug(r.DebugOn, misc.Conf.Common.LogLevel, "Canary by ip", zap.String("old_api", r.Api.APIID), zap.String("new_api", api.APIID), zap.String("client_ip", r.ClientIP)) g.Debug(r.DebugOn, "Canary by ip", zap.String("old_api", r.Api.APIID), zap.String("new_api", api.APIID), zap.String("client_ip", r.ClientIP))
r.Api = api r.Api = api
return return
} }
@ -43,6 +43,6 @@ func (f *Filter) trafficRoute(r *req.Request) {
if n > r.Api.TrafficRatio { if n > r.Api.TrafficRatio {
return return
} }
g.Debug(r.DebugOn, misc.Conf.Common.LogLevel, "Canary by random", zap.String("old_api", r.Api.APIID), zap.String("new_api", api.APIID)) g.Debug(r.DebugOn, "Canary by random", zap.String("old_api", r.Api.APIID), zap.String("new_api", api.APIID))
r.Api = api r.Api = api
} }

@ -38,7 +38,7 @@ func (p *ApiServer) loadAll() {
apisS := make([]*misc.API, 0) apisS := make([]*misc.API, 0)
err := g.DB.Select(&apisS, "select * from api_release") err := g.DB.Select(&apisS, "select * from api_release")
if err != nil { if err != nil {
g.L.Fatal("load apis error!", zap.Error(err)) g.Fatal("load apis error!", zap.Error(err))
} }
an := make([]string, 0, len(apisS)) an := make([]string, 0, len(apisS))
@ -68,7 +68,7 @@ func (p *ApiServer) loadAll() {
strategies := make([]*misc.Strategy, 0) strategies := make([]*misc.Strategy, 0)
err = g.DB.Select(&strategies, "select * from strategy") err = g.DB.Select(&strategies, "select * from strategy")
if err != nil { if err != nil {
g.L.Fatal("load strategies error!", zap.Error(err)) g.Fatal("load strategies error!", zap.Error(err))
} }
for _, s := range strategies { for _, s := range strategies {
@ -110,7 +110,7 @@ func (p *ApiServer) loadUpdated() {
err := g.DB.Select(&apisS, fmt.Sprintf("select * from api_release where modify_date >= '%s'", lastT)) err := g.DB.Select(&apisS, fmt.Sprintf("select * from api_release where modify_date >= '%s'", lastT))
if err != nil { if err != nil {
g.L.Error("load apis error!", zap.Error(err)) g.Error("load apis error!", zap.Error(err))
return return
} }
@ -149,7 +149,7 @@ func (p *ApiServer) loadUpdated() {
query := fmt.Sprintf("select * from strategy where modify_date >= '%s'", lastT) query := fmt.Sprintf("select * from strategy where modify_date >= '%s'", lastT)
err := g.DB.Select(&strategies, query) err := g.DB.Select(&strategies, query)
if err != nil { if err != nil {
g.L.Error("load strategies error!", zap.Error(err), zap.String("query", query)) g.Error("load strategies error!", zap.Error(err), zap.String("query", query))
return return
} }

@ -59,7 +59,7 @@ func (m *Manage) QueryAPI(c echo.Context) error {
err := g.DB.Select(&apis, query) err := g.DB.Select(&apis, query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -101,7 +101,7 @@ func (m *Manage) CountAPI(c echo.Context) error {
rows, err := g.DB.Query(query) rows, err := g.DB.Query(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -156,7 +156,7 @@ func (m *Manage) DefineAPI(c echo.Context) error {
Message: g.AlreadyExistE, Message: g.AlreadyExistE,
}) })
} }
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -169,7 +169,7 @@ func (m *Manage) DefineAPI(c echo.Context) error {
api.APIID, api.PathType, api.Service, api.RouteAddr, misc.API_OFFLINE, date) api.APIID, api.PathType, api.Service, api.RouteAddr, misc.API_OFFLINE, date)
_, err = g.DB.Exec(query) _, err = g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -182,7 +182,7 @@ func (m *Manage) DefineAPI(c echo.Context) error {
*api.Desc, api.RouteType, api.RouteAddr, api.RouteProto, api.BwStrategy, api.RetryStrategy, api.TrafficStrategy, *api.MockData, api.TrafficOn, api.TrafficAPI, api.TrafficRatio, api.TrafficIPs, api.VerifyOn, pr, api.CachedTime, api.App, api.APIID) *api.Desc, api.RouteType, api.RouteAddr, api.RouteProto, api.BwStrategy, api.RetryStrategy, api.TrafficStrategy, *api.MockData, api.TrafficOn, api.TrafficAPI, api.TrafficRatio, api.TrafficIPs, api.VerifyOn, pr, api.CachedTime, api.App, api.APIID)
res, err := g.DB.Exec(query) res, err := g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -246,7 +246,7 @@ func (m *Manage) DeleteAPI(c echo.Context) error {
query := fmt.Sprintf("select status,modify_date from api_release where api_id='%s'", apiID) query := fmt.Sprintf("select status,modify_date from api_release where api_id='%s'", apiID)
rows, err := g.DB.Query(query) rows, err := g.DB.Query(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -287,7 +287,7 @@ func (m *Manage) DeleteAPI(c echo.Context) error {
query = fmt.Sprintf("delete from api_release where api_id='%s'", apiID) query = fmt.Sprintf("delete from api_release where api_id='%s'", apiID)
_, err = g.DB.Exec(query) _, err = g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -300,7 +300,7 @@ func (m *Manage) DeleteAPI(c echo.Context) error {
query = fmt.Sprintf("select * from api_define where api_id='%s'", apiID) query = fmt.Sprintf("select * from api_define where api_id='%s'", apiID)
err = g.DB.Get(&api, query) err = g.DB.Get(&api, query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
} }
if api.ParamTable != nil { if api.ParamTable != nil {
d, _ := g.B64.DecodeString(*api.ParamTable) d, _ := g.B64.DecodeString(*api.ParamTable)
@ -314,7 +314,7 @@ func (m *Manage) DeleteAPI(c echo.Context) error {
query = fmt.Sprintf("delete from api_define where api_id='%s'", apiID) query = fmt.Sprintf("delete from api_define where api_id='%s'", apiID)
_, err = g.DB.Exec(query) _, err = g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -335,7 +335,7 @@ func (m *Manage) parseAPI(c echo.Context) (*misc.API, int, string) {
api := &misc.API{} api := &misc.API{}
err := json.Unmarshal([]byte(apiR), &api) err := json.Unmarshal([]byte(apiR), &api)
if err != nil { if err != nil {
g.L.Info("parse api", zap.Error(err), zap.String("api", string(apiR))) g.Info("parse api", zap.Error(err), zap.String("api", string(apiR)))
return nil, g.ParamInvalidC, g.ParamInvalidE return nil, g.ParamInvalidC, g.ParamInvalidE
} }
@ -440,7 +440,7 @@ func (m *Manage) APIRelease(c echo.Context) error {
query := fmt.Sprintf("select * from api_define where api_id='%s'", apiID) query := fmt.Sprintf("select * from api_define where api_id='%s'", apiID)
err := g.DB.Get(&api, query) err := g.DB.Get(&api, query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -454,7 +454,7 @@ func (m *Manage) APIRelease(c echo.Context) error {
_, err = g.DB.Exec(query) _, err = g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -465,7 +465,7 @@ func (m *Manage) APIRelease(c echo.Context) error {
query = fmt.Sprintf("update api_define set release_version='%s' where api_id='%s'", api.ReviseVersion, api.APIID) query = fmt.Sprintf("update api_define set release_version='%s' where api_id='%s'", api.ReviseVersion, api.APIID)
_, err = g.DB.Exec(query) _, err = g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -511,7 +511,7 @@ func (m *Manage) APIOffline(c echo.Context) error {
misc.API_OFFLINE, apiID) misc.API_OFFLINE, apiID)
_, err := g.DB.Exec(query) _, err := g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -523,7 +523,7 @@ func (m *Manage) APIOffline(c echo.Context) error {
query = fmt.Sprintf("update api_define set release_version='%s' where api_id='%s'", "", apiID) query = fmt.Sprintf("update api_define set release_version='%s' where api_id='%s'", "", apiID)
_, err = g.DB.Exec(query) _, err = g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -536,7 +536,7 @@ func (m *Manage) APIOffline(c echo.Context) error {
query = fmt.Sprintf("select * from api_release where api_id='%s'", apiID) query = fmt.Sprintf("select * from api_release where api_id='%s'", apiID)
err = g.DB.Get(&api, query) err = g.DB.Get(&api, query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
} }
if api.ParamTable != nil { if api.ParamTable != nil {
d, _ := g.B64.DecodeString(*api.ParamTable) d, _ := g.B64.DecodeString(*api.ParamTable)
@ -638,7 +638,7 @@ func (m *Manage) APIBatchStrategy(c echo.Context) error {
query = fmt.Sprintf("%s where api_id = '%s'", query, apiID) query = fmt.Sprintf("%s where api_id = '%s'", query, apiID)
res, err := g.DB.Exec(query) res, err := g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -716,7 +716,7 @@ func (m *Manage) APIBatchDelStrategy(c echo.Context) error {
res, err := g.DB.Exec(query) res, err := g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -785,7 +785,7 @@ func (m *Manage) APIBatchRelease(c echo.Context) error {
query := fmt.Sprintf("select * from api_define where api_id='%s'", apiID) query := fmt.Sprintf("select * from api_define where api_id='%s'", apiID)
err := g.DB.Get(&api, query) err := g.DB.Get(&api, query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -799,7 +799,7 @@ func (m *Manage) APIBatchRelease(c echo.Context) error {
_, err = g.DB.Exec(query) _, err = g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -810,7 +810,7 @@ func (m *Manage) APIBatchRelease(c echo.Context) error {
query = fmt.Sprintf("update api_define set release_version='%s' where api_id='%s'", api.ReviseVersion, api.APIID) query = fmt.Sprintf("update api_define set release_version='%s' where api_id='%s'", api.ReviseVersion, api.APIID)
_, err = g.DB.Exec(query) _, err = g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,

@ -33,7 +33,7 @@ func Log(userID string, service string, targetType int, targetID string, opType
userID, service, targetType, targetID, opType, newc, desc) userID, service, targetType, targetID, opType, newc, desc)
_, err := g.DB.Exec(query) _, err := g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("record audit log error", zap.Error(err), zap.String("query", query)) g.Info("record audit log error", zap.Error(err), zap.String("query", query))
} }
} }
@ -56,7 +56,7 @@ func Count(c echo.Context) error {
} }
rows, err := g.DB.Query(query) rows, err := g.DB.Query(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -116,7 +116,7 @@ func Load(c echo.Context) error {
} }
err := g.DB.Select(&rs, query) err := g.DB.Select(&rs, query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,

@ -5,7 +5,6 @@ import (
"net/http" "net/http"
"strconv" "strconv"
"strings" "strings"
"time"
"github.com/mafanr/juz/api/manage/audit" "github.com/mafanr/juz/api/manage/audit"
"github.com/mafanr/juz/api/manage/strategy" "github.com/mafanr/juz/api/manage/strategy"
@ -13,16 +12,13 @@ import (
"github.com/mafanr/g" "github.com/mafanr/g"
"go.uber.org/zap"
"github.com/labstack/echo" "github.com/labstack/echo"
"github.com/sunface/talent"
) )
type Manage struct{} type Manage struct{}
func (m *Manage) Start() { func (m *Manage) Start() {
registerToEtcd() g.RegisterInETCD(g.APP_JUZ_MANAGE, misc.Conf.Etcd.Addrs, misc.Conf.Manage.Port)
e := echo.New() e := echo.New()
//api管理 //api管理
@ -69,26 +65,6 @@ func auth(f echo.HandlerFunc) echo.HandlerFunc {
} }
} }
func registerToEtcd() {
g.EtcdCli = g.InitEtcd(misc.Conf.Etcd.Addrs)
// 保存服务状态到etcd
ip := talent.LocalIP()
fmt.Println("local ip:", ip)
host := ip + ":" + misc.Conf.Manage.Port
go func() {
for {
err := g.StoreServer(g.EtcdCli, &g.ServerInfo{g.TFEManage, host, 0})
if err != nil {
g.L.Error("Store to etcd error", zap.Error(err))
}
time.Sleep(time.Second * g.ServiceStoreInterval)
}
}()
}
func validUserID(s string) bool { func validUserID(s string) bool {
i, err := strconv.Atoi(s) i, err := strconv.Atoi(s)
if err != nil { if err != nil {

@ -65,7 +65,7 @@ func Create(c echo.Context) error {
Message: "Strategy name already exist", Message: "Strategy name already exist",
}) })
} }
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -103,7 +103,7 @@ func Update(c echo.Context) error {
st.Name, st.SubType, st.Content, st.ID) st.Name, st.SubType, st.Content, st.ID)
_, err := g.DB.Exec(query) _, err := g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -139,7 +139,7 @@ func Load(c echo.Context) error {
err := g.DB.Select(&ss, query) err := g.DB.Select(&ss, query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -191,7 +191,7 @@ func Delete(c echo.Context) error {
} }
_, err := g.DB.Exec(query) _, err := g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -209,7 +209,7 @@ func Delete(c echo.Context) error {
} }
_, err = g.DB.Exec(query) _, err = g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -220,7 +220,7 @@ func Delete(c echo.Context) error {
query = fmt.Sprintf("delete from strategy where id='%s'", id) query = fmt.Sprintf("delete from strategy where id='%s'", id)
_, err = g.DB.Exec(query) _, err = g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,
@ -266,7 +266,7 @@ func Change(c echo.Context) error {
query := fmt.Sprintf("update strategy set status='%d' where id='%s'", newS, id) query := fmt.Sprintf("update strategy set status='%d' where id='%s'", newS, id)
_, err := g.DB.Exec(query) _, err := g.DB.Exec(query)
if err != nil { if err != nil {
g.L.Info("access database error", zap.Error(err), zap.String("query", query)) g.Info("access database error", zap.Error(err), zap.String("query", query))
return c.JSON(http.StatusInternalServerError, g.Result{ return c.JSON(http.StatusInternalServerError, g.Result{
Status: http.StatusInternalServerError, Status: http.StatusInternalServerError,
ErrCode: g.DatabaseC, ErrCode: g.DatabaseC,

@ -50,7 +50,7 @@ func (router *router) route(c echo.Context) error {
c.Set("service", r.Api.Service) c.Set("service", r.Api.Service)
c.Set("app", r.Api.App) c.Set("app", r.Api.App)
g.Debug(r.DebugOn, misc.Conf.Common.LogLevel, "request content", zap.Int64("rid", r.Rid), zap.String("req", r.String())) g.Debug(r.DebugOn, "request content", zap.Int64("rid", r.Rid), zap.String("req", r.String()))
// 判断api是否发布 // 判断api是否发布
if r.Api.Status != misc.API_RELEASED { if r.Api.Status != misc.API_RELEASED {
@ -81,7 +81,7 @@ func (router *router) route(c echo.Context) error {
return c.JSON(code, g.Result{r.Rid, code, g.ReqFailedC, err.Error(), nil}) return c.JSON(code, g.Result{r.Rid, code, g.ReqFailedC, err.Error(), nil})
} }
g.Debug(r.DebugOn, misc.Conf.Common.LogLevel, "response body", zap.Int64("rid", r.Rid), zap.Int("code", code), zap.String("body", talent.Bytes2String(body))) g.Debug(r.DebugOn, "response body", zap.Int64("rid", r.Rid), zap.Int("code", code), zap.String("body", talent.Bytes2String(body)))
// 成功时把请求id放在header中返回避免污染返回结果 // 成功时把请求id放在header中返回避免污染返回结果
c.Response().Header().Add("rid", strconv.FormatInt(r.Rid, 10)) c.Response().Header().Add("rid", strconv.FormatInt(r.Rid, 10))

@ -17,7 +17,6 @@ package cmd
import ( import (
"os" "os"
"os/signal" "os/signal"
"strings"
"syscall" "syscall"
"github.com/mafanr/juz/misc" "github.com/mafanr/juz/misc"
@ -39,9 +38,8 @@ var apiCmd = &cobra.Command{
// has an action associated with it: // has an action associated with it:
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
misc.InitConfig("juz.conf") misc.InitConfig("juz.conf")
misc.Conf.Common.LogLevel = strings.ToLower(misc.Conf.Common.LogLevel) g.InitLogger(misc.Conf.Common.LogLevel)
g.InitLogger() g.Info("Application version", zap.String("version", misc.Conf.Common.Version))
g.L.Info("Application version", zap.String("version", misc.Conf.Common.Version))
p := &api.ApiServer{} p := &api.ApiServer{}
p.Start() p.Start()
@ -51,7 +49,7 @@ var apiCmd = &cobra.Command{
signal.Notify(chSig, syscall.SIGINT, syscall.SIGTERM) signal.Notify(chSig, syscall.SIGINT, syscall.SIGTERM)
sig := <-chSig sig := <-chSig
g.L.Info("juz received signal", zap.Any("signal", sig)) g.Info("juz received signal", zap.Any("signal", sig))
}, },
} }

@ -17,7 +17,6 @@ package cmd
import ( import (
"os" "os"
"os/signal" "os/signal"
"strings"
"syscall" "syscall"
"github.com/mafanr/juz/misc" "github.com/mafanr/juz/misc"
@ -36,9 +35,8 @@ var trafficCmd = &cobra.Command{
Long: ``, Long: ``,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
misc.InitConfig("juz.conf") misc.InitConfig("juz.conf")
misc.Conf.Common.LogLevel = strings.ToLower(misc.Conf.Common.LogLevel) g.InitLogger(misc.Conf.Common.LogLevel)
g.InitLogger() g.Info("Application version", zap.String("version", misc.Conf.Common.Version))
g.L.Info("Application version", zap.String("version", misc.Conf.Common.Version))
p := &traffic.Traffic{} p := &traffic.Traffic{}
p.Start() p.Start()
@ -48,7 +46,7 @@ var trafficCmd = &cobra.Command{
signal.Notify(chSig, syscall.SIGINT, syscall.SIGTERM) signal.Notify(chSig, syscall.SIGINT, syscall.SIGTERM)
sig := <-chSig sig := <-chSig
g.L.Info("juz received signal", zap.Any("signal", sig)) g.Info("juz received signal", zap.Any("signal", sig))
}, },
} }

@ -1,12 +1,13 @@
common: common:
version: 0.0.1 version: 0.0.1
loglevel: warn loglevel: info
admintoken: "juz.io" admintoken: "juz.io"
api: api:
port: "8081" port: "8081"
serverid: 1 serverid: 1
manage: manage:
port: "8089" port: "8089"

@ -129,12 +129,12 @@ func InitMysql() {
Conf.Mysql.Addr, Conf.Mysql.Port, Conf.Mysql.Database) Conf.Mysql.Addr, Conf.Mysql.Port, Conf.Mysql.Database)
g.DB, err = sqlx.Open("mysql", sqlConn) g.DB, err = sqlx.Open("mysql", sqlConn)
if err != nil { if err != nil {
g.L.Fatal("init mysql error", zap.Error(err)) g.Fatal("init mysql error", zap.Error(err))
} }
// 测试db是否正常 // 测试db是否正常
err = g.DB.Ping() err = g.DB.Ping()
if err != nil { if err != nil {
g.L.Fatal("init mysql, ping error", zap.Error(err)) g.Fatal("init mysql, ping error", zap.Error(err))
} }
} }

@ -29,7 +29,7 @@ func (t *Traffic) loadAll() {
strategies := make([]*misc.Strategy, 0) strategies := make([]*misc.Strategy, 0)
err := g.DB.Select(&strategies, "select * from strategy") err := g.DB.Select(&strategies, "select * from strategy")
if err != nil { if err != nil {
g.L.Fatal("load strategies error!", zap.Error(err)) g.Fatal("load strategies error!", zap.Error(err))
} }
for _, s := range strategies { for _, s := range strategies {
@ -53,7 +53,7 @@ func (t *Traffic) loadUpdated() {
query := fmt.Sprintf("select * from strategy where modify_date >= '%s'", lastT) query := fmt.Sprintf("select * from strategy where modify_date >= '%s'", lastT)
err := g.DB.Select(&strategies, query) err := g.DB.Select(&strategies, query)
if err != nil { if err != nil {
g.L.Error("load strategies error!", zap.Error(err), zap.String("query", query)) g.Error("load strategies error!", zap.Error(err), zap.String("query", query))
return return
} }

@ -33,7 +33,7 @@ func (t *Traffic) Start() {
} }
func (t *Traffic) Shutdown() { func (t *Traffic) Shutdown() {
g.L.Info("shutdown tfe..") g.Info("shutdown tfe..")
} }
type RateLimiter struct{} type RateLimiter struct{}
@ -49,20 +49,20 @@ func (t *Traffic) startRpcServer() {
server := rpc.NewServer() server := rpc.NewServer()
err := server.Register(rl) err := server.Register(rl)
if err != nil { if err != nil {
g.L.Fatal("register error", zap.Error(err)) g.Fatal("register error", zap.Error(err))
} }
g.L.Info("Listen tcp on port", zap.String("port", misc.Conf.Traffic.Port)) g.Info("Listen tcp on port", zap.String("port", misc.Conf.Traffic.Port))
l, err := net.Listen("tcp", ":"+misc.Conf.Traffic.Port) l, err := net.Listen("tcp", ":"+misc.Conf.Traffic.Port)
if err != nil { if err != nil {
g.L.Fatal("listen error", zap.Error(err)) g.Fatal("listen error", zap.Error(err))
} }
go func() { go func() {
for { for {
conn, err := l.Accept() conn, err := l.Accept()
if err != nil { if err != nil {
g.L.Error("accept error", zap.Error(err)) g.Error("accept error", zap.Error(err))
continue continue
} }
server.ServeConn(conn) server.ServeConn(conn)

Loading…
Cancel
Save