mirror of
https://github.com/PlaneQuery/OpenAirframes.git
synced 2026-06-08 06:03:55 +02:00
let mictronics retry
This commit is contained in:
@@ -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__":
|
||||||
|
|||||||
Reference in New Issue
Block a user