Issue-ID: RICAPP-169 - Inclusion of InfluxDB helm chart for KPIMON, AD, TS, QP xApps
[ric-plt/ric-dep.git] / helm / 3rdparty / influxdb / files / backup-retention-script.sh
diff --git a/helm/3rdparty/influxdb/files/backup-retention-script.sh b/helm/3rdparty/influxdb/files/backup-retention-script.sh
new file mode 100644 (file)
index 0000000..913794a
--- /dev/null
@@ -0,0 +1,66 @@
+#! /usr/bin/env bash
+
+set -e
+
+# This script wants these variable to be set.
+
+## S3_BUCKET <- The name of the bucket where the backups are stored
+## S3_ENDPOINT <- The endpoint of the S3 service
+## AWS_ACCESS_KEY_ID <- Access credentials        
+## AWS_SECRET_ACCESS_KEY <- Access credentials
+## DAYS_TO_RETAIN <- The TTL for the backups === number of backups to keep.
+
+# Sanity check to avoid removing all backups.
+[[ "$DAYS_TO_RETAIN" -lt 1 ]] && DAYS_TO_RETAIN=1
+
+function get_records {
+    before_date="$1"
+
+    aws s3api list-objects \
+        --bucket ${S3_BUCKET} \
+        --endpoint-url ${S3_ENDPOINT} \
+        --query "Contents[?LastModified<='${before_date}'][].{Key: Key}"
+}
+
+function remove_old_backups {
+    before_date=$(date --iso-8601=seconds -d "-${DAYS_TO_RETAIN} days")  
+    now=$(date --iso-8601=seconds)
+
+    del_records=$(get_records "${before_date}")
+    all_records=$(get_records "${now}")
+
+    del_paths=()
+    all_paths=()
+    
+    function _jq {
+        echo ${row} | base64 --decode | jq -r ${1}
+    }
+
+    for row in $(echo "${del_records}" | jq -r '.[] | @base64'); do       
+        del_paths+=($(_jq '.Key'))                
+    done
+
+    for row in $(echo "${all_records}" | jq -r '.[] | @base64'); do
+        all_paths+=($(_jq '.Key'))                
+    done
+
+    # Number of backups left if all old backups are removed.
+    left=$((${#all_paths[@]} - ${#del_paths[@]}))
+
+    # We ALWAYS keep N backups even if their TTL has expired!
+    if (( ${left} < ${DAYS_TO_RETAIN} )); then
+        num_to_delete=$((${#all_paths[@]} - ${DAYS_TO_RETAIN}))
+    else
+        num_to_delete=${#del_paths[@]}
+    fi
+
+    for path in "${del_paths[@]::${num_to_delete}}"; do
+        aws s3 rm "s3://${S3_BUCKET}/${path}" \
+            --endpoint-url "${S3_ENDPOINT}"
+    done
+}
+
+# Installs jq.
+yum install -y jq
+
+remove_old_backups