|
|
"""
|
|
|
Test script for Three-Phase DCRM Flask API
|
|
|
==========================================
|
|
|
Tests the three-phase endpoint with 3 CSV files.
|
|
|
"""
|
|
|
|
|
|
import requests
|
|
|
import json
|
|
|
import sys
|
|
|
|
|
|
|
|
|
API_URL = "http://localhost:5000"
|
|
|
BREAKER_ID = "6926e63d4614721a79b7b24e"
|
|
|
CSV_FILE = "df3_final (1).csv"
|
|
|
|
|
|
def test_health_check():
|
|
|
"""Test the health check endpoint"""
|
|
|
print("Testing health check endpoint...")
|
|
|
try:
|
|
|
response = requests.get(f"{API_URL}/api/health")
|
|
|
if response.status_code == 200:
|
|
|
print("Health check passed!")
|
|
|
print(json.dumps(response.json(), indent=2))
|
|
|
return True
|
|
|
else:
|
|
|
print(f"Health check failed with status {response.status_code}")
|
|
|
return False
|
|
|
except requests.exceptions.ConnectionError:
|
|
|
print("❌ Cannot connect to API. Make sure the server is running!")
|
|
|
print(" Run: python dcrm_flask_api.py")
|
|
|
return False
|
|
|
except Exception as e:
|
|
|
print(f"❌ Error: {e}")
|
|
|
return False
|
|
|
|
|
|
def test_three_phase_analysis():
|
|
|
"""Test the three-phase analysis endpoint"""
|
|
|
print(f"\nTesting three-phase analysis endpoint...")
|
|
|
|
|
|
try:
|
|
|
|
|
|
with open(CSV_FILE, 'rb') as fileR, \
|
|
|
open(CSV_FILE, 'rb') as fileY, \
|
|
|
open(CSV_FILE, 'rb') as fileB:
|
|
|
|
|
|
files = {
|
|
|
'fileR': (CSV_FILE, fileR, 'text/csv'),
|
|
|
'fileY': (CSV_FILE, fileY, 'text/csv'),
|
|
|
'fileB': (CSV_FILE, fileB, 'text/csv')
|
|
|
}
|
|
|
|
|
|
data = {
|
|
|
'operator': 'Test Engineer'
|
|
|
}
|
|
|
|
|
|
url = f"{API_URL}/api/circuit-breakers/{BREAKER_ID}/tests/upload-three-phase"
|
|
|
|
|
|
print(f"Uploading to: {url}")
|
|
|
print("Processing 3 phases (this may take 90-180 seconds)...")
|
|
|
|
|
|
response = requests.post(url, files=files, data=data, timeout=300)
|
|
|
|
|
|
if response.status_code == 200:
|
|
|
print("Three-phase analysis completed successfully!")
|
|
|
|
|
|
|
|
|
result = response.json()
|
|
|
|
|
|
|
|
|
print("\nKey Results:")
|
|
|
print(f" Breaker ID: {result.get('breakerId')}")
|
|
|
print(f" Overall Health Score: {result.get('healthScore')}/100")
|
|
|
print(f" Operator: {result.get('operator')}")
|
|
|
print(f" Created At: {result.get('createdAt')}")
|
|
|
|
|
|
|
|
|
for phase in ['r', 'y', 'b']:
|
|
|
if phase in result:
|
|
|
phase_data = result[phase]
|
|
|
print(f"\n {phase.upper()} Phase:")
|
|
|
print(f" Health Score: {phase_data.get('healthScore')}/100")
|
|
|
print(f" CBHI Score: {phase_data.get('cbhi', {}).get('score')}/100")
|
|
|
print(f" Findings: {phase_data.get('findings')}")
|
|
|
|
|
|
|
|
|
waveform = phase_data.get('waveform', [])
|
|
|
if waveform:
|
|
|
first_point = waveform[0]
|
|
|
required_fields = ['time', 'current', 'resistance', 'travel', 'shap',
|
|
|
'close_coil', 'trip_coil_1', 'trip_coil_2']
|
|
|
has_all_fields = all(field in first_point for field in required_fields)
|
|
|
print(f" Waveform fields: {'Complete' if has_all_fields else 'Missing fields'}")
|
|
|
if has_all_fields:
|
|
|
print(f" Sample: time={first_point['time']}, current={first_point['current']}, "
|
|
|
f"close_coil={first_point['close_coil']}")
|
|
|
|
|
|
|
|
|
ai_verdict = phase_data.get('aiVerdict', {})
|
|
|
effect_analysis = ai_verdict.get('effectAnalysis', {})
|
|
|
has_performance_gains = 'performanceGains' in effect_analysis
|
|
|
has_risk_mitigation = 'riskMitigation' in effect_analysis
|
|
|
print(f" Performance Gains: {'Present' if has_performance_gains else 'Missing'}")
|
|
|
print(f" Risk Mitigation: {'Present' if has_risk_mitigation else 'Missing'}")
|
|
|
|
|
|
|
|
|
output_file = "test_three_phase_response.json"
|
|
|
with open(output_file, 'w', encoding='utf-8') as f:
|
|
|
json.dump(result, f, indent=2, ensure_ascii=False)
|
|
|
print(f"\nFull response saved to: {output_file}")
|
|
|
|
|
|
return True
|
|
|
else:
|
|
|
print(f"Analysis failed with status {response.status_code}")
|
|
|
print(f" Error: {response.text}")
|
|
|
return False
|
|
|
|
|
|
except FileNotFoundError:
|
|
|
print(f"CSV file not found: {CSV_FILE}")
|
|
|
print(" Make sure the file exists in the current directory")
|
|
|
return False
|
|
|
except requests.exceptions.Timeout:
|
|
|
print("Request timeout. Analysis took too long.")
|
|
|
return False
|
|
|
except Exception as e:
|
|
|
print(f"Error: {e}")
|
|
|
import traceback
|
|
|
traceback.print_exc()
|
|
|
return False
|
|
|
|
|
|
def main():
|
|
|
"""Run all tests"""
|
|
|
print("=" * 60)
|
|
|
print("Three-Phase DCRM Flask API Test Suite")
|
|
|
print("=" * 60)
|
|
|
|
|
|
|
|
|
if not test_health_check():
|
|
|
print("\nHealth check failed. Stopping tests.")
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
|
if not test_three_phase_analysis():
|
|
|
print("\nThree-phase analysis test failed.")
|
|
|
sys.exit(1)
|
|
|
|
|
|
print("\n" + "=" * 60)
|
|
|
print("All tests completed successfully!")
|
|
|
print("=" * 60)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
main()
|
|
|
|