Added automatical hook scheduling
This commit is contained in:
parent
e0628bc480
commit
463d2805b3
6 changed files with 124 additions and 28 deletions
110
script.go
110
script.go
|
|
@ -23,11 +23,12 @@ type Script struct {
|
|||
}
|
||||
|
||||
type Hook struct {
|
||||
ID int
|
||||
Node Node
|
||||
Script Script
|
||||
SSH string
|
||||
Env map[string]string
|
||||
ID int
|
||||
Node Node
|
||||
Script Script
|
||||
SSH string
|
||||
Env map[string]string
|
||||
ScheduleOnChildUpdate bool `db:"schedule_on_child_update"`
|
||||
}
|
||||
|
||||
func GetScript(scriptID int) (script Script, err error) { // {{{
|
||||
|
|
@ -135,13 +136,20 @@ func SearchScripts(search string) (scripts []Script, err error) { // {{{
|
|||
|
||||
row := db.QueryRow(`
|
||||
SELECT
|
||||
json_agg(script) AS scripts
|
||||
FROM public.script
|
||||
WHERE
|
||||
name ILIKE $1
|
||||
ORDER BY
|
||||
"group" ASC,
|
||||
name ASC
|
||||
COALESCE(
|
||||
json_agg(scripts),
|
||||
'[]'::json
|
||||
) AS scripts
|
||||
FROM (
|
||||
SELECT
|
||||
to_json(script) AS scripts
|
||||
FROM public.script
|
||||
WHERE
|
||||
name ILIKE $1
|
||||
ORDER BY
|
||||
"group" ASC,
|
||||
name ASC
|
||||
) scripts
|
||||
`,
|
||||
search,
|
||||
)
|
||||
|
|
@ -172,11 +180,12 @@ func GetHook(hookID int) (hook Hook, err error) { // {{{
|
|||
to_json(res)
|
||||
FROM (
|
||||
SELECT
|
||||
h.id,
|
||||
h.ssh,
|
||||
h.env,
|
||||
(SELECT to_json(node) FROM node WHERE id = h.node_id) AS node,
|
||||
(SELECT to_json(script) FROM script WHERE id = h.script_id) AS script
|
||||
h.id,
|
||||
h.ssh,
|
||||
h.env,
|
||||
h.schedule_on_child_update,
|
||||
(SELECT to_json(node) FROM node WHERE id = h.node_id) AS node,
|
||||
(SELECT to_json(script) FROM script WHERE id = h.script_id) AS script
|
||||
FROM hook h
|
||||
WHERE
|
||||
h.id = $1
|
||||
|
|
@ -198,7 +207,20 @@ func GetHook(hookID int) (hook Hook, err error) { // {{{
|
|||
} // }}}
|
||||
func UpdateHook(hook Hook) (err error) { // {{{
|
||||
j, _ := json.Marshal(hook.Env)
|
||||
_, err = db.Exec(`UPDATE hook SET ssh=$2, env=$3 WHERE id=$1`, hook.ID, strings.TrimSpace(hook.SSH), j)
|
||||
_, err = db.Exec(`
|
||||
UPDATE hook
|
||||
SET
|
||||
ssh=$2,
|
||||
env=$3,
|
||||
schedule_on_child_update=$4
|
||||
WHERE
|
||||
id=$1
|
||||
`,
|
||||
hook.ID,
|
||||
strings.TrimSpace(hook.SSH),
|
||||
j,
|
||||
hook.ScheduleOnChildUpdate,
|
||||
)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
|
|
@ -259,6 +281,58 @@ func ScheduleHook(hookID int) (err error) { // {{{
|
|||
|
||||
return
|
||||
} // }}}
|
||||
func ScheduleHookRecursivelyUpwards(nodeID int) (err error) { // {{{
|
||||
var rows *sql.Rows
|
||||
rows, err = db.Query(`
|
||||
WITH RECURSIVE rec AS (
|
||||
SELECT
|
||||
id,
|
||||
parent_id
|
||||
FROM public.node
|
||||
WHERE
|
||||
id = $1
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
n.id,
|
||||
n.parent_id
|
||||
FROM node n
|
||||
INNER JOIN rec ON n.id = rec.parent_id
|
||||
)
|
||||
|
||||
SELECT
|
||||
hook.id
|
||||
FROM rec
|
||||
INNER JOIN hook ON
|
||||
hook.node_id = rec.id AND
|
||||
hook.schedule_on_child_update
|
||||
`,
|
||||
nodeID,
|
||||
)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var hookID int
|
||||
err = rows.Scan(&hookID)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
|
||||
err = ScheduleHook(hookID)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
} // }}}
|
||||
|
||||
func ScriptPreservedID(name, source string) (id int, err error) { // {{{
|
||||
sum := md5.Sum([]byte(source))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue