mirror of
https://github.com/simon987/task_tracker.git
synced 2025-12-14 07:19:02 +00:00
Performance patch, version bump
This commit is contained in:
17
api/log.go
17
api/log.go
@@ -5,7 +5,6 @@ import (
|
||||
"errors"
|
||||
"github.com/simon987/task_tracker/config"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/valyala/fasthttp"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
@@ -16,22 +15,6 @@ func (e *LogRequest) Time() time.Time {
|
||||
return t
|
||||
}
|
||||
|
||||
func LogRequestMiddleware(h RequestHandler) fasthttp.RequestHandler {
|
||||
return fasthttp.RequestHandler(func(ctx *fasthttp.RequestCtx) {
|
||||
|
||||
ctx.Response.Header.Add("Access-Control-Allow-Headers", "Content-Type")
|
||||
ctx.Response.Header.Add("Access-Control-Allow-Methods", "GET, POST, OPTION")
|
||||
ctx.Response.Header.Add("Access-Control-Allow-Origin", "*")
|
||||
|
||||
logrus.WithFields(logrus.Fields{
|
||||
"path": string(ctx.Path()),
|
||||
"header": ctx.Request.Header.String(),
|
||||
}).Trace(string(ctx.Method()))
|
||||
|
||||
h(&Request{Ctx: ctx})
|
||||
})
|
||||
}
|
||||
|
||||
func (api *WebAPI) SetupLogger() {
|
||||
writer, err := os.OpenFile("log.txt", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
|
||||
if err != nil {
|
||||
|
||||
94
api/main.go
94
api/main.go
@@ -27,7 +27,13 @@ type RequestHandler func(*Request)
|
||||
|
||||
var info = Info{
|
||||
Name: "task_tracker",
|
||||
Version: "1.0",
|
||||
Version: "1.1",
|
||||
}
|
||||
|
||||
func Middleware(h RequestHandler) fasthttp.RequestHandler {
|
||||
return fasthttp.RequestHandler(func(ctx *fasthttp.RequestCtx) {
|
||||
h(&Request{Ctx: ctx})
|
||||
})
|
||||
}
|
||||
|
||||
func Index(r *Request) {
|
||||
@@ -77,56 +83,56 @@ func New() *WebAPI {
|
||||
Name: info.Name,
|
||||
}
|
||||
|
||||
api.router.GET("/", LogRequestMiddleware(Index))
|
||||
api.router.GET("/", Middleware(Index))
|
||||
|
||||
api.router.POST("/log/trace", LogRequestMiddleware(api.LogTrace))
|
||||
api.router.POST("/log/info", LogRequestMiddleware(api.LogInfo))
|
||||
api.router.POST("/log/warn", LogRequestMiddleware(api.LogWarn))
|
||||
api.router.POST("/log/error", LogRequestMiddleware(api.LogError))
|
||||
api.router.POST("/log/trace", Middleware(api.LogTrace))
|
||||
api.router.POST("/log/info", Middleware(api.LogInfo))
|
||||
api.router.POST("/log/warn", Middleware(api.LogWarn))
|
||||
api.router.POST("/log/error", Middleware(api.LogError))
|
||||
|
||||
api.router.POST("/worker/create", LogRequestMiddleware(api.CreateWorker))
|
||||
api.router.POST("/worker/update", LogRequestMiddleware(api.UpdateWorker))
|
||||
api.router.POST("/worker/set_paused", LogRequestMiddleware(api.WorkerSetPaused))
|
||||
api.router.GET("/worker/get/:id", LogRequestMiddleware(api.GetWorker))
|
||||
api.router.GET("/worker/stats", LogRequestMiddleware(api.GetAllWorkerStats))
|
||||
api.router.POST("/worker/create", Middleware(api.CreateWorker))
|
||||
api.router.POST("/worker/update", Middleware(api.UpdateWorker))
|
||||
api.router.POST("/worker/set_paused", Middleware(api.WorkerSetPaused))
|
||||
api.router.GET("/worker/get/:id", Middleware(api.GetWorker))
|
||||
api.router.GET("/worker/stats", Middleware(api.GetAllWorkerStats))
|
||||
|
||||
api.router.POST("/project/create", LogRequestMiddleware(api.CreateProject))
|
||||
api.router.GET("/project/get/:id", LogRequestMiddleware(api.GetProject))
|
||||
api.router.POST("/project/update/:id", LogRequestMiddleware(api.UpdateProject))
|
||||
api.router.GET("/project/list", LogRequestMiddleware(api.GetProjectList))
|
||||
api.router.GET("/project/monitoring-between/:id", LogRequestMiddleware(api.GetSnapshotsWithinRange))
|
||||
api.router.GET("/project/monitoring/:id", LogRequestMiddleware(api.GetNSnapshots))
|
||||
api.router.GET("/project/assignees/:id", LogRequestMiddleware(api.GetAssigneeStatsForProject))
|
||||
api.router.GET("/project/access_list/:id", LogRequestMiddleware(api.GetWorkerAccessListForProject))
|
||||
api.router.POST("/project/request_access", LogRequestMiddleware(api.CreateWorkerAccess))
|
||||
api.router.POST("/project/accept_request/:id/:wid", LogRequestMiddleware(api.AcceptAccessRequest))
|
||||
api.router.POST("/project/reject_request/:id/:wid", LogRequestMiddleware(api.RejectAccessRequest))
|
||||
api.router.GET("/project/secret/:id", LogRequestMiddleware(api.GetSecret))
|
||||
api.router.POST("/project/secret/:id", LogRequestMiddleware(api.SetSecret))
|
||||
api.router.GET("/project/webhook_secret/:id", LogRequestMiddleware(api.GetWebhookSecret))
|
||||
api.router.POST("/project/webhook_secret/:id", LogRequestMiddleware(api.SetWebhookSecret))
|
||||
api.router.POST("/project/reset_failed_tasks/:id", LogRequestMiddleware(api.ResetFailedTasks))
|
||||
api.router.POST("/project/hard_reset/:id", LogRequestMiddleware(api.HardReset))
|
||||
api.router.POST("/project/reclaim_assigned_tasks/:id", LogRequestMiddleware(api.ReclaimAssignedTasks))
|
||||
api.router.POST("/project/create", Middleware(api.CreateProject))
|
||||
api.router.GET("/project/get/:id", Middleware(api.GetProject))
|
||||
api.router.POST("/project/update/:id", Middleware(api.UpdateProject))
|
||||
api.router.GET("/project/list", Middleware(api.GetProjectList))
|
||||
api.router.GET("/project/monitoring-between/:id", Middleware(api.GetSnapshotsWithinRange))
|
||||
api.router.GET("/project/monitoring/:id", Middleware(api.GetNSnapshots))
|
||||
api.router.GET("/project/assignees/:id", Middleware(api.GetAssigneeStatsForProject))
|
||||
api.router.GET("/project/access_list/:id", Middleware(api.GetWorkerAccessListForProject))
|
||||
api.router.POST("/project/request_access", Middleware(api.CreateWorkerAccess))
|
||||
api.router.POST("/project/accept_request/:id/:wid", Middleware(api.AcceptAccessRequest))
|
||||
api.router.POST("/project/reject_request/:id/:wid", Middleware(api.RejectAccessRequest))
|
||||
api.router.GET("/project/secret/:id", Middleware(api.GetSecret))
|
||||
api.router.POST("/project/secret/:id", Middleware(api.SetSecret))
|
||||
api.router.GET("/project/webhook_secret/:id", Middleware(api.GetWebhookSecret))
|
||||
api.router.POST("/project/webhook_secret/:id", Middleware(api.SetWebhookSecret))
|
||||
api.router.POST("/project/reset_failed_tasks/:id", Middleware(api.ResetFailedTasks))
|
||||
api.router.POST("/project/hard_reset/:id", Middleware(api.HardReset))
|
||||
api.router.POST("/project/reclaim_assigned_tasks/:id", Middleware(api.ReclaimAssignedTasks))
|
||||
|
||||
api.router.POST("/task/submit", LogRequestMiddleware(api.SubmitTask))
|
||||
api.router.POST("/task/bulk_submit", LogRequestMiddleware(api.BulkSubmitTask))
|
||||
api.router.GET("/task/get/:project", LogRequestMiddleware(api.GetTaskFromProject))
|
||||
api.router.POST("/task/release", LogRequestMiddleware(api.ReleaseTask))
|
||||
api.router.POST("/task/submit", Middleware(api.SubmitTask))
|
||||
api.router.POST("/task/bulk_submit", Middleware(api.BulkSubmitTask))
|
||||
api.router.GET("/task/get/:project", Middleware(api.GetTaskFromProject))
|
||||
api.router.POST("/task/release", Middleware(api.ReleaseTask))
|
||||
|
||||
api.router.POST("/git/receivehook", LogRequestMiddleware(api.ReceiveGitWebHook))
|
||||
api.router.POST("/git/receivehook", Middleware(api.ReceiveGitWebHook))
|
||||
|
||||
api.router.POST("/logs", LogRequestMiddleware(api.GetLog))
|
||||
api.router.POST("/logs", Middleware(api.GetLog))
|
||||
|
||||
api.router.POST("/register", LogRequestMiddleware(api.Register))
|
||||
api.router.POST("/login", LogRequestMiddleware(api.Login))
|
||||
api.router.GET("/logout", LogRequestMiddleware(api.Logout))
|
||||
api.router.GET("/account", LogRequestMiddleware(api.GetAccountDetails))
|
||||
api.router.GET("/manager/list", LogRequestMiddleware(api.GetManagerList))
|
||||
api.router.GET("/manager/list_for_project/:id", LogRequestMiddleware(api.GetManagerListWithRoleOn))
|
||||
api.router.GET("/manager/promote/:id", LogRequestMiddleware(api.PromoteManager))
|
||||
api.router.GET("/manager/demote/:id", LogRequestMiddleware(api.DemoteManager))
|
||||
api.router.POST("/manager/set_role_for_project/:id", LogRequestMiddleware(api.SetManagerRoleOnProject))
|
||||
api.router.POST("/register", Middleware(api.Register))
|
||||
api.router.POST("/login", Middleware(api.Login))
|
||||
api.router.GET("/logout", Middleware(api.Logout))
|
||||
api.router.GET("/account", Middleware(api.GetAccountDetails))
|
||||
api.router.GET("/manager/list", Middleware(api.GetManagerList))
|
||||
api.router.GET("/manager/list_for_project/:id", Middleware(api.GetManagerListWithRoleOn))
|
||||
api.router.GET("/manager/promote/:id", Middleware(api.PromoteManager))
|
||||
api.router.GET("/manager/demote/:id", Middleware(api.DemoteManager))
|
||||
api.router.POST("/manager/set_role_for_project/:id", Middleware(api.SetManagerRoleOnProject))
|
||||
|
||||
api.router.NotFound = func(ctx *fasthttp.RequestCtx) {
|
||||
|
||||
|
||||
@@ -196,13 +196,13 @@ type GetWorkerAccessListForProjectResponse struct {
|
||||
|
||||
type SubmitTaskRequest struct {
|
||||
Project int64 `json:"project"`
|
||||
MaxRetries int64 `json:"max_retries"`
|
||||
MaxRetries int16 `json:"max_retries"`
|
||||
Recipe string `json:"recipe"`
|
||||
Priority int64 `json:"priority"`
|
||||
Priority int16 `json:"priority"`
|
||||
MaxAssignTime int64 `json:"max_assign_time"`
|
||||
Hash64 int64 `json:"hash_u64"`
|
||||
UniqueString string `json:"unique_string"`
|
||||
VerificationCount int64 `json:"verification_count"`
|
||||
VerificationCount int16 `json:"verification_count"`
|
||||
}
|
||||
|
||||
func (req *SubmitTaskRequest) IsValid() bool {
|
||||
@@ -212,7 +212,7 @@ func (req *SubmitTaskRequest) IsValid() bool {
|
||||
if len(req.Recipe) <= 0 {
|
||||
return false
|
||||
}
|
||||
if req.Hash64 != 0 && req.UniqueString != "" {
|
||||
if req.Hash64 != 0 && len(req.UniqueString) != 0 {
|
||||
return false
|
||||
}
|
||||
if req.Project == 0 {
|
||||
|
||||
@@ -165,6 +165,12 @@ func (api *WebAPI) UpdateProject(r *Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if updateReq.AssignRate == 0 {
|
||||
updateReq.AssignRate = rate.Inf
|
||||
}
|
||||
if updateReq.SubmitRate == 0 {
|
||||
updateReq.SubmitRate = rate.Inf
|
||||
}
|
||||
project := &storage.Project{
|
||||
Id: id,
|
||||
Name: updateReq.Name,
|
||||
|
||||
25
api/task.go
25
api/task.go
@@ -33,6 +33,10 @@ func (api *WebAPI) SubmitTask(r *Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if createReq.VerificationCount == 0 {
|
||||
createReq.VerificationCount = 1
|
||||
}
|
||||
|
||||
if !createReq.IsValid() {
|
||||
logrus.WithFields(logrus.Fields{
|
||||
"req": createReq,
|
||||
@@ -46,7 +50,7 @@ func (api *WebAPI) SubmitTask(r *Request) {
|
||||
|
||||
task := &storage.Task{
|
||||
MaxRetries: createReq.MaxRetries,
|
||||
Recipe: createReq.Recipe,
|
||||
Recipe: string(createReq.Recipe),
|
||||
Priority: createReq.Priority,
|
||||
AssignTime: 0,
|
||||
MaxAssignTime: createReq.MaxAssignTime,
|
||||
@@ -72,7 +76,7 @@ func (api *WebAPI) SubmitTask(r *Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if createReq.UniqueString != "" {
|
||||
if len(createReq.UniqueString) != 0 {
|
||||
createReq.Hash64 = int64(siphash.Hash(1, 2, []byte(createReq.UniqueString)))
|
||||
}
|
||||
|
||||
@@ -135,14 +139,17 @@ func (api *WebAPI) BulkSubmitTask(r *Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if req.UniqueString != "" {
|
||||
if len(req.UniqueString) != 0 {
|
||||
req.Hash64 = int64(siphash.Hash(1, 2, []byte(req.UniqueString)))
|
||||
}
|
||||
if req.VerificationCount == 0 {
|
||||
req.VerificationCount = 1
|
||||
}
|
||||
|
||||
saveRequests[i] = storage.SaveTaskRequest{
|
||||
Task: &storage.Task{
|
||||
MaxRetries: req.MaxRetries,
|
||||
Recipe: req.Recipe,
|
||||
Recipe: string(req.Recipe),
|
||||
Priority: req.Priority,
|
||||
AssignTime: 0,
|
||||
MaxAssignTime: req.MaxAssignTime,
|
||||
@@ -184,6 +191,8 @@ func (api *WebAPI) BulkSubmitTask(r *Request) {
|
||||
return
|
||||
}
|
||||
|
||||
logrus.Info(saveErrors)
|
||||
|
||||
r.OkJson(JsonResponse{
|
||||
Ok: true,
|
||||
})
|
||||
@@ -263,7 +272,7 @@ func (api *WebAPI) validateSecret(r *Request) (*storage.Worker, error) {
|
||||
if widStr == "" {
|
||||
return nil, errors.New("worker id not specified")
|
||||
}
|
||||
if bytes.Equal(secretHeader, []byte("")) {
|
||||
if len(secretHeader) == 0 {
|
||||
return nil, errors.New("secret is not specified")
|
||||
}
|
||||
|
||||
@@ -290,12 +299,6 @@ func (api *WebAPI) validateSecret(r *Request) (*storage.Worker, error) {
|
||||
secretLen, _ := base64.StdEncoding.Decode(secret, secretHeader)
|
||||
matches := bytes.Equal(worker.Secret, secret[:secretLen])
|
||||
|
||||
logrus.WithFields(logrus.Fields{
|
||||
"expected": string(worker.Secret),
|
||||
"header": string(secretHeader),
|
||||
"matches": matches,
|
||||
}).Trace("Validating Worker secret")
|
||||
|
||||
if !matches {
|
||||
return nil, errors.New("invalid secret")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user