|
@ -1,6 +1,7 @@ |
|
|
package service |
|
|
package service |
|
|
|
|
|
|
|
|
import ( |
|
|
import ( |
|
|
|
|
|
"fmt" |
|
|
"io" |
|
|
"io" |
|
|
"net/http" |
|
|
"net/http" |
|
|
"net/http/pprof" |
|
|
"net/http/pprof" |
|
@ -47,16 +48,17 @@ func validateMethod(r *http.Request, methods ...string) bool { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
type KeplerService struct { |
|
|
type KeplerService struct { |
|
|
prefix string |
|
|
|
|
|
config config.Config |
|
|
|
|
|
router *mux.Router |
|
|
|
|
|
sessionKeeper func(next restlet.RequestHandler) restlet.RequestHandler |
|
|
|
|
|
db map[string]database.DBI |
|
|
|
|
|
cache map[string]cache.Cache |
|
|
|
|
|
kvstore map[string]kv.KV |
|
|
|
|
|
bucketMngr *bucket.Manager |
|
|
|
|
|
mpub msq.Publisher |
|
|
|
|
|
msub msq.Subscriber |
|
|
|
|
|
|
|
|
prefix string |
|
|
|
|
|
config config.Config |
|
|
|
|
|
router *mux.Router |
|
|
|
|
|
sessionKeeper func(next restlet.RequestHandler) restlet.RequestHandler |
|
|
|
|
|
db map[string]database.DBI |
|
|
|
|
|
cache map[string]cache.Cache |
|
|
|
|
|
kvstore map[string]kv.KV |
|
|
|
|
|
bucketMngr *bucket.Manager |
|
|
|
|
|
mpub msq.Publisher |
|
|
|
|
|
msub msq.Subscriber |
|
|
|
|
|
baseProgressUri string |
|
|
//
|
|
|
//
|
|
|
initialHandlers []*InitializeHandler // for initialize
|
|
|
initialHandlers []*InitializeHandler // for initialize
|
|
|
requestHandlers []*RequestHandler // for HTTP Request
|
|
|
requestHandlers []*RequestHandler // for HTTP Request
|
|
@ -206,7 +208,6 @@ func (svr *KeplerService) Initialize() error { |
|
|
return nil |
|
|
return nil |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (svr *KeplerService) SetSessionKeeper(ff func(next restlet.RequestHandler) restlet.RequestHandler) { |
|
|
func (svr *KeplerService) SetSessionKeeper(ff func(next restlet.RequestHandler) restlet.RequestHandler) { |
|
|
svr.sessionKeeper = ff |
|
|
svr.sessionKeeper = ff |
|
|
} |
|
|
} |
|
@ -215,6 +216,10 @@ func (svr *KeplerService) NewContext(request *http.Request) restlet.RequestConte |
|
|
return NewRequestContext(svr, request) |
|
|
return NewRequestContext(svr, request) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (svr *KeplerService) SetProgressURI(ss string) { |
|
|
|
|
|
svr.baseProgressUri = ss |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
func makeMsgSubFunc(ctx restlet.TaskContext, h restlet.TaskletHandler) func([]byte) error { |
|
|
func makeMsgSubFunc(ctx restlet.TaskContext, h restlet.TaskletHandler) func([]byte) error { |
|
|
var f = func(data []byte) error { |
|
|
var f = func(data []byte) error { |
|
|
if e := h.Handle(ctx, data); nil != e { |
|
|
if e := h.Handle(ctx, data); nil != e { |
|
@ -306,6 +311,10 @@ func (svr *KeplerService) Serve() error { |
|
|
pCron.Stop() |
|
|
pCron.Stop() |
|
|
} |
|
|
} |
|
|
}() |
|
|
}() |
|
|
|
|
|
if svr.baseProgressUri != "" { |
|
|
|
|
|
svr.baseProgressUri = "_internal/tasks" |
|
|
|
|
|
} |
|
|
|
|
|
svr.RegisterRequest(svr.baseProgressUri, restlet.RestletFuncEx(svr.ProgressHandle), "GET") |
|
|
for _, h := range svr.requestHandlers { |
|
|
for _, h := range svr.requestHandlers { |
|
|
fullPrefix := strings.TrimRight(svr.prefix, "/") + "/" + strings.TrimLeft(h.Prefix, "/") // path.Join(svr.prefix, h.Prefix)
|
|
|
fullPrefix := strings.TrimRight(svr.prefix, "/") + "/" + strings.TrimLeft(h.Prefix, "/") // path.Join(svr.prefix, h.Prefix)
|
|
|
log.Infoln("Routing :", fullPrefix, h.Methods) |
|
|
log.Infoln("Routing :", fullPrefix, h.Methods) |
|
@ -412,6 +421,20 @@ func (svr *KeplerService) RegisterSchedule(schedule string, handler restlet.Task |
|
|
}) |
|
|
}) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (svr *KeplerService) ProgressHandle(ctx restlet.RequestContext, params restlet.Parameters, queries restlet.Parameters, data []byte) (int, interface{}, error) { |
|
|
|
|
|
if id, b := params.GetString("id"); b { |
|
|
|
|
|
if p, e := ctx.Bucket(KeplerBgTaskBucketId).Get(id); nil != e { |
|
|
|
|
|
return restlet.ErrorNotFound, nil, e |
|
|
|
|
|
} else if prog, b := p.(restlet.Progress); b { |
|
|
|
|
|
return restlet.SuccessOk, prog, nil |
|
|
|
|
|
} else { |
|
|
|
|
|
return restlet.ErrorNotFound, nil, fmt.Errorf("{id} not found") |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
return restlet.ErrorNotFound, nil, fmt.Errorf("{id} requied") |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
var ( |
|
|
var ( |
|
|
builtinService = &KeplerService{ |
|
|
builtinService = &KeplerService{ |
|
|
router: mux.NewRouter().StrictSlash(true), |
|
|
router: mux.NewRouter().StrictSlash(true), |
|
@ -449,6 +472,10 @@ func SetSessionKeeper(ff func(next restlet.RequestHandler) restlet.RequestHandle |
|
|
builtinService.SetSessionKeeper(ff) |
|
|
builtinService.SetSessionKeeper(ff) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func SetProgressURI(ss string) { |
|
|
|
|
|
builtinService.SetProgressURI(ss) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
func RegisterInitialize(order int, name string, handler restlet.TaskletHandler) { |
|
|
func RegisterInitialize(order int, name string, handler restlet.TaskletHandler) { |
|
|
builtinService.RegisterInitialize(order, name, handler) |
|
|
builtinService.RegisterInitialize(order, name, handler) |
|
|
} |
|
|
} |
|
|