Skip to content

mirankurdistani/nasa-bridge

Repository files navigation

NASA Multi-Mission Data Bridge

Tek API çağrısıyla NASA Webb, Hubble, TESS ve Chandra teleskoplarından veri çek.

Python 3.9+ License: MIT Tests Status

Sorun

Bir araştırmacı, aynı gök cisminin verisini Hubble, Webb, TESS ve Chandra'dan almak istediğinde 4 farklı araç, 4 farklı format, 4 farklı API ile uğraşmak zorunda. FITS başka, HDF5 başka, LC (light curve) başka. Zaman MJD, koordinat farklı sistemde, dalga boyu metre/Angstrom karışık.

Çözüm

Tek çağrı. Tek schema. Karşılaştırılabilir veri.

Python API

from nasa_bridge import query

result = query(
    target="Pi Mensae",
    missions=["hubble", "tess"],
    limit=10,
)

print(f"{len(result)} gözlem, {result.elapsed_seconds:.1f}s'de")
for obs in result.observations:
    print(f"  {obs.mission:8s} {obs.raw_format:5s} "
          f"{obs.wavelength.band:10s} {obs.observation_id}")

# JSON çıktı (REST API'ye hazır)
print(result.to_json())

Komut Satırı (CLI)

# Kayıtlı misyonları gör
nasa-bridge missions

# Sorgu — terminale JSON
nasa-bridge query "M16" --missions hubble,tess --limit 5 --pretty

# Sorgu — dosyaya JSON
nasa-bridge query "Pi Mensae" -m tess -l 25 -o pi_mensae.json --pretty

REST API

# Servisi başlat
uvicorn nasa_bridge.api.main:app --reload

# http://localhost:8000/docs    ← Otomatik Swagger UI
# http://localhost:8000/redoc   ← ReDoc

# Sorgu (v1 prefix'i kullanılır)
curl "http://localhost:8000/v1/query?target=Crab+Nebula&missions=hubble,chandra&limit=3"

API URL yapısı:

Endpoint Açıklama
GET / Servis bilgisi
GET /health Sağlık kontrolü (k8s convention)
GET /cache/stats Cache hit/miss istatistikleri
POST /cache/clear Cache temizle
GET /v1/missions Kayıtlı misyonlar
GET /v1/query Multi-mission sorgu

Her yanıt X-Request-ID header'ı içerir — log korelasyonu için. Tüm hatalar standart formatta:

{
  "error": {
    "code": 400,
    "message": "Bilinmeyen misyon(lar): ['xyz']",
    "request_id": "a1b2c3d4"
  }
}

Docker

Tek komutla deploy:

docker compose up --build
# http://localhost:8000/docs

Ya da Makefile ile:

make docker-run     # build + start
make docker-stop    # durdur

Container özellikleri:

  • Multi-stage build — küçük runtime imajı (~250 MB)
  • Non-root user (UID 1000)
  • Healthcheck /health endpoint'i üzerinden
  • JSON log driver, 10MB rotation

Desteklenen Misyonlar

Misyon Veri Kaynağı Format Durum
Hubble (HST) MAST FITS ✅ Tamamlandı
TESS MAST LC (FITS) ✅ Tamamlandı
Webb (JWST) MAST FITS ✅ Tamamlandı
Chandra CXC/HEASARC FITS (EVT2) ✅ Tamamlandı

Unified Schema

Tüm misyonlardan gelen veri tek bir Observation modeline oturuyor:

{
  "observation_id": "hst_10533_01_acs_wfc_f775w_j9cs01",
  "mission": "hubble",
  "instrument": "ACS/WFC",
  "target": { "name": "NGC6611-ACS", "ra": 274.67, "dec": -13.79 },
  "time":   { "start": "2006-04-12T12:21:17Z", "exposure_seconds": 2000.0 },
  "wavelength": { "min_nm": 690.0, "max_nm": 860.0, "band": "optical" },
  "raw_format": "FITS",
  "data_url": "https://mast.stsci.edu/...",
  "metadata": { "filters": "F775W", "calib_level": 3, "proposal_id": "10533" }
}

Bir TESS ışık eğrisi ya da Chandra X-ray verisi de aynı yapıyı kullanır.

Kurulum

git clone https://github.com/mirankurdistani/nasa-bridge
cd nasa-bridge

python3 -m venv venv
source venv/bin/activate

pip install --upgrade pip
pip install -e .

Doğrulama:

python -c "from nasa_bridge import query; print('ok')"
nasa-bridge missions

Özellikler

  • Paralel sorgu: Birden fazla misyon aynı anda — toplam süre en yavaş misyon kadar
  • Limit kontrolü: Her misyondan en fazla N sonuç
  • Hata izolasyonu: Bir misyonda hata diğerlerini düşürmez; hatalar result.errors listesinde
  • Zaman ölçümü: result.elapsed_seconds + result.per_mission_seconds
  • JSON serialization: to_json() ile API-hazır çıktı
  • Stdlib CLI: Ek bağımlılık yok, argparse tabanlı

Mimari

nasa_bridge/
├── core/
│   ├── schema.py        # Observation, BridgeResult
│   ├── detector.py      # FITS/HDF5/LC format algılama
│   └── normalizer.py    # query() + paralel orkestrasyon
├── missions/
│   ├── base.py          # MissionAdapter abstract
│   ├── _mast_base.py    # MAST için ortak yardımcılar + MastImageAdapter
│   ├── hubble.py        # HubbleAdapter (MAST)
│   ├── webb.py          # WebbAdapter (MAST)
│   ├── tess.py          # TessAdapter (MAST, timeseries)
│   └── chandra.py       # ChandraAdapter (HEASARC)
├── utils/converters.py  # MJD→ISO, m→nm, bant türetme
└── cli.py               # nasa-bridge komutu

Tasarım prensibi: Yeni misyon eklemek = missions/<name>.py dosyası + register_mission() çağrısı. Webb ve Chandra Hafta 3'te bu şekilde eklenecek.

Detaylar: CLAUDE.md.

Testler

python -m unittest discover tests -v

40+ test üç kategoride:

  • Birim: schema, detector, converters, adapter parsing — saniyeler
  • Orkestrasyon: query() davranışı, paralelizm — saniyeler (sahte adapter)
  • Entegrasyon: gerçek MAST sorgusu — opsiyonel (NASA_BRIDGE_INTEGRATION=1 ile)

Yol Haritası

  • Hafta 1 — Temel + format algılama + örnek scriptler (FITS, LC keşfi)
  • Hafta 2 — Schema, Hubble adapter, TESS adapter, paralel query, CLI
  • Hafta 3 — Webb (JWST) + Chandra adaptörleri
  • Hafta 4 — FastAPI REST katmanı
  • Hafta 5 — PyPI yayını + NASA ESDS başvurusu

Katkı

Bu proje NASA ESDS (Earth Science Data Systems) Programı'na açık kaynak katkı olarak geliştirilmektedir. Issue açmaktan ya da PR göndermekten çekinmeyin.

Akademik Kullanım

Araştırmanızda bu araç kullandıysanız aşağıdaki gibi alıntı yapabilirsiniz:

@software{nasa_bridge_2026,
  author = {{nasa-bridge contributors}},
  title  = {NASA Multi-Mission Data Bridge: Unified ETL for Hubble, Webb, TESS, Chandra},
  year   = {2026},
  url    = {https://github.com/mirankurdistani/nasa-bridge},
  version = {0.4.0}
}

Lisans

MIT — bkz. LICENSE.

About

Tek API çağrısıyla NASA Webb, Hubble, TESS, Chandra teleskoplarından unified veri. FastAPI + CLI + Python lib.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors