Add readiness check into the cmd line
[aaf/sms.git] / sms-service / src / preload / preload.go
index cbf345f..2e654fa 100644 (file)
@@ -28,7 +28,6 @@ import (
        "net/http"
        "net/url"
        "path/filepath"
-       "strconv"
        "strings"
        "time"
 
@@ -116,13 +115,51 @@ func (c *smsClient) init() error {
        return nil
 }
 
-func (c *smsClient) sendPostRequest(relURL string, message map[string]interface{}) error {
+func (c *smsClient) resolveURL(relURL string) (*url.URL, error) {
 
        rel, err := url.Parse(relURL)
+       if err != nil {
+               return nil, pkgerrors.Cause(err)
+       }
+
+       return c.BaseURL.ResolveReference(rel), nil
+
+}
+
+func (c *smsClient) sendGetRequest(relURL string) (map[string]interface{}, error) {
+
+       u, err := c.resolveURL(relURL)
+       if err != nil {
+               return nil, pkgerrors.Cause(err)
+       }
+
+       resp, err := c.httpClient.Get(u.String())
+       if err != nil {
+               return nil, pkgerrors.Cause(err)
+       }
+
+       if resp.StatusCode >= 400 && resp.StatusCode < 600 {
+               // Request Failed
+               errText, _ := ioutil.ReadAll(resp.Body)
+               return nil, pkgerrors.Errorf("Request Failed with: %s and Error: %s",
+                       resp.Status, string(errText))
+       }
+
+       var result map[string]interface{}
+       err = json.NewDecoder(resp.Body).Decode(&result)
+       if err != nil {
+               return nil, pkgerrors.Cause(err)
+       }
+
+       return result, nil
+}
+
+func (c *smsClient) sendPostRequest(relURL string, message map[string]interface{}) error {
+
+       u, err := c.resolveURL(relURL)
        if err != nil {
                return pkgerrors.Cause(err)
        }
-       u := c.BaseURL.ResolveReference(rel)
 
        body, err := json.Marshal(message)
        if err != nil {
@@ -158,8 +195,8 @@ func (c *smsClient) createDomain(domain string) error {
 }
 
 func (c *smsClient) createSecret(domain string, secret string,
-
        values map[string]interface{}) error {
+
        message := map[string]interface{}{
                "name":   secret,
                "values": values,
@@ -174,6 +211,22 @@ func (c *smsClient) createSecret(domain string, secret string,
        return nil
 }
 
+func (c *smsClient) isReady() bool {
+
+       url := "v1/sms/quorum/status"
+       res, err := c.sendGetRequest(url)
+       if err != nil {
+               fmt.Println(pkgerrors.Cause(err))
+               return false
+       }
+
+       if res["sealstatus"] == true {
+               return false
+       }
+
+       return true
+}
+
 //uploadToSMS reads through the domain or domains and uploads
 //their corresponding secrets to SMS service
 func (c *smsClient) uploadToSMS(data DataJSON) error {
@@ -190,6 +243,18 @@ func (c *smsClient) uploadToSMS(data DataJSON) error {
                return pkgerrors.New("Invalid JSON Data. No domain or domains found")
        }
 
+       isReady := make(chan bool)
+       go func() {
+               for c.isReady() == false {
+                       time.Sleep(5 * time.Second)
+                       fmt.Println("Waiting for SMS to accept requests...")
+               }
+               isReady <- true
+       }()
+       <-isReady
+
+       fmt.Println("Uploading data...")
+
        for _, d := range ldata {
                err := c.createDomain(d.Name)
                if err != nil {
@@ -213,19 +278,26 @@ func main() {
                "Path to the CA Certificate file")
        serviceurl := flag.String("serviceurl", "https://aaf-sms.onap",
                "Url for the SMS Service")
-       serviceport := flag.Int("serviceport", 10443,
+       serviceport := flag.String("serviceport", "10443",
                "Service port if its different than the default")
        jsondir := flag.String("jsondir", ".",
                "Folder containing json files to upload")
 
        flag.Parse()
 
+       //Clear all trailing/leading spaces from incoming strings
+       *cacert = strings.TrimSpace(*cacert)
+       *serviceurl = strings.TrimSpace(*serviceurl)
+       *serviceport = strings.TrimSpace(*serviceport)
+       *jsondir = strings.TrimSpace(*jsondir)
+
        files, err := ioutil.ReadDir(*jsondir)
        if err != nil {
                log.Fatal(pkgerrors.Cause(err))
        }
 
-       serviceURL, err := url.Parse(*serviceurl + ":" + strconv.Itoa(*serviceport))
+       //URL validity is checked here
+       serviceURL, err := url.Parse(*serviceurl + ":" + *serviceport)
        if err != nil {
                log.Fatal(pkgerrors.Cause(err))
        }
@@ -239,8 +311,8 @@ func main() {
 
        for _, file := range files {
                if filepath.Ext(file.Name()) == ".json" {
-                       fmt.Println("Processing   ", file.Name())
-                       d, err := processJSONFile(file.Name())
+                       fmt.Println("Processing   ", filepath.Join(*jsondir, file.Name()))
+                       d, err := processJSONFile(filepath.Join(*jsondir, file.Name()))
                        if err != nil {
                                log.Printf("Error Reading %s : %s", file.Name(), pkgerrors.Cause(err))
                                continue