Semaphore/api/events.go

83 lines
1.9 KiB
Go
Raw Normal View History

2016-05-24 11:55:48 +02:00
package api
import (
"github.com/ansible-semaphore/semaphore/api/helpers"
"github.com/ansible-semaphore/semaphore/db"
"net/http"
"github.com/ansible-semaphore/semaphore/util"
2017-02-23 00:21:49 +01:00
"github.com/gorilla/context"
"github.com/masterminds/squirrel"
)
//nolint: gocyclo
func getEvents(w http.ResponseWriter, r *http.Request, limit uint64) {
user := context.Get(r, "user").(*db.User)
q := squirrel.Select("event.*, p.name as project_name").
From("event").
LeftJoin("project as p on event.project_id=p.id").
OrderBy("created desc")
if limit > 0 {
q = q.Limit(limit)
}
projectObj, exists := context.GetOk(r, "project")
if exists {
// limit query to project
project := projectObj.(db.Project)
q = q.Where("event.project_id=?", project.ID)
} else {
q = q.LeftJoin("project__user as pu on pu.project_id=p.id").
Where("p.id IS NULL or pu.user_id=?", user.ID)
}
var events []db.Event
query, args, err := q.ToSql()
util.LogWarning(err)
if _, err := helpers.Store(r).Sql().Select(&events, query, args...); err != nil {
panic(err)
}
for i, evt := range events {
if evt.ObjectID == nil || evt.ObjectType == nil {
continue
}
var q squirrel.SelectBuilder
switch *evt.ObjectType {
case "task":
2016-12-21 11:24:27 +01:00
q = squirrel.Select("case when length(task.playbook) > 0 then task.playbook else tpl.playbook end").
From("task").
2016-12-21 11:24:27 +01:00
Join("project__template as tpl on task.template_id=tpl.id").
Where("task.id=?", evt.ObjectID)
default:
continue
}
query, args, err := q.ToSql()
util.LogWarning(err)
name, err := helpers.Store(r).Sql().SelectNullStr(query, args...)
if err != nil {
panic(err)
}
if name.Valid {
events[i].ObjectName = name.String
}
}
helpers.WriteJSON(w, http.StatusOK, events)
}
func getLastEvents(w http.ResponseWriter, r *http.Request) {
getEvents(w, r, 200)
}
func getAllEvents(w http.ResponseWriter, r *http.Request) {
getEvents(w, r, 0)
}