Include version for release
[ric-plt/ricdms.git] / pkg / charts / chart_manager.go
index 252b2dc..e78238d 100644 (file)
@@ -21,6 +21,9 @@
 package charts
 
 import (
+       "encoding/json"
+       "fmt"
+       "io"
        "io/ioutil"
        "net/http"
 
@@ -31,20 +34,23 @@ type ChartMgr struct {
 }
 
 type IChartMgr interface {
-       GetCharts() (string, error)
+       GetCharts() (map[string]interface{}, error)
+       DownloadChart(chartName string, version string) (io.ReadCloser, error)
+       GetChartsByName(name string) ([]map[string]interface{}, error)
+       GetChartsByNameAndVersion(name, version string) (map[string]interface{}, error)
 }
 
 func NewChartmgr() IChartMgr {
        return &ChartMgr{}
 }
 
-func (c *ChartMgr) GetCharts() (string, error) {
+func (c *ChartMgr) GetCharts() (map[string]interface{}, error) {
        ricdms.Logger.Debug("GetCharts invoked")
 
        resp, err := http.Get(ricdms.Config.GetChartsURL)
        if err != nil {
                ricdms.Logger.Debug("Error in getting charts : %+v", err)
-               return "", err
+               return make(map[string]interface{}, 0), err
        }
 
        defer resp.Body.Close()
@@ -52,9 +58,94 @@ func (c *ChartMgr) GetCharts() (string, error) {
 
        if err != nil {
                ricdms.Logger.Debug("error in response: %+v", respByte)
-               return "", err
+               return make(map[string]interface{}, 0), err
        }
 
        ricdms.Logger.Debug("response : %+v", string(respByte))
-       return string(respByte), nil
+
+       v := make(map[string]interface{}, 0)
+       json.Unmarshal(respByte, &v)
+       return v, nil
+}
+
+func (c *ChartMgr) DownloadChart(chartName string, version string) (io.ReadCloser, error) {
+       ricdms.Logger.Debug("Download Charts invoked")
+
+       if chartName == "" || version == "" {
+               return nil, fmt.Errorf("chartname or version is empty")
+       }
+
+       ChartURL := fmt.Sprintf(ricdms.Config.DownloadChartURLFormat, chartName, version)
+
+       resp, err := http.Get(ChartURL)
+       if err != nil {
+               return nil, err
+       }
+
+       return resp.Body, nil
+}
+
+func (c *ChartMgr) GetChartsByName(name string) ([]map[string]interface{}, error) {
+       ricdms.Logger.Debug("Get Chart by xApp name is invoked")
+
+       if name == "" {
+               return make([]map[string]interface{}, 0), fmt.Errorf("xAppname is empty")
+       }
+
+       URL := fmt.Sprintf(ricdms.Config.GetChartsByxAppNameURL, name)
+
+       response, err := http.Get(URL)
+       if err != nil {
+               ricdms.Logger.Error("error: %v", err)
+               return make([]map[string]interface{}, 0), err
+       }
+
+       defer response.Body.Close()
+       data, err := ioutil.ReadAll(response.Body)
+
+       if err != nil {
+               ricdms.Logger.Debug("Reading response failed with err : %v", err)
+               return make([]map[string]interface{}, 0), err
+       }
+
+       v := make([]map[string]interface{}, 0)
+       err = json.Unmarshal(data, &v)
+       if err != nil {
+               ricdms.Logger.Debug("Error while parsing res: %v", err)
+               return make([]map[string]interface{}, 0), err
+       }
+       return v, nil
+}
+
+func (c *ChartMgr) GetChartsByNameAndVersion(name, version string) (map[string]interface{}, error) {
+       ricdms.Logger.Debug("Get Charts by name and version is invoked")
+
+       if name == "" || version == "" {
+               return make(map[string]interface{}, 0), fmt.Errorf("name or version is not provided")
+       }
+
+       URL := fmt.Sprintf(ricdms.Config.GetChartsByNameAndVersionURL, name, version)
+
+       response, err := http.Get(URL)
+       if err != nil {
+               ricdms.Logger.Debug("error in retrieving chart: %v", err)
+               return make(map[string]interface{}, 0), err
+       }
+
+       defer response.Body.Close()
+       data, err := ioutil.ReadAll(response.Body)
+
+       if err != nil {
+               ricdms.Logger.Debug("error in reading response: %v", err)
+               return make(map[string]interface{}, 0), err
+       }
+
+       v := make(map[string]interface{}, 0)
+       err = json.Unmarshal(data, &v)
+       if err != nil {
+               ricdms.Logger.Debug("error in parsing response: %v", err)
+               return make(map[string]interface{}, 0), err
+       }
+
+       return v, nil
 }