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
}