forked from FabianVowie/Lithium
Browse Source
Merge commit '47295de3fed8fb23db46eca4cff096ee3209f883' into HEAD
pr-feature/enhance-api-responses
Merge commit '47295de3fed8fb23db46eca4cff096ee3209f883' into HEAD
pr-feature/enhance-api-responses
Jenkins
3 years ago
7 changed files with 158 additions and 137 deletions
-
13controllers/controllers.go
-
30controllers/index.go
-
16controllers/pipeline.go
-
91controllers/upload.go
-
11lithium.log
-
127main.go
-
7main_test.go
@ -0,0 +1,13 @@ |
|||||
|
package controllers |
||||
|
|
||||
|
import ( |
||||
|
"encoding/json" |
||||
|
"net/http" |
||||
|
) |
||||
|
|
||||
|
func writeError(w http.ResponseWriter, status int, errStr string) { |
||||
|
w.WriteHeader(status) |
||||
|
json.NewEncoder(w).Encode(struct { |
||||
|
Error string `json:"error"` |
||||
|
}{errStr}) |
||||
|
} |
@ -0,0 +1,30 @@ |
|||||
|
package controllers |
||||
|
|
||||
|
import ( |
||||
|
"encoding/json" |
||||
|
"github.com/geplauder/lithium/pipelines" |
||||
|
"net/http" |
||||
|
) |
||||
|
|
||||
|
type Metadata struct { |
||||
|
Name string `json:"name"` |
||||
|
Version string `json:"version"` |
||||
|
CommitHash string `json:"commit_hash"` |
||||
|
Pipelines []string `json:"pipelines"` |
||||
|
} |
||||
|
|
||||
|
const Name string = "Lithium" |
||||
|
const Version string = "0.1.0" |
||||
|
|
||||
|
func IndexHandler(pipelines []pipelines.IPipeline, w http.ResponseWriter, r *http.Request, gitCommit string) { |
||||
|
var pipelineNames []string |
||||
|
for _, x := range pipelines { |
||||
|
pipelineNames = append(pipelineNames, x.GetSlug()) |
||||
|
} |
||||
|
|
||||
|
w.Header().Set("Content-Type", "application/json") |
||||
|
err := json.NewEncoder(w).Encode(Metadata{Name, Version, gitCommit, pipelineNames}) |
||||
|
if err != nil { |
||||
|
w.WriteHeader(http.StatusInternalServerError) |
||||
|
} |
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
package controllers |
||||
|
|
||||
|
import ( |
||||
|
"encoding/json" |
||||
|
"github.com/geplauder/lithium/pipelines" |
||||
|
"github.com/geplauder/lithium/storage" |
||||
|
"net/http" |
||||
|
) |
||||
|
|
||||
|
func PipelineHandler(pipeline pipelines.IPipeline, storageProvider storage.IStorageProvider, w http.ResponseWriter, r *http.Request) { |
||||
|
w.Header().Set("Content-Type", "application/json") |
||||
|
err := json.NewEncoder(w).Encode(pipeline) |
||||
|
if err != nil { |
||||
|
w.WriteHeader(http.StatusInternalServerError) |
||||
|
} |
||||
|
} |
@ -0,0 +1,91 @@ |
|||||
|
package controllers |
||||
|
|
||||
|
import ( |
||||
|
"bytes" |
||||
|
"encoding/json" |
||||
|
"github.com/geplauder/lithium/pipelines" |
||||
|
"github.com/geplauder/lithium/storage" |
||||
|
"github.com/sirupsen/logrus" |
||||
|
"io" |
||||
|
"net/http" |
||||
|
) |
||||
|
|
||||
|
func UploadHandler(w http.ResponseWriter, r *http.Request, pipes []pipelines.IPipeline, storageProvider storage.IStorageProvider) { |
||||
|
// open file handler
|
||||
|
formFile, handler, err := r.FormFile("file") |
||||
|
if err != nil { |
||||
|
writeError(w, http.StatusUnprocessableEntity, err.Error()) |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
defer formFile.Close() |
||||
|
|
||||
|
// check pipelines form param
|
||||
|
formPipeline := r.FormValue("pipeline") |
||||
|
if formPipeline == "" { |
||||
|
writeError(w, http.StatusUnprocessableEntity, "pipeline parameter missing") |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
var execPipe pipelines.IPipeline |
||||
|
for _, pipe := range pipes { |
||||
|
if formPipeline == pipe.GetSlug() { |
||||
|
execPipe = pipe |
||||
|
break |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if execPipe == nil { |
||||
|
writeError(w, http.StatusUnprocessableEntity, "pipeline not found") |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
bucket := r.FormValue("bucket") |
||||
|
if bucket == "" { |
||||
|
writeError(w, http.StatusUnprocessableEntity, "bucket parameter missing") |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
// open file
|
||||
|
file, err := handler.Open() |
||||
|
if err != nil { |
||||
|
writeError(w, http.StatusInternalServerError, "error reading uploaded file") |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
defer file.Close() |
||||
|
|
||||
|
// read file to buffer
|
||||
|
buf := bytes.NewBuffer(nil) |
||||
|
_, err = io.Copy(buf, file) |
||||
|
if err != nil { |
||||
|
writeError(w, http.StatusInternalServerError, "error reading file from buffer") |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
// store uploaded file
|
||||
|
_, err = storageProvider.StoreRaw(bucket, "source.jpg", buf.Bytes()) |
||||
|
if err != nil { |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
// execute pipeline
|
||||
|
output, err := execPipe.Run("source.jpg", bucket, storageProvider) |
||||
|
if err != nil { |
||||
|
writeError(w, http.StatusInternalServerError, "error executing pipeline") |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
w.Header().Set("Content-Type", "application/json") |
||||
|
|
||||
|
err = json.NewEncoder(w).Encode(struct { |
||||
|
Message string `json:"message"` |
||||
|
OutputFiles []string `json:"output_files"` |
||||
|
}{"ok", []string{output}}) |
||||
|
|
||||
|
if err != nil { |
||||
|
w.WriteHeader(http.StatusInternalServerError) |
||||
|
} |
||||
|
|
||||
|
logrus.Info("Pipeline routes registered successfully") |
||||
|
} |
@ -1,11 +0,0 @@ |
|||||
{"level":"info","msg":"Pipeline routes registered successfully","time":"2022-01-23T18:28:12+01:00"} |
|
||||
{"level":"info","msg":"Lithium started, listening for requests...","time":"2022-01-23T18:28:12+01:00"} |
|
||||
{"level":"info","msg":"Pipeline routes registered successfully","time":"2022-01-23T18:28:17+01:00"} |
|
||||
{"level":"info","msg":"Lithium started, listening for requests...","time":"2022-01-23T18:28:17+01:00"} |
|
||||
{"level":"info","msg":"Lithium started, listening for requests...","time":"2022-01-26T17:37:28+01:00"} |
|
||||
{"level":"info","msg":"Lithium started, listening for requests...","time":"2022-01-26T17:47:13+01:00"} |
|
||||
{"level":"info","msg":"Lithium started, listening for requests...","time":"2022-01-26T17:48:17+01:00"} |
|
||||
{"level":"info","msg":"Lithium started, listening for requests...","time":"2022-02-06T15:30:47+01:00"} |
|
||||
{"level":"info","msg":"Lithium started, listening for requests...","time":"2022-02-06T15:38:27+01:00"} |
|
||||
{"level":"info","msg":"Lithium started, listening for requests...","time":"2022-02-06T15:45:25+01:00"} |
|
||||
{"level":"info","msg":"Lithium started, listening for requests...","time":"2022-02-06T16:03:30+01:00"} |
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue