Fix jwt-token
This commit is contained in:
12
sample_detection.json
Normal file
12
sample_detection.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"device_id": 1,
|
||||
"drone_id": 2001,
|
||||
"drone_type": 1,
|
||||
"rssi": -72,
|
||||
"freq": 2450,
|
||||
"geo_lat": 59.3293,
|
||||
"geo_lon": 18.0686,
|
||||
"device_timestamp": 1692252000000,
|
||||
"confidence_level": 0.92,
|
||||
"signal_duration": 3200
|
||||
}
|
||||
58
test_drone_curl.sh
Normal file
58
test_drone_curl.sh
Normal file
@@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
# Simple bash script to test drone detection API with curl
|
||||
|
||||
API_BASE="http://selfservice.cqers.com/drones/api"
|
||||
# Alternative for local testing: "http://localhost:3002/api"
|
||||
|
||||
echo "🚁 Drone Detection API Test Script"
|
||||
echo "=================================="
|
||||
|
||||
# Test API health
|
||||
echo "🔍 Testing API health..."
|
||||
curl -s "$API_BASE/health" | jq '.' || echo "Health check failed"
|
||||
echo ""
|
||||
|
||||
# Send test detection data
|
||||
echo "📡 Sending test drone detection..."
|
||||
|
||||
# Generate timestamp
|
||||
TIMESTAMP=$(date +%s)000
|
||||
|
||||
# Test detection payload
|
||||
DETECTION_DATA='{
|
||||
"device_id": 1,
|
||||
"drone_id": 1001,
|
||||
"drone_type": 1,
|
||||
"rssi": -65,
|
||||
"freq": 2400,
|
||||
"geo_lat": 59.3293,
|
||||
"geo_lon": 18.0686,
|
||||
"device_timestamp": '$TIMESTAMP',
|
||||
"confidence_level": 0.85,
|
||||
"signal_duration": 2500
|
||||
}'
|
||||
|
||||
echo "Payload:"
|
||||
echo "$DETECTION_DATA" | jq '.'
|
||||
echo ""
|
||||
|
||||
# Send the detection
|
||||
echo "Sending detection..."
|
||||
RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" \
|
||||
-X POST "$API_BASE/detections" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$DETECTION_DATA")
|
||||
|
||||
# Parse response
|
||||
HTTP_BODY=$(echo "$RESPONSE" | sed '$d')
|
||||
HTTP_STATUS=$(echo "$RESPONSE" | tail -n1 | sed 's/HTTP_STATUS://')
|
||||
|
||||
echo "Response Status: $HTTP_STATUS"
|
||||
echo "Response Body:"
|
||||
echo "$HTTP_BODY" | jq '.' 2>/dev/null || echo "$HTTP_BODY"
|
||||
|
||||
if [ "$HTTP_STATUS" = "201" ]; then
|
||||
echo "✅ Detection sent successfully!"
|
||||
else
|
||||
echo "❌ Detection failed with status $HTTP_STATUS"
|
||||
fi
|
||||
212
test_drone_data.py
Normal file
212
test_drone_data.py
Normal file
@@ -0,0 +1,212 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Drone Detection Test Script
|
||||
Sends simulated drone detection data to the API for testing purposes.
|
||||
"""
|
||||
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
import random
|
||||
from datetime import datetime
|
||||
|
||||
# Configuration
|
||||
API_BASE_URL = "http://selfservice.cqers.com/drones/api"
|
||||
# Alternative for local testing: "http://localhost:3002/api"
|
||||
|
||||
# Device configurations (simulating different detector devices)
|
||||
DEVICES = [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Stockholm Central Detector",
|
||||
"lat": 59.3293,
|
||||
"lon": 18.0686
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "Arlanda Airport Detector",
|
||||
"lat": 59.6519,
|
||||
"lon": 17.9186
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "Göteborg Harbor Detector",
|
||||
"lat": 57.7089,
|
||||
"lon": 11.9746
|
||||
}
|
||||
]
|
||||
|
||||
# Drone types
|
||||
DRONE_TYPES = {
|
||||
0: "Unknown",
|
||||
1: "Commercial DJI",
|
||||
2: "Racing Drone",
|
||||
3: "Fixed Wing",
|
||||
4: "Military/Surveillance",
|
||||
5: "Custom Build"
|
||||
}
|
||||
|
||||
def generate_detection_data(device):
|
||||
"""Generate realistic drone detection data"""
|
||||
|
||||
# Random position near the device (within ~5km radius)
|
||||
lat_offset = random.uniform(-0.045, 0.045) # ~5km latitude
|
||||
lon_offset = random.uniform(-0.09, 0.09) # ~5km longitude
|
||||
|
||||
detection = {
|
||||
"device_id": device["id"],
|
||||
"drone_id": random.randint(1000, 9999),
|
||||
"drone_type": random.randint(0, 5),
|
||||
"rssi": random.randint(-90, -30), # Signal strength in dBm
|
||||
"freq": random.choice([2400, 2450, 5800, 5850]), # Common drone frequencies
|
||||
"geo_lat": device["lat"] + lat_offset,
|
||||
"geo_lon": device["lon"] + lon_offset,
|
||||
"device_timestamp": int(time.time() * 1000), # Unix timestamp in ms
|
||||
"confidence_level": round(random.uniform(0.6, 1.0), 2),
|
||||
"signal_duration": random.randint(500, 5000) # Duration in ms
|
||||
}
|
||||
|
||||
return detection
|
||||
|
||||
def send_detection(detection_data):
|
||||
"""Send detection data to the API"""
|
||||
url = f"{API_BASE_URL}/detections"
|
||||
headers = {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(url, json=detection_data, headers=headers, timeout=10)
|
||||
|
||||
if response.status_code == 201:
|
||||
print(f"✅ Detection sent successfully: Device {detection_data['device_id']}, "
|
||||
f"Drone {detection_data['drone_id']}, RSSI {detection_data['rssi']}dBm")
|
||||
return True
|
||||
else:
|
||||
print(f"❌ Failed to send detection: {response.status_code} - {response.text}")
|
||||
return False
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"❌ Network error: {e}")
|
||||
return False
|
||||
|
||||
def test_single_detection():
|
||||
"""Send a single test detection"""
|
||||
device = random.choice(DEVICES)
|
||||
detection = generate_detection_data(device)
|
||||
|
||||
print("🚁 Sending single test detection...")
|
||||
print(f"📍 Device: {device['name']}")
|
||||
print(f"🛰️ Drone ID: {detection['drone_id']}")
|
||||
print(f"📡 RSSI: {detection['rssi']}dBm")
|
||||
print(f"📊 Frequency: {detection['freq']}MHz")
|
||||
print(f"🎯 Confidence: {detection['confidence_level']}")
|
||||
|
||||
return send_detection(detection)
|
||||
|
||||
def simulate_continuous_detections(duration_minutes=5, interval_seconds=10):
|
||||
"""Simulate continuous drone detections for testing"""
|
||||
print(f"🔄 Starting continuous simulation for {duration_minutes} minutes...")
|
||||
print(f"⏱️ Sending detection every {interval_seconds} seconds")
|
||||
print("Press Ctrl+C to stop\n")
|
||||
|
||||
start_time = time.time()
|
||||
end_time = start_time + (duration_minutes * 60)
|
||||
detection_count = 0
|
||||
|
||||
try:
|
||||
while time.time() < end_time:
|
||||
# Generate 1-3 simultaneous detections from different devices
|
||||
num_detections = random.randint(1, 3)
|
||||
|
||||
for _ in range(num_detections):
|
||||
device = random.choice(DEVICES)
|
||||
detection = generate_detection_data(device)
|
||||
|
||||
if send_detection(detection):
|
||||
detection_count += 1
|
||||
|
||||
# Small delay between simultaneous detections
|
||||
time.sleep(0.5)
|
||||
|
||||
time.sleep(interval_seconds)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\n⏹️ Simulation stopped by user")
|
||||
|
||||
elapsed = time.time() - start_time
|
||||
print(f"\n📈 Simulation completed:")
|
||||
print(f" • Duration: {elapsed/60:.1f} minutes")
|
||||
print(f" • Detections sent: {detection_count}")
|
||||
print(f" • Average rate: {detection_count/(elapsed/60):.1f} detections/minute")
|
||||
|
||||
def test_api_health():
|
||||
"""Test if the API is responding"""
|
||||
url = f"{API_BASE_URL}/health"
|
||||
|
||||
try:
|
||||
response = requests.get(url, timeout=5)
|
||||
if response.status_code == 200:
|
||||
print("✅ API health check passed")
|
||||
return True
|
||||
else:
|
||||
print(f"❌ API health check failed: {response.status_code}")
|
||||
return False
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"❌ Cannot reach API: {e}")
|
||||
return False
|
||||
|
||||
def main():
|
||||
print("🚁 Drone Detection System - Test Script")
|
||||
print("=" * 50)
|
||||
|
||||
# Test API connectivity
|
||||
if not test_api_health():
|
||||
print("Cannot connect to API. Please check if the system is running.")
|
||||
return
|
||||
|
||||
print("\nChoose test mode:")
|
||||
print("1. Send single test detection")
|
||||
print("2. Simulate continuous detections")
|
||||
print("3. Send burst of 10 detections")
|
||||
|
||||
try:
|
||||
choice = input("\nEnter choice (1-3): ").strip()
|
||||
|
||||
if choice == "1":
|
||||
test_single_detection()
|
||||
|
||||
elif choice == "2":
|
||||
duration = input("Duration in minutes (default: 5): ").strip()
|
||||
interval = input("Interval in seconds (default: 10): ").strip()
|
||||
|
||||
duration = int(duration) if duration else 5
|
||||
interval = int(interval) if interval else 10
|
||||
|
||||
simulate_continuous_detections(duration, interval)
|
||||
|
||||
elif choice == "3":
|
||||
print("🚀 Sending burst of 10 detections...")
|
||||
success_count = 0
|
||||
|
||||
for i in range(10):
|
||||
device = random.choice(DEVICES)
|
||||
detection = generate_detection_data(device)
|
||||
|
||||
if send_detection(detection):
|
||||
success_count += 1
|
||||
|
||||
time.sleep(1) # 1 second between detections
|
||||
|
||||
print(f"\n📊 Burst completed: {success_count}/10 detections sent successfully")
|
||||
|
||||
else:
|
||||
print("Invalid choice")
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\n👋 Goodbye!")
|
||||
except ValueError:
|
||||
print("Invalid input")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user