mirror of
https://github.com/simon987/task_tracker.git
synced 2025-04-19 02:06:45 +00:00
132 lines
4.2 KiB
Go
132 lines
4.2 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/Sirupsen/logrus"
|
|
"github.com/buaazp/fasthttprouter"
|
|
"github.com/kataras/go-sessions"
|
|
"github.com/robfig/cron"
|
|
"github.com/simon987/task_tracker/config"
|
|
"github.com/simon987/task_tracker/storage"
|
|
"github.com/valyala/fasthttp"
|
|
)
|
|
|
|
type WebAPI struct {
|
|
server *fasthttp.Server
|
|
router *fasthttprouter.Router
|
|
Database *storage.Database
|
|
SessionConfig sessions.Config
|
|
Session *sessions.Sessions
|
|
Cron *cron.Cron
|
|
}
|
|
|
|
type Info struct {
|
|
Name string `json:"name"`
|
|
Version string `json:"version"`
|
|
}
|
|
|
|
var info = Info{
|
|
Name: "task_tracker",
|
|
Version: "1.0",
|
|
}
|
|
|
|
func Index(r *Request) {
|
|
r.OkJson(info)
|
|
}
|
|
|
|
func (api *WebAPI) setupMonitoring() {
|
|
|
|
api.Cron = cron.New()
|
|
schedule := cron.Every(config.Cfg.MonitoringInterval)
|
|
api.Cron.Schedule(schedule, cron.FuncJob(api.Database.MakeProjectSnapshots))
|
|
api.Cron.Start()
|
|
|
|
logrus.WithFields(logrus.Fields{
|
|
"every": config.Cfg.MonitoringInterval.String(),
|
|
}).Info("Started monitoring")
|
|
}
|
|
|
|
func New() *WebAPI {
|
|
|
|
api := new(WebAPI)
|
|
api.Database = &storage.Database{}
|
|
api.setupMonitoring()
|
|
|
|
api.router = &fasthttprouter.Router{}
|
|
|
|
api.SessionConfig = sessions.Config{
|
|
Cookie: config.Cfg.SessionCookieName,
|
|
Expires: config.Cfg.SessionCookieExpiration,
|
|
CookieSecureTLS: false,
|
|
DisableSubdomainPersistence: false,
|
|
}
|
|
|
|
api.Session = sessions.New(api.SessionConfig)
|
|
|
|
api.server = &fasthttp.Server{
|
|
Handler: api.router.Handler,
|
|
Name: info.Name,
|
|
}
|
|
|
|
api.router.GET("/", LogRequestMiddleware(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("/worker/create", LogRequestMiddleware(api.WorkerCreate))
|
|
api.router.POST("/worker/update", LogRequestMiddleware(api.WorkerUpdate))
|
|
api.router.GET("/worker/get/:id", LogRequestMiddleware(api.WorkerGet))
|
|
api.router.GET("/worker/stats", LogRequestMiddleware(api.GetAllWorkerStats))
|
|
|
|
api.router.POST("/access/grant", LogRequestMiddleware(api.WorkerGrantAccess))
|
|
api.router.POST("/access/remove", LogRequestMiddleware(api.WorkerRemoveAccess))
|
|
|
|
api.router.POST("/project/create", LogRequestMiddleware(api.ProjectCreate))
|
|
api.router.GET("/project/get/:id", LogRequestMiddleware(api.ProjectGet))
|
|
api.router.POST("/project/update/:id", LogRequestMiddleware(api.ProjectUpdate))
|
|
api.router.GET("/project/list", LogRequestMiddleware(api.ProjectGetAllProjects))
|
|
api.router.GET("/project/monitoring-between/:id", LogRequestMiddleware(api.GetSnapshotsBetween))
|
|
api.router.GET("/project/monitoring/:id", LogRequestMiddleware(api.GetNSnapshots))
|
|
api.router.GET("/project/assignees/:id", LogRequestMiddleware(api.ProjectGetAssigneeStats))
|
|
|
|
api.router.POST("/task/create", LogRequestMiddleware(api.TaskCreate))
|
|
api.router.GET("/task/get/:project", LogRequestMiddleware(api.TaskGetFromProject))
|
|
api.router.GET("/task/get", LogRequestMiddleware(api.TaskGet))
|
|
api.router.POST("/task/release", LogRequestMiddleware(api.TaskRelease))
|
|
|
|
api.router.POST("/git/receivehook", LogRequestMiddleware(api.ReceiveGitWebHook))
|
|
|
|
api.router.POST("/logs", LogRequestMiddleware(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.AccountDetails))
|
|
|
|
api.router.NotFound = func(ctx *fasthttp.RequestCtx) {
|
|
|
|
if ctx.Request.Header.IsOptions() {
|
|
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", "*")
|
|
} else {
|
|
ctx.SetStatusCode(404)
|
|
_, _ = fmt.Fprintf(ctx, "Not found")
|
|
}
|
|
}
|
|
|
|
return api
|
|
}
|
|
|
|
func (api *WebAPI) Run() {
|
|
|
|
logrus.Infof("Started web api at address %s", config.Cfg.ServerAddr)
|
|
|
|
err := api.server.ListenAndServe(config.Cfg.ServerAddr)
|
|
if err != nil {
|
|
logrus.Fatalf("Error in ListenAndServe: %s", err)
|
|
}
|
|
}
|