Script execution list
This commit is contained in:
parent
13a5b9a973
commit
55724b36b5
8 changed files with 517 additions and 14 deletions
|
|
@ -3,6 +3,7 @@ package main
|
|||
import (
|
||||
// External
|
||||
werr "git.gibonuddevalla.se/go/wrappederror"
|
||||
"github.com/jmoiron/sqlx"
|
||||
|
||||
// Standard
|
||||
"bytes"
|
||||
|
|
@ -25,15 +26,30 @@ type ScriptExecution struct {
|
|||
ID int
|
||||
TimeStart sql.NullTime `db:"time_start"`
|
||||
TimeEnd sql.NullTime `db:"time_end"`
|
||||
Source []byte
|
||||
Data []byte
|
||||
ScriptName string `db:"script_name"`
|
||||
Source string
|
||||
Data string
|
||||
SSH string
|
||||
Env []byte
|
||||
Env string
|
||||
OutputStdout sql.NullString `db:"output_stdout"`
|
||||
OutputStderr sql.NullString `db:"output_stderr"`
|
||||
ExitCode sql.NullInt16
|
||||
}
|
||||
|
||||
type ScriptExecutionBrief struct {
|
||||
ID int
|
||||
TimeStart sql.NullTime `db:"time_start"`
|
||||
TimeEnd sql.NullTime `db:"time_end"`
|
||||
ScriptName string `db:"script_name"`
|
||||
SSH string
|
||||
ExitCode sql.NullInt16
|
||||
HasSource bool `db:"has_source"`
|
||||
HasData bool `db:"has_data"`
|
||||
HasEnv bool `db:"has_env"`
|
||||
HasOutputStdout bool `db:"has_output_stdout"`
|
||||
HasOutputStderr bool `db:"has_output_stderr"`
|
||||
}
|
||||
|
||||
func NewScriptScheduler() (sched ScriptScheduler) {
|
||||
sched.EventQueue = make(chan string, 64)
|
||||
return
|
||||
|
|
@ -200,7 +216,7 @@ func (se *ScriptExecution) SSHCommand(stdin []byte, log bool, args ...string) (s
|
|||
func (se *ScriptExecution) UploadScript() (fnames []string, err error) { // {{{
|
||||
var filenames string
|
||||
filenames, err = se.SSHCommand(
|
||||
se.Source,
|
||||
[]byte(se.Source),
|
||||
true,
|
||||
`sh -c 'RUNENV=$(mktemp -t datagraph.XXXXXX) && SCRIPT=$(mktemp -t datagraph.XXXXXX) && touch $RUNENV $SCRIPT && chmod 700 $RUNENV $SCRIPT && cat >$SCRIPT && echo $RUNENV $SCRIPT'`,
|
||||
)
|
||||
|
|
@ -219,7 +235,7 @@ func (se *ScriptExecution) UploadScript() (fnames []string, err error) { // {{{
|
|||
} // }}}
|
||||
func (se *ScriptExecution) UploadEnv(envFname, scriptFname string) (err error) { // {{{
|
||||
env := make(map[string]string)
|
||||
err = json.Unmarshal(se.Env, &env)
|
||||
err = json.Unmarshal([]byte(se.Env), &env)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
|
|
@ -243,9 +259,79 @@ func (se *ScriptExecution) UploadEnv(envFname, scriptFname string) (err error) {
|
|||
return
|
||||
} // }}}
|
||||
func (se *ScriptExecution) RunScript(fname string) (err error) { // {{{
|
||||
_, err = se.SSHCommand(se.Data, true, fname)
|
||||
_, err = se.SSHCommand([]byte(se.Data), true, fname)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
}
|
||||
return
|
||||
} // }}}
|
||||
|
||||
func GetScriptExecutions() (executions []ScriptExecutionBrief, err error) { // {{{
|
||||
executions = []ScriptExecutionBrief{}
|
||||
|
||||
var rows *sqlx.Rows
|
||||
rows, err = db.Queryx(`
|
||||
SELECT
|
||||
e.id,
|
||||
time_start,
|
||||
time_end,
|
||||
ssh,
|
||||
sl.name AS script_name,
|
||||
exitcode,
|
||||
LENGTH(source) > 0 AS has_source,
|
||||
LENGTH(data::varchar) > 0 AS has_data,
|
||||
LENGTH(env::varchar) > 0 AS has_env,
|
||||
LENGTH(output_stdout) > 0 AS has_output_stdout,
|
||||
LENGTH(output_stderr) > 0 AS has_output_stderr
|
||||
FROM execution e
|
||||
INNER JOIN script_log sl ON e.script_log_id = sl.id
|
||||
ORDER BY
|
||||
id DESC
|
||||
LIMIT 100
|
||||
`)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var execution ScriptExecutionBrief
|
||||
err = rows.StructScan(&execution)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
executions = append(executions, execution)
|
||||
}
|
||||
|
||||
return
|
||||
} // }}}
|
||||
func GetScriptExecution(id int) (e ScriptExecution, err error) {
|
||||
row := db.QueryRowx(`
|
||||
SELECT
|
||||
e.id,
|
||||
time_start,
|
||||
time_end,
|
||||
ssh,
|
||||
sl.name AS script_name,
|
||||
sl.source,
|
||||
exitcode,
|
||||
data,
|
||||
env,
|
||||
output_stdout,
|
||||
output_stderr
|
||||
FROM execution e
|
||||
INNER JOIN script_log sl ON e.script_log_id = sl.id
|
||||
WHERE
|
||||
e.id = $1`,
|
||||
id,
|
||||
)
|
||||
|
||||
err = row.StructScan(&e)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue