+
+func updateDatasource(grafana map[string]string, datasource onapv1alpha1.Datasource, datasourceID string) error {
+ reqLogger := log.WithValues("Datasource name", datasource.Name, "Datasource URL", datasource.URL)
+ reqLogger.Info("Updating datasource")
+
+ grafanaURL := grafana["url"] + "/api/datasources/" + datasourceID
+ grafanaUsername := grafana["username"]
+ grafanaPassword := grafana["password"]
+
+ client := &http.Client{}
+ putBody, err := json.Marshal(datasource)
+ if err != nil {
+ reqLogger.Error(err, "JSON Marshalling error")
+ return err
+ }
+ putReq, err := http.NewRequest("PUT", grafanaURL, bytes.NewBuffer(putBody))
+ if err != nil {
+ reqLogger.Error(err, "PUT REQUEST error")
+ return err
+ }
+ putReq.Header.Set("Content-Type", "application/json")
+ putReq.Header.Set("Accept", "application/json")
+ putReq.SetBasicAuth(grafanaUsername, grafanaPassword)
+
+ putResp, err := client.Do(putReq)
+ if err != nil {
+ reqLogger.Error(err, "PUT RESPONSE error")
+ return err
+ }
+ defer putReq.Body.Close()
+
+ if putResp.StatusCode == http.StatusOK {
+ reqLogger.Info("Datasource updated")
+ return nil
+ }
+ return err
+}
+
+func deleteDatasource(instance *onapv1alpha1.GrafanaDataSource) error {
+
+ datasources := instance.Spec.Datasources
+ grafana := instance.Spec.Grafana
+
+ for _, datasource := range datasources {
+
+ reqLogger := log.WithValues("Datasource name", datasource.Name, "Datasource URL", datasource.URL)
+ reqLogger.Info("Deleting datasource")
+
+ grafanaURL := grafana["url"] + "/api/datasources/name/" + datasource.Name
+ grafanaUsername := grafana["username"]
+ grafanaPassword := grafana["password"]
+
+ client := &http.Client{}
+ deleteReq, err := http.NewRequest("DELETE", grafanaURL, nil)
+ if err != nil {
+ reqLogger.Error(err, "DELETE request error")
+ return err
+ }
+
+ deleteReq.SetBasicAuth(grafanaUsername, grafanaPassword)
+
+ deleteResp, err := client.Do(deleteReq)
+ if err != nil {
+ reqLogger.Error(err, "DELETE RESPONSE error")
+ return err
+ }
+
+ if deleteResp.StatusCode == http.StatusOK {
+ reqLogger.Info("Datasource deleted")
+ return nil
+ }
+ return err
+ }
+ return nil
+}
+
+func checkDeletionTimestamp(reqlogger logr.Logger, instance *onapv1alpha1.GrafanaDataSource) bool {
+ isMarkedForDeletion := instance.GetDeletionTimestamp() != nil
+ return isMarkedForDeletion
+}
+
+func addFinalizer(reqlogger logr.Logger, instance *onapv1alpha1.GrafanaDataSource) error {
+ reqlogger.Info("Adding finalizer for the GrafanaDatasource")
+ instance.SetFinalizers(append(instance.GetFinalizers(), visualizationutils.VisualizationFinalizer))
+ return nil
+}
+
+func removeFinalizer(reqlogger logr.Logger, instance *onapv1alpha1.GrafanaDataSource) error {
+ reqlogger.Info("Removing finalizer for the GrafanaDatasource")
+ instance.SetFinalizers(visualizationutils.Remove(instance.GetFinalizers(), visualizationutils.VisualizationFinalizer))
+ return nil
+}