Implement get the charts by name and version
[ric-plt/ricdms.git] / pkg / charts / chart_manager.go
index 252b2dc..c0308dd 100644 (file)
@@ -21,6 +21,9 @@
 package charts
 
 import (
+       "encoding/json"
+       "fmt"
+       "io"
        "io/ioutil"
        "net/http"
 
@@ -32,6 +35,9 @@ type ChartMgr struct {
 
 type IChartMgr interface {
        GetCharts() (string, error)
+       DownloadChart(string, string) (io.ReadCloser, error)
+       GetChartsByName(name string) ([]map[string]interface{}, error)
+       GetChartsByNameAndVersion(name, version string) (map[string]interface{}, error)
 }
 
 func NewChartmgr() IChartMgr {
@@ -58,3 +64,85 @@ func (c *ChartMgr) GetCharts() (string, error) {
        ricdms.Logger.Debug("response : %+v", string(respByte))
        return string(respByte), 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.Request.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
+}