diff --git a/home-manager/services/cliproxyapi/scripts/common.sh b/home-manager/services/cliproxyapi/scripts/common.sh index 84f7641c4..a4c89657c 100644 --- a/home-manager/services/cliproxyapi/scripts/common.sh +++ b/home-manager/services/cliproxyapi/scripts/common.sh @@ -58,3 +58,33 @@ cliproxy_sync_auth_to_s3() { local auth_dir="$1" cliproxy_s3_sync "$auth_dir/" "$(cliproxy_auth_s3_uri)" } + +cliproxy_usage_s3_uri() { + printf 's3://%s/usage-export.json' "${OBJECTSTORE_BUCKET:?OBJECTSTORE_BUCKET is required}" +} + +cliproxy_upload_usage_to_s3() { + local src="$1" + [ -f "$src" ] || return 0 + cliproxy_has_objectstore_credentials || return 0 + AWS_ACCESS_KEY_ID="$OBJECTSTORE_ACCESS_KEY" \ + AWS_SECRET_ACCESS_KEY="$OBJECTSTORE_SECRET_KEY" \ + @aws@ s3 cp \ + --endpoint-url="$OBJECTSTORE_ENDPOINT" \ + --no-progress \ + "$src" \ + "$(cliproxy_usage_s3_uri)" || true +} + +cliproxy_download_usage_from_s3() { + local dst="$1" + cliproxy_has_objectstore_credentials || return 0 + mkdir -p "$(dirname "$dst")" + AWS_ACCESS_KEY_ID="$OBJECTSTORE_ACCESS_KEY" \ + AWS_SECRET_ACCESS_KEY="$OBJECTSTORE_SECRET_KEY" \ + @aws@ s3 cp \ + --endpoint-url="$OBJECTSTORE_ENDPOINT" \ + --no-progress \ + "$(cliproxy_usage_s3_uri)" \ + "$dst" || true +} diff --git a/home-manager/services/cliproxyapi/scripts/start.sh b/home-manager/services/cliproxyapi/scripts/start.sh index 5cbb938d2..579d7f04e 100755 --- a/home-manager/services/cliproxyapi/scripts/start.sh +++ b/home-manager/services/cliproxyapi/scripts/start.sh @@ -27,6 +27,11 @@ if cliproxy_has_objectstore_credentials; then if [ -n "$(ls -A "$AUTH_DIR" 2>/dev/null)" ]; then cliproxy_sync_auth_to_s3 "$AUTH_DIR" fi + + if [ ! -f "$USAGE_EXPORT_FILE" ]; then + echo "⚠️ Usage export missing locally; hydrating from S3" >&2 + cliproxy_download_usage_from_s3 "$USAGE_EXPORT_FILE" + fi fi # Generate config from template @@ -118,6 +123,7 @@ usage_export() { -H "Authorization: Bearer ${MANAGEMENT_KEY}" \ "${MANAGEMENT_URL}/usage/export" \ -o "$USAGE_EXPORT_FILE" || true + cliproxy_upload_usage_to_s3 "$USAGE_EXPORT_FILE" } wait_for_management() {