Initial job creation
[nonrtric.git] / dmaap-mediator-producer / internal / server / server.go
index ca30d73..c3a1331 100644 (file)
 package server
 
 import (
+       "encoding/json"
        "fmt"
+       "io/ioutil"
        "net/http"
+
+       "oransc.org/nonrtric/dmaapmediatorproducer/internal/jobs"
 )
 
 func StatusHandler(w http.ResponseWriter, r *http.Request) {
@@ -32,9 +36,46 @@ func StatusHandler(w http.ResponseWriter, r *http.Request) {
        }
 
        if r.Method != "GET" {
-               http.Error(w, "Method is not supported.", http.StatusNotFound)
+               http.Error(w, "Method is not supported.", http.StatusMethodNotAllowed)
                return
        }
 
        fmt.Fprintf(w, "All is well!")
 }
+
+func CreateInfoJobHandler(w http.ResponseWriter, r *http.Request) {
+       if r.URL.Path != "/producer_simulator/info_job" {
+               http.Error(w, "404 not found.", http.StatusNotFound)
+               return
+       }
+
+       if r.Method != "POST" {
+               http.Error(w, "Method is not supported.", http.StatusMethodNotAllowed)
+               return
+       }
+
+       b, readErr := ioutil.ReadAll(r.Body)
+       if readErr != nil {
+               http.Error(w, fmt.Sprintf("Unable to read body due to: %v", readErr), http.StatusBadRequest)
+               return
+       }
+       jobInfo := jobs.JobInfo{}
+       if unmarshalErr := json.Unmarshal(b, &jobInfo); unmarshalErr != nil {
+               http.Error(w, fmt.Sprintf("Invalid json body. Cause: %v", unmarshalErr), http.StatusBadRequest)
+               return
+       }
+       if err := jobs.AddJob(jobInfo); err != nil {
+               http.Error(w, fmt.Sprintf("Invalid job info. Cause: %v", err), http.StatusBadRequest)
+       }
+}
+
+func CreateServer(port int, handlerFunc func(http.ResponseWriter, *http.Request)) *http.Server {
+
+       mux := http.NewServeMux()
+       mux.HandleFunc("/", handlerFunc)
+       server := http.Server{
+               Addr:    fmt.Sprintf(":%v", port), // :{port}
+               Handler: mux,
+       }
+       return &server
+}