refactor: reorganize project structure by moving core modules and update import paths in API server
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Demo script để test các chức năng mới của API
|
||||
"""
|
||||
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
BASE_URL = "http://localhost:8000"
|
||||
|
||||
def print_section(title):
|
||||
print("\n" + "=" * 70)
|
||||
print(f" {title}")
|
||||
print("=" * 70)
|
||||
|
||||
def test_dashboard_statistics():
|
||||
print_section("📊 Test Dashboard Statistics")
|
||||
try:
|
||||
response = requests.get(f"{BASE_URL}/api/dashboard/statistics")
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
print(f"✅ Success!")
|
||||
print(f" Models: {data['models']['total']}")
|
||||
print(f" Predictions: {data['predictions']['total']}")
|
||||
print(f" Reports: {data['reports']['total']}")
|
||||
else:
|
||||
print(f"❌ Error: {response.status_code}")
|
||||
except Exception as e:
|
||||
print(f"❌ Exception: {e}")
|
||||
|
||||
def test_accuracy_trends():
|
||||
print_section("📈 Test Accuracy Trends")
|
||||
try:
|
||||
response = requests.get(f"{BASE_URL}/api/dashboard/accuracy-trends")
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
print(f"✅ Success!")
|
||||
print(f" Trends: {len(data['trends'])} records")
|
||||
print(f" Models: {data['models']}")
|
||||
else:
|
||||
print(f"❌ Error: {response.status_code}")
|
||||
except Exception as e:
|
||||
print(f"❌ Exception: {e}")
|
||||
|
||||
def test_class_distribution():
|
||||
print_section("📊 Test Class Distribution")
|
||||
try:
|
||||
# First, get list of models
|
||||
response = requests.get(f"{BASE_URL}/api/models/list")
|
||||
if response.status_code == 200:
|
||||
models = response.json()['models']
|
||||
if models:
|
||||
model_filename = models[0]['filename']
|
||||
print(f" Using model: {model_filename}")
|
||||
|
||||
# Get class distribution
|
||||
response = requests.get(f"{BASE_URL}/api/dashboard/class-distribution/{model_filename}")
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
print(f"✅ Success!")
|
||||
print(f" Total samples: {data['total_samples']}")
|
||||
print(f" Classes: {list(data['class_distribution'].keys())}")
|
||||
else:
|
||||
print(f"❌ Error: {response.status_code}")
|
||||
else:
|
||||
print("⚠️ No models found")
|
||||
else:
|
||||
print(f"❌ Error getting models: {response.status_code}")
|
||||
except Exception as e:
|
||||
print(f"❌ Exception: {e}")
|
||||
|
||||
def test_batch_status():
|
||||
print_section("🔄 Test Batch Status")
|
||||
try:
|
||||
response = requests.get(f"{BASE_URL}/api/batch/status")
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
print(f"✅ Success!")
|
||||
print(f" Queued: {data['queue']['queued']}")
|
||||
print(f" Running: {data['queue']['running']}")
|
||||
print(f" Completed: {data['queue']['completed']}")
|
||||
print(f" Failed: {data['queue']['failed']}")
|
||||
else:
|
||||
print(f"❌ Error: {response.status_code}")
|
||||
except Exception as e:
|
||||
print(f"❌ Exception: {e}")
|
||||
|
||||
def test_batch_prediction_demo():
|
||||
print_section("🚀 Test Batch Prediction (Demo)")
|
||||
try:
|
||||
# Get a model
|
||||
response = requests.get(f"{BASE_URL}/api/models/list")
|
||||
if response.status_code != 200:
|
||||
print("❌ Cannot get models list")
|
||||
return
|
||||
|
||||
models = response.json()['models']
|
||||
if not models:
|
||||
print("⚠️ No models available for testing")
|
||||
return
|
||||
|
||||
model_filename = models[0]['filename']
|
||||
print(f" Using model: {model_filename}")
|
||||
|
||||
# Create test batch
|
||||
batch_config = {
|
||||
"model_filename": model_filename,
|
||||
"items": [
|
||||
{
|
||||
"name": "Test_Region_1",
|
||||
"min_lon": 105.6,
|
||||
"min_lat": 9.3,
|
||||
"max_lon": 105.7,
|
||||
"max_lat": 9.4,
|
||||
"start_date": "2023-03-01",
|
||||
"end_date": "2023-03-31",
|
||||
"max_scenes": 5,
|
||||
"cloud_cover": 30,
|
||||
"resolution": 20
|
||||
}
|
||||
],
|
||||
"auto_retry": True,
|
||||
"max_retries": 2
|
||||
}
|
||||
|
||||
print(" Creating batch job...")
|
||||
response = requests.post(
|
||||
f"{BASE_URL}/api/batch/start",
|
||||
json=batch_config
|
||||
)
|
||||
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
print(f"✅ Success!")
|
||||
print(f" {data['message']}")
|
||||
print(f" Batch ID: {data['batch_id']}")
|
||||
|
||||
# Check status after a moment
|
||||
time.sleep(2)
|
||||
response = requests.get(f"{BASE_URL}/api/batch/status")
|
||||
if response.status_code == 200:
|
||||
status = response.json()
|
||||
print(f" Current queue: {status['queue']}")
|
||||
else:
|
||||
print(f"❌ Error: {response.status_code} - {response.text}")
|
||||
except Exception as e:
|
||||
print(f"❌ Exception: {e}")
|
||||
|
||||
def test_reports_list():
|
||||
print_section("📄 Test Reports List")
|
||||
try:
|
||||
response = requests.get(f"{BASE_URL}/api/reports/list")
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
print(f"✅ Success!")
|
||||
print(f" Total reports: {data['count']}")
|
||||
if data['reports']:
|
||||
print(f" Latest report: {data['reports'][0]['filename']}")
|
||||
else:
|
||||
print(f"❌ Error: {response.status_code}")
|
||||
except Exception as e:
|
||||
print(f"❌ Exception: {e}")
|
||||
|
||||
def main():
|
||||
print("=" * 70)
|
||||
print(" 🧪 API Testing Suite - New Features")
|
||||
print("=" * 70)
|
||||
print(f"\n Base URL: {BASE_URL}")
|
||||
print(f" Đảm bảo server đang chạy: python api_server.py")
|
||||
|
||||
input("\n Press ENTER to start testing...")
|
||||
|
||||
# Run all tests
|
||||
test_dashboard_statistics()
|
||||
test_accuracy_trends()
|
||||
test_class_distribution()
|
||||
test_reports_list()
|
||||
test_batch_status()
|
||||
test_batch_prediction_demo()
|
||||
|
||||
print("\n" + "=" * 70)
|
||||
print(" ✅ Testing completed!")
|
||||
print("=" * 70)
|
||||
print(f"\n Dashboard: {BASE_URL}/dashboard")
|
||||
print(f" API Docs: {BASE_URL}/docs")
|
||||
print("=" * 70 + "\n")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user