func()

in pkg/exporter/exporter.go [120:175]


func (e *Exporter) RefreshData(ctx context.Context, configMapName string, region string) error {
	// get current object (if any) in case we could not update the data.
	currentConfigMap, err := e.GetConfigMap(ctx, configMapName)
	if err != nil {
		return err
	}

	//delete old configmap if any
	err = e.DeleteConfigMap(ctx, configMapName)
	if err != nil && !apierrors.IsNotFound(err) {
		return err
	}

	var forecast []client.EmissionsForecastDto
	err = retry.OnError(constantBackoff, func(err error) bool {
		return true
	}, func() error {
		forecast, err = e.getCurrentForecastData(ctx, region)
		return err
	})
	if err != nil {
		if currentConfigMap != nil {
			// return old data with failed message
			return e.UseCurrentConfigMap(ctx, err.Error(), currentConfigMap)
		} else {
			e.recorder.Eventf(&corev1.ObjectReference{
				Kind:      "Pod",
				Namespace: client.Namespace,
				Name:      client.PodName,
			}, corev1.EventTypeWarning, "Cannot retrieve updated forecast data", "Error while retrieving updated forecast data")
			klog.Errorf("an error has occurred while retrieving updated forecast data")
			return err
		}
	}

	err = retry.OnError(constantBackoff, func(err error) bool {
		return true
	}, func() error {
		return e.CreateConfigMapFromEmissionForecast(ctx, configMapName, forecast)
	})
	if err != nil {
		e.recorder.Eventf(&corev1.ObjectReference{
			Kind:      "Pod",
			Namespace: client.Namespace,
			Name:      client.PodName,
		}, corev1.EventTypeWarning, "Configmap Create", "Error while creating configMap")
		klog.Errorf("an error has occurred while creating %s configMap, err: %s", configMapName, err.Error())
		return err
	}
	e.recorder.Eventf(&corev1.ObjectReference{
		Kind:      "Pod",
		Namespace: client.Namespace,
		Name:      client.PodName,
	}, corev1.EventTypeNormal, "Exporter results", "Done retrieve data")
	return nil
}