diff --git a/vitallink/backend/__pycache__/database.cpython-39.pyc b/vitallink/backend/__pycache__/database.cpython-39.pyc index 51d3263..5c85fbb 100644 Binary files a/vitallink/backend/__pycache__/database.cpython-39.pyc and b/vitallink/backend/__pycache__/database.cpython-39.pyc differ diff --git a/vitallink/backend/database.py b/vitallink/backend/database.py index 2fd8300..b6d74c3 100644 --- a/vitallink/backend/database.py +++ b/vitallink/backend/database.py @@ -1,14 +1,12 @@ """ VitalLink Database Layer SQLite persistence for patients, vitals, and audit trail -Enables replay, analysis, and incident investigation """ import sqlite3 import json from datetime import datetime from typing import List, Dict, Optional -from contextlib import asynccontextmanager import aiosqlite # ============================================================================ @@ -16,23 +14,21 @@ import aiosqlite # ============================================================================ SCHEMA_SQL = """ --- Patients table CREATE TABLE IF NOT EXISTS patients ( patient_id TEXT PRIMARY KEY, band_id TEXT NOT NULL, first_name TEXT NOT NULL, last_name TEXT NOT NULL, dob TEXT NOT NULL, - symptoms TEXT, -- JSON array + symptoms TEXT, severity TEXT, - check_in_time TIMESTAMP NOT NULL, - discharge_time TIMESTAMP, + check_in_time TEXT NOT NULL, + discharge_time TEXT, current_tier TEXT DEFAULT 'NORMAL', - is_active BOOLEAN DEFAULT 1, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + is_active INTEGER DEFAULT 1, + created_at TEXT DEFAULT CURRENT_TIMESTAMP ); --- Vitals readings table (time-series data) CREATE TABLE IF NOT EXISTS vitals_readings ( id INTEGER PRIMARY KEY AUTOINCREMENT, patient_id TEXT NOT NULL, @@ -44,63 +40,33 @@ CREATE TABLE IF NOT EXISTS vitals_readings ( temp_c REAL, activity REAL, tier TEXT, - flags TEXT, -- JSON array - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + flags TEXT, + created_at TEXT DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (patient_id) REFERENCES patients(patient_id) ); --- Triage assessments (audit trail) -CREATE TABLE IF NOT EXISTS triage_assessments ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - patient_id TEXT NOT NULL, - assessment_time TIMESTAMP NOT NULL, - triage_level INTEGER, - tier_name TEXT, - priority_score REAL, - reasoning TEXT, - abnormalities TEXT, -- JSON array - wait_time_minutes INTEGER, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (patient_id) REFERENCES patients(patient_id) -); - --- Tier changes (for incident investigation) CREATE TABLE IF NOT EXISTS tier_changes ( id INTEGER PRIMARY KEY AUTOINCREMENT, patient_id TEXT NOT NULL, - change_time TIMESTAMP NOT NULL, + change_time TEXT NOT NULL, old_tier TEXT, new_tier TEXT, trigger_reason TEXT, - vitals_snapshot TEXT, -- JSON - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + vitals_snapshot TEXT, + created_at TEXT DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (patient_id) REFERENCES patients(patient_id) ); --- System events (audit log) CREATE TABLE IF NOT EXISTS system_events ( id INTEGER PRIMARY KEY AUTOINCREMENT, - event_time TIMESTAMP NOT NULL, - event_type TEXT NOT NULL, -- 'patient_checkin', 'discharge', 'tier_change', 'alert', etc. + event_time TEXT NOT NULL, + event_type TEXT NOT NULL, patient_id TEXT, band_id TEXT, - details TEXT, -- JSON - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + details TEXT, + created_at TEXT DEFAULT CURRENT_TIMESTAMP ); --- Wristband assignments (inventory tracking) -CREATE TABLE IF NOT EXISTS wristband_assignments ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - band_id TEXT NOT NULL, - patient_id TEXT, - assigned_at TIMESTAMP, - released_at TIMESTAMP, - packet_count INTEGER DEFAULT 0, - band_type TEXT, -- 'real' or 'simulated' - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -); - --- Indexes for performance CREATE INDEX IF NOT EXISTS idx_vitals_patient ON vitals_readings(patient_id, timestamp); CREATE INDEX IF NOT EXISTS idx_vitals_timestamp ON vitals_readings(timestamp); CREATE INDEX IF NOT EXISTS idx_patients_active ON patients(is_active); @@ -131,84 +97,69 @@ class VitalLinkDatabase: if self.conn: await self.conn.close() - # ======================================================================== - # PATIENT OPERATIONS - # ======================================================================== + async def save_patient(self, patient_data: Dict): + """Save new patient to database""" + check_in_time = patient_data["check_in_time"] + if isinstance(check_in_time, datetime): + check_in_time = check_in_time.isoformat() - -async def save_patient(self, patient_data: Dict): - """Save new patient to database""" - # Convert datetime to ISO string if needed - check_in_time = patient_data["check_in_time"] - if isinstance(check_in_time, datetime): - check_in_time = check_in_time.isoformat() - - await self.conn.execute( - """ - INSERT INTO patients ( - patient_id, band_id, first_name, last_name, dob, - symptoms, severity, check_in_time, current_tier - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) - """, - ( - patient_data["patient_id"], - patient_data["band_id"], - patient_data["first_name"], - patient_data["last_name"], - patient_data["dob"], - json.dumps(patient_data["symptoms"]), - patient_data["severity"], - check_in_time, # Now a string - patient_data.get("current_tier", "NORMAL"), - ), - ) - await self.conn.commit() - - # Log event with serializable data - await self.log_event( - "patient_checkin", - patient_data["patient_id"], - patient_data["band_id"], - { - "first_name": patient_data["first_name"], - "last_name": patient_data["last_name"], - "symptoms": patient_data["symptoms"], - "severity": patient_data["severity"], - }, - ) - - async def update_patient_tier(self, patient_id: str, new_tier: str): - """Update patient's current tier""" - await self.conn.execute( - """ - UPDATE patients SET current_tier = ? WHERE patient_id = ? - """, - (new_tier, patient_id), + # Check if patient already exists + cursor = await self.conn.execute( + "SELECT patient_id FROM patients WHERE patient_id = ?", + (patient_data["patient_id"],), ) + existing = await cursor.fetchone() + + if existing: + # Update instead of insert + await self.conn.execute( + """ + UPDATE patients SET + band_id = ?, current_tier = ? + WHERE patient_id = ? + """, + ( + patient_data["band_id"], + patient_data.get("current_tier", "NORMAL"), + patient_data["patient_id"], + ), + ) + else: + # Insert new patient + await self.conn.execute( + """ + INSERT INTO patients ( + patient_id, band_id, first_name, last_name, dob, + symptoms, severity, check_in_time, current_tier + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + ( + patient_data["patient_id"], + patient_data["band_id"], + patient_data["first_name"], + patient_data["last_name"], + patient_data["dob"], + json.dumps(patient_data["symptoms"]), + patient_data["severity"], + check_in_time, + patient_data.get("current_tier", "NORMAL"), + ), + ) + await self.conn.commit() - async def discharge_patient(self, patient_id: str): - """Mark patient as discharged""" - await self.conn.execute( - """ - UPDATE patients - SET is_active = 0, discharge_time = ? - WHERE patient_id = ? - """, - (datetime.now(), patient_id), - ) - await self.conn.commit() - - await self.log_event( - "discharge", - patient_id, - None, - {"discharge_time": datetime.now().isoformat()}, - ) - - # ======================================================================== - # VITALS OPERATIONS - # ======================================================================== + if not existing: + await self.log_event( + "patient_checkin", + patient_data["patient_id"], + patient_data["band_id"], + { + "first_name": patient_data["first_name"], + "last_name": patient_data["last_name"], + "symptoms": patient_data["symptoms"], + "severity": patient_data["severity"], + }, + ) async def save_vitals(self, vitals_data: Dict): """Save vital signs reading""" @@ -264,10 +215,6 @@ async def save_patient(self, patient_data: Dict): for row in rows ] - # ======================================================================== - # TIER CHANGE TRACKING - # ======================================================================== - async def log_tier_change( self, patient_id: str, old_tier: str, new_tier: str, reason: str, vitals: Dict ): @@ -281,7 +228,7 @@ async def save_patient(self, patient_data: Dict): """, ( patient_id, - datetime.now(), + datetime.now().isoformat(), old_tier, new_tier, reason, @@ -298,7 +245,7 @@ async def save_patient(self, patient_data: Dict): ) async def get_tier_history(self, patient_id: str) -> List[Dict]: - """Get tier change history for incident review""" + """Get tier change history""" cursor = await self.conn.execute( """ SELECT change_time, old_tier, new_tier, trigger_reason, vitals_snapshot @@ -322,329 +269,52 @@ async def save_patient(self, patient_data: Dict): for row in rows ] - # ======================================================================== - # SYSTEM EVENTS (Audit Trail) - # ======================================================================== - - -async def log_event( - self, - event_type: str, - patient_id: Optional[str], - band_id: Optional[str], - details: Dict, -): - """Log system event for audit trail""" - - # Ensure details is JSON serializable - serializable_details = {} - for key, value in details.items(): - if isinstance(value, datetime): - serializable_details[key] = value.isoformat() - else: - serializable_details[key] = value - - await self.conn.execute( - """ - INSERT INTO system_events ( - event_time, event_type, patient_id, band_id, details - ) VALUES (?, ?, ?, ?, ?) - """, - ( - datetime.now().isoformat(), # Convert to string - event_type, - patient_id, - band_id, - json.dumps(serializable_details), - ), - ) - await self.conn.commit() - - async def get_events( + async def log_event( self, - event_type: Optional[str] = None, - patient_id: Optional[str] = None, - hours: int = 24, - ) -> List[Dict]: - """Get system events for analysis""" + event_type: str, + patient_id: Optional[str], + band_id: Optional[str], + details: Dict, + ): + """Log system event for audit trail""" + serializable_details = {} + for key, value in details.items(): + if isinstance(value, datetime): + serializable_details[key] = value.isoformat() + else: + serializable_details[key] = value - query = "SELECT event_time, event_type, patient_id, band_id, details FROM system_events WHERE 1=1" - params = [] - - if event_type: - query += " AND event_type = ?" - params.append(event_type) - - if patient_id: - query += " AND patient_id = ?" - params.append(patient_id) - - query += " AND event_time > datetime('now', '-' || ? || ' hours')" - params.append(hours) - - query += " ORDER BY event_time DESC LIMIT 1000" - - cursor = await self.conn.execute(query, params) - rows = await cursor.fetchall() - - return [ - { - "event_time": row[0], - "event_type": row[1], - "patient_id": row[2], - "band_id": row[3], - "details": json.loads(row[4]) if row[4] else {}, - } - for row in rows - ] - - # ======================================================================== - # ANALYTICS & REPLAY - # ======================================================================== - - async def get_session_summary( - self, start_time: datetime, end_time: datetime - ) -> Dict: - """Get summary statistics for a session (for incident review)""" - - cursor = await self.conn.execute( + await self.conn.execute( """ - SELECT - COUNT(DISTINCT patient_id) as total_patients, - COUNT(*) as total_vitals, - AVG(hr_bpm) as avg_hr, - AVG(spo2) as avg_spo2, - AVG(temp_c) as avg_temp - FROM vitals_readings - WHERE timestamp BETWEEN ? AND ? + INSERT INTO system_events ( + event_time, event_type, patient_id, band_id, details + ) VALUES (?, ?, ?, ?, ?) """, - (start_time.timestamp(), end_time.timestamp()), + ( + datetime.now().isoformat(), + event_type, + patient_id, + band_id, + json.dumps(serializable_details), + ), ) + await self.conn.commit() - row = await cursor.fetchone() - - return { - "total_patients": row[0], - "total_vitals_recorded": row[1], - "average_hr": round(row[2], 1) if row[2] else 0, - "average_spo2": round(row[3], 1) if row[3] else 0, - "average_temp": round(row[4], 2) if row[4] else 0, - } - - async def export_patient_data(self, patient_id: str) -> Dict: - """Export complete patient data for incident investigation""" - - # Get patient info - cursor = await self.conn.execute( + async def discharge_patient(self, patient_id: str): + """Mark patient as discharged""" + await self.conn.execute( """ - SELECT * FROM patients WHERE patient_id = ? + UPDATE patients + SET is_active = 0, discharge_time = ? + WHERE patient_id = ? """, - (patient_id,), + (datetime.now().isoformat(), patient_id), ) - patient_row = await cursor.fetchone() + await self.conn.commit() - if not patient_row: - return None - - # Get all vitals - vitals = await self.get_patient_vitals_history(patient_id, limit=10000) - - # Get tier changes - tier_changes = await self.get_tier_history(patient_id) - - # Get related events - events = await self.get_events(patient_id=patient_id, hours=24) - - return { - "patient_id": patient_id, - "name": f"{patient_row[2]} {patient_row[3]}", - "dob": patient_row[4], - "symptoms": json.loads(patient_row[5]) if patient_row[5] else [], - "severity": patient_row[6], - "check_in_time": patient_row[7], - "discharge_time": patient_row[8], - "total_vitals": len(vitals), - "vitals_timeline": vitals, - "tier_changes": tier_changes, - "events": events, - "export_time": datetime.now().isoformat(), - } - - -# ============================================================================ -# REPLAY SYSTEM -# ============================================================================ - - -class VitalsReplaySystem: - """Replay historical vitals data for analysis""" - - def __init__(self, db: VitalLinkDatabase): - self.db = db - - async def replay_patient_session(self, patient_id: str, speed: float = 1.0): - """ - Replay a patient's entire session - speed: 1.0 = real-time, 10.0 = 10x faster, 0.1 = slow motion - """ - - vitals = await self.db.get_patient_vitals_history(patient_id, limit=10000) - vitals.reverse() # Chronological order - - if not vitals: - print(f"No data found for patient {patient_id}") - return - - print(f"\n{'=' * 80}") - print(f"REPLAYING SESSION: {patient_id} ({len(vitals)} readings)") - print(f"Speed: {speed}x | Press Ctrl+C to stop") - print(f"{'=' * 80}\n") - - start_time = vitals[0]["timestamp"] - - for i, reading in enumerate(vitals): - # Calculate delay - if i > 0: - time_diff = reading["timestamp"] - vitals[i - 1]["timestamp"] - await asyncio.sleep(time_diff / speed) - - # Display reading - elapsed = reading["timestamp"] - start_time - tier_symbol = ( - "🔴" - if reading["tier"] == "EMERGENCY" - else "🟡" - if reading["tier"] == "ALERT" - else "🟢" - ) - - print( - f"[{elapsed:7.1f}s] {tier_symbol} Seq={reading['seq']:3d} | " - f"HR={reading['hr_bpm']:3d} SpO2={reading['spo2']:2d}% " - f"Temp={reading['temp_c']:.1f}°C | {reading['tier']}" - ) - - print(f"\n{'=' * 80}") - print(f"Replay complete: {len(vitals)} readings") - print(f"{'=' * 80}\n") - - async def analyze_critical_events(self, patient_id: str): - """Analyze critical tier changes and deterioration events""" - - tier_changes = await self.db.get_tier_history(patient_id) - - print(f"\n{'=' * 80}") - print(f"CRITICAL EVENT ANALYSIS: {patient_id}") - print(f"{'=' * 80}\n") - - for change in tier_changes: - print(f"[{change['change_time']}]") - print(f" {change['old_tier']} → {change['new_tier']}") - print(f" Reason: {change['reason']}") - print(f" Vitals: {change['vitals']}") - print() - - print(f"{'=' * 80}\n") - - -# ============================================================================ -# INTEGRATION HELPERS -# ============================================================================ - - -async def init_database(db_path: str = "vitallink.db") -> VitalLinkDatabase: - """Initialize database for use in FastAPI""" - db = VitalLinkDatabase(db_path) - await db.initialize() - return db - - -# ============================================================================ -# CLI TOOLS -# ============================================================================ - - -async def cli_export_patient(patient_id: str, output_file: str = None): - """Export patient data to JSON file""" - db = VitalLinkDatabase() - await db.initialize() - - data = await db.export_patient_data(patient_id) - - if not data: - print(f"Patient {patient_id} not found") - return - - if output_file: - with open(output_file, "w") as f: - json.dump(data, f, indent=2) - print(f"✓ Exported to {output_file}") - else: - print(json.dumps(data, indent=2)) - - await db.close() - - -async def cli_replay_session(patient_id: str, speed: float = 1.0): - """Replay a patient session""" - db = VitalLinkDatabase() - await db.initialize() - - replay = VitalsReplaySystem(db) - await replay.replay_patient_session(patient_id, speed) - - await db.close() - - -async def cli_analyze_incident(patient_id: str): - """Analyze critical events for a patient""" - db = VitalLinkDatabase() - await db.initialize() - - replay = VitalsReplaySystem(db) - await replay.analyze_critical_events(patient_id) - - # Also show vital trends - vitals = await db.get_patient_vitals_history(patient_id, limit=1000) - - if vitals: - print("VITAL SIGN TRENDS:") - print( - f" HR range: {min(v['hr_bpm'] for v in vitals)} - {max(v['hr_bpm'] for v in vitals)} bpm" + await self.log_event( + "discharge", + patient_id, + None, + {"discharge_time": datetime.now().isoformat()}, ) - print( - f" SpO2 range: {min(v['spo2'] for v in vitals)} - {max(v['spo2'] for v in vitals)}%" - ) - print( - f" Temp range: {min(v['temp_c'] for v in vitals):.1f} - {max(v['temp_c'] for v in vitals):.1f}°C" - ) - print() - - await db.close() - - -if __name__ == "__main__": - import argparse - import asyncio - - parser = argparse.ArgumentParser(description="VitalLink Database Tools") - parser.add_argument("--export", metavar="PATIENT_ID", help="Export patient data") - parser.add_argument("--replay", metavar="PATIENT_ID", help="Replay patient session") - parser.add_argument( - "--analyze", metavar="PATIENT_ID", help="Analyze critical events" - ) - parser.add_argument( - "--speed", type=float, default=1.0, help="Replay speed multiplier" - ) - parser.add_argument("--output", "-o", help="Output file for export") - - args = parser.parse_args() - - if args.export: - asyncio.run(cli_export_patient(args.export, args.output)) - elif args.replay: - asyncio.run(cli_replay_session(args.replay, args.speed)) - elif args.analyze: - asyncio.run(cli_analyze_incident(args.analyze)) - else: - parser.print_help() diff --git a/vitallink/logs/all_pids.txt b/vitallink/logs/all_pids.txt index db23dd6..99355a2 100644 --- a/vitallink/logs/all_pids.txt +++ b/vitallink/logs/all_pids.txt @@ -1,4 +1,4 @@ -68221 -68237 -68245 -68281 +70573 +70588 +70601 +70667 diff --git a/vitallink/logs/backend.log b/vitallink/logs/backend.log index ecd8214..ea456cb 100644 --- a/vitallink/logs/backend.log +++ b/vitallink/logs/backend.log @@ -1,4 +1,4 @@ -INFO: Started server process [68221] +INFO: Started server process [70573] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) @@ -10,492 +10,833 @@ API Documentation: http://localhost:8000/docs WebSocket Endpoint: ws://localhost:8000/ws Database: vitallink.db ================================================================================ -INFO: 127.0.0.1:54604 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:54608 - "GET / HTTP/1.1" 200 OK -INFO: 127.0.0.1:54624 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:54630 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:54642 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:54656 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:37292 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:37304 - "POST /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:37318 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37322 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:54604 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:37324 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:37334 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:58836 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:58838 - "POST /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:58854 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:58862 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:58866 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:58878 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:60090 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:60098 - "POST /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:60110 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:60114 - "OPTIONS /api/checkin HTTP/1.1" 200 OK -INFO: 127.0.0.1:60114 - "POST /api/checkin HTTP/1.1" 500 Internal Server Error -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi - result = await app( # type: ignore[func-returns-value] - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/applications.py", line 1133, in __call__ - await super().__call__(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/applications.py", line 113, in __call__ - await self.middleware_stack(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/cors.py", line 93, in __call__ - await self.simple_response(scope, receive, send, request_headers=headers) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/cors.py", line 144, in simple_response - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 123, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 109, in app - response = await f(request) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 389, in app - raw_response = await run_endpoint_function( - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 288, in run_endpoint_function - return await dependant.call(**values) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py", line 211, in check_in_patient - await db.save_patient(patient.dict()) -AttributeError: 'VitalLinkDatabase' object has no attribute 'save_patient' -INFO: 127.0.0.1:60130 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:57428 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:57428 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:57428 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:57436 - "GET / HTTP/1.1" 200 OK +INFO: 127.0.0.1:57440 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51082 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:57428 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:57428 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:57428 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51096 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51110 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51116 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51150 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51156 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:41892 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:41904 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:41916 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:41922 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:41930 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:41938 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51432 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51438 - "OPTIONS /api/checkin HTTP/1.1" 200 OK +/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py:211: PydanticDeprecatedSince20: The `dict` method is deprecated; use `model_dump` instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.12/migration/ + await db.save_patient(patient.dict()) +/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py:213: PydanticDeprecatedSince20: The `dict` method is deprecated; use `model_dump` instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.12/migration/ + await broadcast_update({"type": "patient_added", "patient": patient.dict()}) +INFO: 127.0.0.1:51438 - "POST /api/checkin HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51452 - "GET /api/queue HTTP/1.1" 200 OK /home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py:320: PydanticDeprecatedSince20: The `dict` method is deprecated; use `model_dump` instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.12/migration/ patient.last_vitals = data.dict() -INFO: 127.0.0.1:60142 - "POST /api/vitals HTTP/1.1" 500 Internal Server Error -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi - result = await app( # type: ignore[func-returns-value] - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/applications.py", line 1133, in __call__ - await super().__call__(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/applications.py", line 113, in __call__ - await self.middleware_stack(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/cors.py", line 85, in __call__ - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 123, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 109, in app - response = await f(request) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 389, in app - raw_response = await run_endpoint_function( - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 288, in run_endpoint_function - return await dependant.call(**values) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py", line 323, in receive_vitals - await db.save_vitals(data.dict()) -AttributeError: 'VitalLinkDatabase' object has no attribute 'save_vitals' -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:60152 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:60156 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:37100 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37104 - "POST /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:37118 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:37130 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:37146 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37154 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37158 - "OPTIONS /api/checkin HTTP/1.1" 200 OK -INFO: 127.0.0.1:37158 - "POST /api/checkin HTTP/1.1" 500 Internal Server Error -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi - result = await app( # type: ignore[func-returns-value] - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/applications.py", line 1133, in __call__ - await super().__call__(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/applications.py", line 113, in __call__ - await self.middleware_stack(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/cors.py", line 93, in __call__ - await self.simple_response(scope, receive, send, request_headers=headers) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/cors.py", line 144, in simple_response - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 123, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 109, in app - response = await f(request) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 389, in app - raw_response = await run_endpoint_function( - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 288, in run_endpoint_function - return await dependant.call(**values) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py", line 211, in check_in_patient - await db.save_patient(patient.dict()) -AttributeError: 'VitalLinkDatabase' object has no attribute 'save_patient' -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:39068 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:39070 - "POST /api/vitals HTTP/1.1" 500 Internal Server Error -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi - result = await app( # type: ignore[func-returns-value] - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/applications.py", line 1133, in __call__ - await super().__call__(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/applications.py", line 113, in __call__ - await self.middleware_stack(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/cors.py", line 85, in __call__ - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 123, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 109, in app - response = await f(request) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 389, in app - raw_response = await run_endpoint_function( - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 288, in run_endpoint_function - return await dependant.call(**values) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py", line 323, in receive_vitals - await db.save_vitals(data.dict()) -AttributeError: 'VitalLinkDatabase' object has no attribute 'save_vitals' -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:39082 - "POST /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:39092 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:39094 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:39106 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:39120 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:42204 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:42212 - "POST /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:42218 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:42224 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:42240 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:42252 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:49566 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:49582 - "POST /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:49590 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:49600 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:49612 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:49620 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:51080 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:51086 - "POST /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:51096 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:51098 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:51100 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:51106 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:50966 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:50978 - "POST /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:50984 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:50986 - "POST /api/vitals HTTP/1.1" 500 Internal Server Error -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi - result = await app( # type: ignore[func-returns-value] - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/applications.py", line 1133, in __call__ - await super().__call__(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/applications.py", line 113, in __call__ - await self.middleware_stack(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/cors.py", line 85, in __call__ - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 123, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 109, in app - response = await f(request) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 389, in app - raw_response = await run_endpoint_function( - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 288, in run_endpoint_function - return await dependant.call(**values) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py", line 323, in receive_vitals - await db.save_vitals(data.dict()) -AttributeError: 'VitalLinkDatabase' object has no attribute 'save_vitals' -INFO: 127.0.0.1:50992 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:51008 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:51020 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:39962 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:39970 - "POST /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:39976 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:39978 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:39992 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:39996 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:58090 - "POST /api/vitals HTTP/1.1" 500 Internal Server Error -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi - result = await app( # type: ignore[func-returns-value] - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/applications.py", line 1133, in __call__ - await super().__call__(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/applications.py", line 113, in __call__ - await self.middleware_stack(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/cors.py", line 85, in __call__ - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 123, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 109, in app - response = await f(request) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 389, in app - raw_response = await run_endpoint_function( - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 288, in run_endpoint_function - return await dependant.call(**values) - File "/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py", line 323, in receive_vitals - await db.save_vitals(data.dict()) -AttributeError: 'VitalLinkDatabase' object has no attribute 'save_vitals' -INFO: 127.0.0.1:58100 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:58110 - "POST /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:58124 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:58134 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:58140 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:58142 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:51668 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:51684 - "POST /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:51690 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:37290 - "GET /api/wristband-details HTTP/1.1" 200 OK -INFO: 127.0.0.1:51704 - "GET /api/queue HTTP/1.1" 200 OK -INFO: 127.0.0.1:51712 - "GET /api/queue HTTP/1.1" 200 OK +/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py:323: PydanticDeprecatedSince20: The `dict` method is deprecated; use `model_dump` instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.12/migration/ + await db.save_vitals(data.dict()) +/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py:353: PydanticDeprecatedSince20: The `dict` method is deprecated; use `model_dump` instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.12/migration/ + "vitals": data.dict(), +INFO: 127.0.0.1:51464 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51472 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51476 - "GET /api/queue HTTP/1.1" 200 OK +/home/mai/documents/school/capstone/vitallink-BS/vitallink/backend/server.py:479: PydanticDeprecatedSince20: The `dict` method is deprecated; use `model_dump` instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.12/migration/ + "patient": patient.dict(), +INFO: 127.0.0.1:51132 - "GET /api/patients/P100001/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100001/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51482 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51486 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:34134 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:34140 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:34154 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:34168 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:34176 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:34184 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:41796 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:41808 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:41812 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:41814 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:41816 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:41818 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:38896 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:38902 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:38912 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:38924 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:38930 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:38942 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:45940 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:45944 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100001/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100001/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:45960 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:45966 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:45968 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:45972 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:55396 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:55398 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:55408 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:55422 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100001/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100001/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:55442 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:55448 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:49652 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:49662 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:49670 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:49680 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:49686 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:49698 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:49712 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:43538 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:43550 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:43554 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:43564 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:43578 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:43586 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:60212 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:60224 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:60236 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:60248 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:60260 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:60262 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:35390 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:35402 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:35416 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:35426 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:35434 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:35440 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:48120 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:48128 - "POST /api/checkin HTTP/1.1" 200 OK +INFO: 127.0.0.1:48140 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:48148 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:48154 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:48158 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100002/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100002/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:48184 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:48192 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:52928 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:52936 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:52938 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:52942 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:52958 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:52962 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:39644 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:39646 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:39656 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:39660 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:39676 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:39692 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:39696 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:54558 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:54572 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100002/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100002/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:54580 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:54596 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:54612 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:54626 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:43930 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:43938 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:43942 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:43950 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:43962 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:43974 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:57512 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:57522 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:57536 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:57548 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:57564 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:57578 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:55544 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:55554 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:55556 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:55562 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:55566 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:55576 - "POST /api/checkin HTTP/1.1" 200 OK +INFO: 127.0.0.1:55586 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:55588 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:55600 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60676 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:60678 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:60690 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:60706 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:60718 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:60728 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:34396 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:34412 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:34426 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:34436 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:34448 - "POST /api/checkin HTTP/1.1" 200 OK +INFO: 127.0.0.1:34450 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:34452 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:34454 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:34458 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:34470 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:34476 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:49108 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:49116 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:49130 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100004/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100004/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:49148 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:49160 - "GET /api/queue HTTP/1.1" 200 OK +⚠️ DETERIORATION DETECTED: P100004 + Concerns: Vitals crossed into CRITICAL range + ⬆️ Escalation initiated due to deterioration +INFO: 127.0.0.1:49164 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:49174 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:49178 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:49188 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:49196 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:49210 - "GET /api/queue HTTP/1.1" 200 OK +🔄 TIER CHANGE: P100004 NORMAL → EMERGENCY (confirmed after 0 readings) +INFO: 127.0.0.1:49226 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:49232 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:49242 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:49254 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:49260 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42724 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42736 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:42748 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:42758 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42774 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:42778 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:42788 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42790 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:42798 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100002/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100002/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:42818 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42828 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:42830 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:42836 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42846 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:42848 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:42864 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51180 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51194 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51200 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51210 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100003/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100003/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51228 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51236 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51246 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51256 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51262 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51272 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51274 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51282 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51286 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51294 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51306 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51310 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50214 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50218 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50220 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:50226 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50232 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50234 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50238 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100004/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100004/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:50264 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50268 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:50272 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50286 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50296 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50306 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50310 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:50326 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50336 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50350 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50356 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50358 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32818 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32830 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:32840 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32844 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32852 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:32866 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:32872 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32880 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:32882 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32884 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32890 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:32902 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32918 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:32924 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32926 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:57008 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:57016 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:57032 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:57034 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100004/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100004/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:57056 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:57068 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:57072 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:57082 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:57086 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:57088 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:57092 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:57104 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:57114 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:57118 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:57126 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:57142 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:57154 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:34904 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:34914 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:34922 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:34930 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:34932 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:34944 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:34952 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:34968 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:34982 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:34996 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:35004 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100004/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100004/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:35024 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:35038 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:35044 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:35058 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:35072 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:33580 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:33594 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:33606 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:33612 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:33624 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:33640 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:33650 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:33666 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:33676 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:33692 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:33700 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:33708 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:33716 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:33730 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:33734 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:33736 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100004/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100004/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:32878 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32888 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:32896 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:32898 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32902 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:32908 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:32918 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32928 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:32942 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32952 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32960 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:32962 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32976 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:32982 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:32994 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:33004 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:37090 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:37098 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:37106 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100002/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100002/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:37130 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:37146 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:37150 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:37166 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:37180 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:37184 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:37194 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:37198 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:37200 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:37208 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100004/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/patients/P100004/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:37228 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:37230 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:37238 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:37246 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:37254 - "POST /api/vitals HTTP/1.1" 200 OK +🔄 TIER CHANGE: P100003 NORMAL → ALERT (confirmed after 0 readings) +INFO: 127.0.0.1:42284 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42298 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42314 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:42318 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42322 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42330 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42334 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42346 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:42362 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42374 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42378 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42384 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42386 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:42388 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42398 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:42404 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42420 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42436 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:42438 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42452 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42456 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:42472 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42486 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:42496 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +⚠️ DETERIORATION DETECTED: P100003 + Concerns: Vitals crossed into CRITICAL range +INFO: 127.0.0.1:50194 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50202 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +🔄 TIER CHANGE: P100003 ALERT → EMERGENCY (confirmed after 0 readings) +INFO: 127.0.0.1:50218 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50230 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50240 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50252 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50266 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50274 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:51132 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:50278 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50286 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50296 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50308 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50310 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50320 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50324 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50338 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50344 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50346 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50358 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50364 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50372 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50388 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50404 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50410 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:50424 - "GET /api/patients/P100003/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:50424 - "GET /api/patients/P100003/vitals-history?limit=200 HTTP/1.1" 200 OK +INFO: 127.0.0.1:50426 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50426 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:50426 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:50458 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50434 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50442 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43780 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43788 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43796 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:43806 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43818 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50426 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50426 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:50426 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:43820 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43828 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43834 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:43846 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43854 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43860 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43874 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43888 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:43890 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43900 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43912 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43922 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43930 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:43930 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:43930 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:43946 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:43960 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43972 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43982 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43992 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:44008 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:44010 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:44026 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:44034 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43930 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:43930 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:43930 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:60532 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60538 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60542 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:60544 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60546 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60558 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60566 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:43930 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:43930 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:43930 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:60570 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:60576 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60578 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60588 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60590 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60606 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:60616 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60622 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60626 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60632 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60642 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:60654 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60662 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60668 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:60668 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:60668 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:60670 - "POST /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:60672 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60674 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60680 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:60686 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60696 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50486 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50488 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60668 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:60668 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:60668 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:50498 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50514 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50520 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50536 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50538 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50550 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50556 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50560 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50568 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50570 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60668 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:60668 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:60668 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:50582 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50586 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50590 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50596 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50600 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50608 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:50622 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:50626 - "POST /api/vitals HTTP/1.1" 200 OK +INFO: 127.0.0.1:60668 - "GET /api/queue HTTP/1.1" 200 OK +INFO: 127.0.0.1:60668 - "GET /api/stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:60668 - "GET /api/wristband-details HTTP/1.1" 200 OK +INFO: 127.0.0.1:50632 - "POST /api/wristband-details HTTP/1.1" 200 OK diff --git a/vitallink/logs/backend.pid b/vitallink/logs/backend.pid index 9df02d0..4b3e20c 100644 --- a/vitallink/logs/backend.pid +++ b/vitallink/logs/backend.pid @@ -1 +1 @@ -68221 +70573 diff --git a/vitallink/logs/dashboard.log b/vitallink/logs/dashboard.log index 9d2b6ca..1a3084e 100644 --- a/vitallink/logs/dashboard.log +++ b/vitallink/logs/dashboard.log @@ -3,7 +3,7 @@ > vite - VITE v7.1.10 ready in 219 ms + VITE v7.1.10 ready in 246 ms ➜ Local: http://localhost:5173/ ➜ Network: use --host to expose diff --git a/vitallink/logs/dashboard.pid b/vitallink/logs/dashboard.pid index cc1a012..1176633 100644 --- a/vitallink/logs/dashboard.pid +++ b/vitallink/logs/dashboard.pid @@ -1 +1 @@ -68245 +70601 diff --git a/vitallink/logs/kiosk.log b/vitallink/logs/kiosk.log index a6b29a4..2564271 100644 --- a/vitallink/logs/kiosk.log +++ b/vitallink/logs/kiosk.log @@ -4,7 +4,7 @@ Port 5173 is in use, trying another one... - VITE v7.1.10 ready in 250 ms + VITE v7.1.10 ready in 228 ms ➜ Local: http://localhost:5174/ ➜ Network: use --host to expose diff --git a/vitallink/logs/kiosk.pid b/vitallink/logs/kiosk.pid index a1b288b..737a9f6 100644 --- a/vitallink/logs/kiosk.pid +++ b/vitallink/logs/kiosk.pid @@ -1 +1 @@ -68281 +70667 diff --git a/vitallink/logs/wristbands.pid b/vitallink/logs/wristbands.pid index a5bb77e..e95625d 100644 --- a/vitallink/logs/wristbands.pid +++ b/vitallink/logs/wristbands.pid @@ -1 +1 @@ -68237 +70588 diff --git a/vitallink/vitallink.db b/vitallink/vitallink.db index bd0dab8..f93e38d 100644 Binary files a/vitallink/vitallink.db and b/vitallink/vitallink.db differ