Add status check to REST API of Go products
[nonrtric.git] / test / usecases / oruclosedlooprecovery / goversion / main.go
index b7d6895..c3d731f 100644 (file)
@@ -37,20 +37,16 @@ import (
        "oransc.org/usecase/oruclosedloop/internal/restclient"
 )
 
-type Server interface {
-       ListenAndServe() error
-}
-
 const jobId = "14e7bb84-a44d-44c1-90b7-6995a92ad43c"
 
 var jobRegistrationInfo = struct {
-       InfoTypeId    string      `json:"info_type_id"`
-       JobResultUri  string      `json:"job_result_uri"`
+       InfoTypeID    string      `json:"info_type_id"`
+       JobResultURI  string      `json:"job_result_uri"`
        JobOwner      string      `json:"job_owner"`
        JobDefinition interface{} `json:"job_definition"`
 }{
-       InfoTypeId:    "STD_Fault_Messages",
-       JobResultUri:  "",
+       InfoTypeID:    "STD_Fault_Messages",
+       JobResultURI:  "",
        JobOwner:      "O-RU Closed Loop Usecase",
        JobDefinition: "{}",
 }
@@ -60,6 +56,7 @@ var configuration *config.Config
 var linkfailureConfig linkfailure.Configuration
 var lookupService repository.LookupService
 var consumerPort string
+var started bool
 
 func init() {
        doInit()
@@ -72,7 +69,7 @@ func doInit() {
        log.Debug("Using configuration: ", configuration)
 
        consumerPort = fmt.Sprint(configuration.ConsumerPort)
-       jobRegistrationInfo.JobResultUri = configuration.ConsumerHost + ":" + consumerPort
+       jobRegistrationInfo.JobResultURI = configuration.ConsumerHost + ":" + consumerPort
 
        linkfailureConfig = linkfailure.Configuration{
                SDNRAddress:  configuration.SDNRAddress,
@@ -134,6 +131,7 @@ func getRouter() *mux.Router {
 
        r := mux.NewRouter()
        r.HandleFunc("/", messageHandler.MessagesHandler).Methods(http.MethodPost).Name("messageHandler")
+       r.HandleFunc("/status", statusHandler).Methods(http.MethodGet).Name("status")
        r.HandleFunc("/admin/start", startHandler).Methods(http.MethodPost).Name("start")
        r.HandleFunc("/admin/stop", stopHandler).Methods(http.MethodPost).Name("stop")
 
@@ -150,7 +148,7 @@ func startServer() {
        if err != nil {
                log.Errorf("Server stopped unintentionally due to: %v. Deleteing job.", err)
                if deleteErr := deleteJob(); deleteErr != nil {
-                       log.Error(fmt.Sprintf("Unable to delete consumer job due to: %v. Please remove job %v manually.", deleteErr, jobId))
+                       log.Errorf("Unable to delete consumer job due to: %v. Please remove job %v manually.", deleteErr, jobId)
                }
        }
 }
@@ -168,6 +166,7 @@ func startHandler(w http.ResponseWriter, r *http.Request) {
                return
        }
        log.Debug("Registered job.")
+       started = true
 }
 
 func stopHandler(w http.ResponseWriter, r *http.Request) {
@@ -177,6 +176,15 @@ func stopHandler(w http.ResponseWriter, r *http.Request) {
                return
        }
        log.Debug("Deleted job.")
+       started = false
+}
+
+func statusHandler(w http.ResponseWriter, r *http.Request) {
+       runStatus := "started"
+       if !started {
+               runStatus = "stopped"
+       }
+       fmt.Fprintf(w, `{"status": "%v"}`, runStatus)
 }
 
 func deleteOnShutdown(s chan os.Signal) {
@@ -185,7 +193,7 @@ func deleteOnShutdown(s chan os.Signal) {
        <-s
        log.Info("Shutting down gracefully.")
        if err := deleteJob(); err != nil {
-               log.Error(fmt.Sprintf("Unable to delete job on shutdown due to: %v. Please remove job %v manually.", err, jobId))
+               log.Errorf("Unable to delete job on shutdown due to: %v. Please remove job %v manually.", err, jobId)
        }
 }