137 lines
2.6 KiB
Go
137 lines
2.6 KiB
Go
|
package db
|
||
|
|
||
|
import (
|
||
|
"database/sql"
|
||
|
"encoding/json"
|
||
|
|
||
|
"code.dumpstack.io/tools/out-of-tree/api"
|
||
|
)
|
||
|
|
||
|
func createJobTable(db *sql.DB) (err error) {
|
||
|
_, err = db.Exec(`
|
||
|
CREATE TABLE IF NOT EXISTS job (
|
||
|
id INTEGER PRIMARY KEY,
|
||
|
uuid TEXT,
|
||
|
repo TEXT,
|
||
|
"commit" TEXT,
|
||
|
params TEXT,
|
||
|
config TEXT,
|
||
|
target TEXT,
|
||
|
status TEXT DEFAULT "new"
|
||
|
)`)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func AddJob(db *sql.DB, job *api.Job) (err error) {
|
||
|
stmt, err := db.Prepare(`INSERT INTO job (uuid, repo, "commit", params, config, target) ` +
|
||
|
`VALUES ($1, $2, $3, $4, $5, $6);`)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
defer stmt.Close()
|
||
|
|
||
|
config := api.Marshal(job.Artifact)
|
||
|
target := api.Marshal(job.Target)
|
||
|
|
||
|
res, err := stmt.Exec(job.UUID, job.RepoName, job.Commit, job.Params,
|
||
|
config, target,
|
||
|
)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
job.ID, err = res.LastInsertId()
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func UpdateJob(db *sql.DB, job api.Job) (err error) {
|
||
|
stmt, err := db.Prepare(`UPDATE job SET uuid=$1, repo=$2, "commit"=$3, params=$4, ` +
|
||
|
`config=$5, target=$6, status=$7 WHERE id=$8`)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
defer stmt.Close()
|
||
|
|
||
|
config := api.Marshal(job.Artifact)
|
||
|
target := api.Marshal(job.Target)
|
||
|
|
||
|
_, err = stmt.Exec(job.UUID, job.RepoName, job.Commit, job.Params,
|
||
|
config, target,
|
||
|
job.Status, job.ID)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func Jobs(db *sql.DB) (jobs []api.Job, err error) {
|
||
|
stmt, err := db.Prepare(`SELECT id, uuid, repo, "commit", params, config, target, status FROM job`)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
defer stmt.Close()
|
||
|
|
||
|
rows, err := stmt.Query()
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
|
||
|
for rows.Next() {
|
||
|
var job api.Job
|
||
|
var config, target []byte
|
||
|
err = rows.Scan(&job.ID, &job.UUID, &job.RepoName, &job.Commit, &job.Params, &config, &target, &job.Status)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err = json.Unmarshal(config, &job.Artifact)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err = json.Unmarshal(target, &job.Target)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
jobs = append(jobs, job)
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func Job(db *sql.DB, uuid string) (job api.Job, err error) {
|
||
|
stmt, err := db.Prepare(`SELECT id, uuid, repo, "commit", ` +
|
||
|
`params, config, target, status ` +
|
||
|
`FROM job WHERE uuid=$1`)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
defer stmt.Close()
|
||
|
|
||
|
err = stmt.QueryRow(uuid).Scan(&job.ID, &job.UUID,
|
||
|
&job.RepoName, &job.Commit, &job.Params,
|
||
|
&job.Artifact, &job.Target, &job.Status)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func JobStatus(db *sql.DB, uuid string) (st api.Status, err error) {
|
||
|
stmt, err := db.Prepare(`SELECT status FROM job ` +
|
||
|
`WHERE uuid=$1`)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
defer stmt.Close()
|
||
|
|
||
|
err = stmt.QueryRow(uuid).Scan(&st)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|