let mictronics retry

This commit is contained in:
ggman12
2026-02-14 15:07:08 -05:00
parent 0c7484e7bf
commit 0fcbad0fbc
2 changed files with 41 additions and 12 deletions
@@ -302,6 +302,7 @@ jobs:
python-version: "3.14" python-version: "3.14"
- name: Run Mictronics DB release script - name: Run Mictronics DB release script
continue-on-error: true
run: | run: |
python -m src.contributions.create_daily_microtonics_release ${{ inputs.date && format('--date {0}', inputs.date) || '' }} python -m src.contributions.create_daily_microtonics_release ${{ inputs.date && format('--date {0}', inputs.date) || '' }}
ls -lah data/openairframes ls -lah data/openairframes
@@ -312,11 +313,12 @@ jobs:
name: mictronics-db name: mictronics-db
path: data/openairframes/mictronics-db_*.zip path: data/openairframes/mictronics-db_*.zip
retention-days: 1 retention-days: 1
if-no-files-found: ignore
create-release: create-release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [build-faa, adsb-reduce, build-community] needs: [build-faa, adsb-reduce, build-community, build-adsbexchange-json, build-mictronics-db]
if: github.event_name != 'schedule' if: github.event_name != 'schedule' && !failure() && !cancelled()
steps: steps:
- name: Checkout for gh CLI - name: Checkout for gh CLI
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -351,6 +353,7 @@ jobs:
- name: Download Mictronics DB artifact - name: Download Mictronics DB artifact
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
continue-on-error: true
with: with:
name: mictronics-db name: mictronics-db
path: artifacts/mictronics path: artifacts/mictronics
@@ -405,8 +408,12 @@ jobs:
if [ -z "$JSON_FILE_ADSBX" ] || [ ! -f "$JSON_FILE_ADSBX" ]; then if [ -z "$JSON_FILE_ADSBX" ] || [ ! -f "$JSON_FILE_ADSBX" ]; then
MISSING_FILES="$MISSING_FILES ADSBX_JSON" MISSING_FILES="$MISSING_FILES ADSBX_JSON"
fi fi
# Optional files - warn but don't fail
OPTIONAL_MISSING=""
if [ -z "$ZIP_FILE_MICTRONICS" ] || [ ! -f "$ZIP_FILE_MICTRONICS" ]; then if [ -z "$ZIP_FILE_MICTRONICS" ] || [ ! -f "$ZIP_FILE_MICTRONICS" ]; then
MISSING_FILES="$MISSING_FILES MICTRONICS_ZIP" OPTIONAL_MISSING="$OPTIONAL_MISSING MICTRONICS_ZIP"
ZIP_FILE_MICTRONICS=""
fi fi
if [ -n "$MISSING_FILES" ]; then if [ -n "$MISSING_FILES" ]; then
@@ -425,7 +432,14 @@ jobs:
CSV_BASENAME_COMMUNITY=$(basename "$CSV_FILE_COMMUNITY" 2>/dev/null || echo "") CSV_BASENAME_COMMUNITY=$(basename "$CSV_FILE_COMMUNITY" 2>/dev/null || echo "")
ZIP_BASENAME=$(basename "$ZIP_FILE") ZIP_BASENAME=$(basename "$ZIP_FILE")
JSON_BASENAME_ADSBX=$(basename "$JSON_FILE_ADSBX") JSON_BASENAME_ADSBX=$(basename "$JSON_FILE_ADSBX")
ZIP_BASENAME_MICTRONICS=$(basename "$ZIP_FILE_MICTRONICS") ZIP_BASENAME_MICTRONICS=""
if [ -n "$ZIP_FILE_MICTRONICS" ]; then
ZIP_BASENAME_MICTRONICS=$(basename "$ZIP_FILE_MICTRONICS")
fi
if [ -n "$OPTIONAL_MISSING" ]; then
echo "WARNING: Optional files missing:$OPTIONAL_MISSING (will continue without them)"
fi
echo "date=$DATE" >> "$GITHUB_OUTPUT" echo "date=$DATE" >> "$GITHUB_OUTPUT"
echo "tag=$TAG" >> "$GITHUB_OUTPUT" echo "tag=$TAG" >> "$GITHUB_OUTPUT"
@@ -463,7 +477,7 @@ jobs:
with: with:
tag_name: ${{ steps.meta.outputs.tag }} tag_name: ${{ steps.meta.outputs.tag }}
name: ${{ steps.meta.outputs.name }} name: ${{ steps.meta.outputs.name }}
fail_on_unmatched_files: true fail_on_unmatched_files: false
body: | body: |
Automated daily snapshot generated at 06:00 UTC for ${{ steps.meta.outputs.date }}. Automated daily snapshot generated at 06:00 UTC for ${{ steps.meta.outputs.date }}.
@@ -473,7 +487,7 @@ jobs:
- ${{ steps.meta.outputs.csv_basename_community }} - ${{ steps.meta.outputs.csv_basename_community }}
- ${{ steps.meta.outputs.zip_basename }} - ${{ steps.meta.outputs.zip_basename }}
- ${{ steps.meta.outputs.json_basename_adsbx }} - ${{ steps.meta.outputs.json_basename_adsbx }}
- ${{ steps.meta.outputs.zip_basename_mictronics }} ${{ steps.meta.outputs.zip_basename_mictronics && format('- {0}', steps.meta.outputs.zip_basename_mictronics) || '' }}
files: | files: |
${{ steps.meta.outputs.csv_file_faa }} ${{ steps.meta.outputs.csv_file_faa }}
${{ steps.meta.outputs.csv_file_adsb }} ${{ steps.meta.outputs.csv_file_adsb }}
@@ -9,12 +9,17 @@ from __future__ import annotations
import argparse import argparse
import shutil import shutil
import sys
import time
from datetime import datetime, timezone from datetime import datetime, timezone
from pathlib import Path from pathlib import Path
from urllib.error import URLError
from urllib.request import Request, urlopen from urllib.request import Request, urlopen
URL = "https://www.mictronics.de/aircraft-database/indexedDB_old.php" URL = "https://www.mictronics.de/aircraft-database/indexedDB_old.php"
OUT_ROOT = Path("data/openairframes") OUT_ROOT = Path("data/openairframes")
MAX_RETRIES = 3
RETRY_DELAY = 30 # seconds
def main() -> None: def main() -> None:
@@ -28,12 +33,22 @@ def main() -> None:
zip_path = OUT_ROOT / f"mictronics-db_{date_str}.zip" zip_path = OUT_ROOT / f"mictronics-db_{date_str}.zip"
print(f"Downloading {URL}...") for attempt in range(1, MAX_RETRIES + 1):
req = Request(URL, headers={"User-Agent": "openairframes-downloader/1.0"}, method="GET") try:
with urlopen(req, timeout=300) as r, zip_path.open("wb") as f: print(f"Downloading {URL} (attempt {attempt}/{MAX_RETRIES})...")
shutil.copyfileobj(r, f) req = Request(URL, headers={"User-Agent": "Mozilla/5.0 (compatible; openairframes-downloader/1.0)"}, method="GET")
with urlopen(req, timeout=120) as r, zip_path.open("wb") as f:
print(f"Wrote: {zip_path}") shutil.copyfileobj(r, f)
print(f"Wrote: {zip_path}")
return
except (URLError, TimeoutError) as e:
print(f"Attempt {attempt} failed: {e}")
if attempt < MAX_RETRIES:
print(f"Retrying in {RETRY_DELAY} seconds...")
time.sleep(RETRY_DELAY)
else:
print("All retries exhausted. Mictronics download failed.")
sys.exit(1)
if __name__ == "__main__": if __name__ == "__main__":