90 lines
2.0 KiB
Go
Executable File
90 lines
2.0 KiB
Go
Executable File
package server
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"local/firestormy/config"
|
|
"local/firestormy/config/ns"
|
|
"local/firestormy/scheduler"
|
|
"local/router"
|
|
"log"
|
|
"net/http"
|
|
"sort"
|
|
)
|
|
|
|
func (s *Server) Routes() error {
|
|
wildcard := router.Wildcard
|
|
endpoints := []struct {
|
|
path string
|
|
handler http.HandlerFunc
|
|
}{
|
|
{
|
|
path: fmt.Sprintf("/upserts"),
|
|
handler: s.gzip(s.authenticate(s.upserts)),
|
|
},
|
|
{
|
|
path: fmt.Sprintf("/list"),
|
|
handler: s.gzip(s.authenticate(s.list)),
|
|
},
|
|
{
|
|
path: fmt.Sprintf("%s%s", wildcard, wildcard),
|
|
handler: s.gzip(s.authenticate(s.static)),
|
|
},
|
|
}
|
|
|
|
for _, endpoint := range endpoints {
|
|
if err := s.Add(endpoint.path, endpoint.handler); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *Server) static(w http.ResponseWriter, r *http.Request) {
|
|
s.fileServer.ServeHTTP(w, r)
|
|
}
|
|
|
|
func (s *Server) upserts(w http.ResponseWriter, r *http.Request) {
|
|
upsert, err := newUpsertRequest(r.Body)
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusBadRequest)
|
|
return
|
|
}
|
|
log.Println("received", upsert)
|
|
http.Error(w, "not impl", http.StatusNotImplemented)
|
|
}
|
|
|
|
func (s *Server) list(w http.ResponseWriter, r *http.Request) {
|
|
jobs, err := config.Store.List(ns.Jobs)
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
sort.Strings(jobs)
|
|
out := make([]map[string]interface{}, len(jobs))
|
|
for i, job := range jobs {
|
|
out[i] = make(map[string]interface{})
|
|
b, err := config.Store.Get(job, ns.Jobs...)
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
j := &scheduler.Job{}
|
|
if err := j.Decode(b); err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
out[i]["id"] = j.Name
|
|
out[i]["cron"] = j.Schedule
|
|
out[i]["language"] = j.Runner.String()
|
|
out[i]["script"] = j.Raw
|
|
out[i]["last"] = map[string]interface{}{
|
|
"run": j.LastRun,
|
|
"runtime": j.LastRuntime,
|
|
"output": j.LastOutput,
|
|
"status": j.LastStatus,
|
|
}
|
|
}
|
|
json.NewEncoder(w).Encode(out)
|
|
}
|