added readme
This commit is contained in:
parent
e6aba90ee5
commit
f5421a1f21
523
README.md
Normal file
523
README.md
Normal file
@ -0,0 +1,523 @@
|
|||||||
|
# VitalLink - Emergency Room Patient Monitoring System
|
||||||
|
|
||||||
|
**A comprehensive IoT-based patient monitoring system using smart wristbands for emergency department triage and real-time vital signs tracking.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Project Overview
|
||||||
|
|
||||||
|
VitalLink is an intelligent ER patient monitoring system that uses smart wristbands to continuously track patient vital signs and automatically prioritize care based on real-time health data. The system supports both physical BLE wristbands and simulated devices for testing and demonstration.
|
||||||
|
|
||||||
|
### Key Features
|
||||||
|
- ✅ **Real-time vital sign monitoring** (Heart Rate, SpO₂, Temperature, Activity)
|
||||||
|
- ✅ **Automatic patient prioritization** based on condition severity
|
||||||
|
- ✅ **Three-tier alert system** (Normal, Alert, Emergency)
|
||||||
|
- ✅ **Self-service check-in kiosk** for patient registration
|
||||||
|
- ✅ **Staff monitoring dashboard** with live updates
|
||||||
|
- ✅ **Mixed real/simulated wristbands** for flexible testing
|
||||||
|
- ✅ **Bluetooth Low Energy (BLE)** communication protocol
|
||||||
|
- ✅ **Dynamic queue management** with priority scoring
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Project Structure
|
||||||
|
```
|
||||||
|
vitallink/
|
||||||
|
├── backend/ # Backend API Server
|
||||||
|
│ └── server.py # FastAPI REST API + WebSocket server
|
||||||
|
│
|
||||||
|
├── simulator/ # Wristband Management System
|
||||||
|
│ ├── wristband_simulator.py # Original standalone simulator
|
||||||
|
│ ├── wristband_manager.py # Unified wristband manager (real + simulated)
|
||||||
|
│ ├── config_system.py # Configuration management & CLI tools
|
||||||
|
│ ├── main_runner.py # Main system orchestrator
|
||||||
|
│ └── wristband_config.yaml # Wristband inventory configuration
|
||||||
|
│
|
||||||
|
├── frontend/ # Web User Interfaces
|
||||||
|
│ ├── dashboard/ # Staff Monitoring Dashboard (React + Vite)
|
||||||
|
│ │ ├── src/
|
||||||
|
│ │ │ ├── App.jsx # Main dashboard component
|
||||||
|
│ │ │ └── index.css # Tailwind CSS imports
|
||||||
|
│ │ ├── index.html # HTML entry point
|
||||||
|
│ │ └── package.json # NPM dependencies
|
||||||
|
│ │
|
||||||
|
│ └── kiosk/ # Patient Check-in Kiosk (React + Vite)
|
||||||
|
│ ├── src/
|
||||||
|
│ │ ├── App.jsx # Check-in interface component
|
||||||
|
│ │ └── index.css # Tailwind CSS imports
|
||||||
|
│ ├── index.html # HTML entry point
|
||||||
|
│ └── package.json # NPM dependencies
|
||||||
|
│
|
||||||
|
├── tests/ # Test Suite
|
||||||
|
│ └── test_suite.py # Comprehensive system tests
|
||||||
|
│
|
||||||
|
├── logs/ # System Logs (auto-generated)
|
||||||
|
│ ├── backend.log
|
||||||
|
│ ├── wristbands.log
|
||||||
|
│ ├── dashboard.log
|
||||||
|
│ └── kiosk.log
|
||||||
|
│
|
||||||
|
├── .venv/ # Python virtual environment (UV)
|
||||||
|
├── requirements.txt # Python dependencies
|
||||||
|
├── start_everything.sh # Master startup script
|
||||||
|
├── stop_everything.sh # Master shutdown script
|
||||||
|
└── README.md # This file
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 System Architecture & Data Flow
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────────┐
|
||||||
|
│ PATIENT CHECK-IN FLOW │
|
||||||
|
└─────────────────────────────────────────────────────────────────┘
|
||||||
|
|
||||||
|
1. Patient arrives at ER
|
||||||
|
↓
|
||||||
|
2. Self-service kiosk (http://localhost:5174)
|
||||||
|
- Enter personal info
|
||||||
|
- Select symptoms
|
||||||
|
- Rate severity
|
||||||
|
↓
|
||||||
|
3. Backend API assigns patient ID + wristband ID
|
||||||
|
↓
|
||||||
|
4. Wristband Manager detects new patient
|
||||||
|
↓
|
||||||
|
5. Auto-assigns wristband (prefers real over simulated)
|
||||||
|
↓
|
||||||
|
6. Starts monitoring vital signs
|
||||||
|
|
||||||
|
|
||||||
|
┌─────────────────────────────────────────────────────────────────┐
|
||||||
|
│ DATA MONITORING FLOW │
|
||||||
|
└─────────────────────────────────────────────────────────────────┘
|
||||||
|
|
||||||
|
Wristband (Real BLE or Simulated)
|
||||||
|
↓
|
||||||
|
Generates 16-byte packet every 1-60 seconds
|
||||||
|
[ver][seq][timestamp][flags][hr][spo2][temp][activity][checksum]
|
||||||
|
↓
|
||||||
|
Wristband Manager decodes packet
|
||||||
|
↓
|
||||||
|
Sends to Backend API (/api/vitals)
|
||||||
|
↓
|
||||||
|
Backend processes & stores data
|
||||||
|
↓
|
||||||
|
WebSocket broadcasts to connected clients
|
||||||
|
↓
|
||||||
|
Staff Dashboard updates in real-time (http://localhost:5173)
|
||||||
|
↓
|
||||||
|
Priority queue recalculates
|
||||||
|
↓
|
||||||
|
Emergency alerts triggered if thresholds exceeded
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📄 File Purposes
|
||||||
|
|
||||||
|
### Backend (`backend/`)
|
||||||
|
|
||||||
|
#### `server.py`
|
||||||
|
**Purpose:** Core backend API server
|
||||||
|
**Technology:** FastAPI + Uvicorn
|
||||||
|
**Key Functions:**
|
||||||
|
- Patient registration and management
|
||||||
|
- Vital signs data ingestion and storage
|
||||||
|
- Priority queue calculation algorithm
|
||||||
|
- WebSocket real-time updates
|
||||||
|
- RESTful API endpoints for all operations
|
||||||
|
|
||||||
|
**Main Endpoints:**
|
||||||
|
- `POST /api/checkin` - Register new patient
|
||||||
|
- `POST /api/vitals` - Receive vital signs data
|
||||||
|
- `GET /api/queue` - Get prioritized patient queue
|
||||||
|
- `GET /api/stats` - System statistics
|
||||||
|
- `GET /api/wristband-details` - Wristband inventory
|
||||||
|
- `POST /api/patients/{id}/discharge` - Discharge patient
|
||||||
|
- `WS /ws` - WebSocket for real-time updates
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Wristband System (`simulator/`)
|
||||||
|
|
||||||
|
#### `wristband_simulator.py`
|
||||||
|
**Purpose:** Original standalone wristband simulator
|
||||||
|
**Technology:** Python asyncio
|
||||||
|
**Key Functions:**
|
||||||
|
- Generates realistic vital sign data
|
||||||
|
- Simulates 5 patient condition profiles (stable, deteriorating, critical, etc.)
|
||||||
|
- Creates proper 16-byte BLE packets with checksums
|
||||||
|
- Can run independently for testing
|
||||||
|
|
||||||
|
**When to use:** Quick testing without the full system
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `wristband_manager.py`
|
||||||
|
**Purpose:** Unified wristband management system
|
||||||
|
**Technology:** Python asyncio + Bleak (for BLE)
|
||||||
|
**Key Functions:**
|
||||||
|
- **Manages both real and simulated wristbands** with identical interface
|
||||||
|
- Scans for real BLE devices
|
||||||
|
- Decodes 16-byte packets according to spec
|
||||||
|
- Handles wristband inventory (available, assigned, in-use)
|
||||||
|
- Auto-assigns wristbands to new patients
|
||||||
|
|
||||||
|
**Key Classes:**
|
||||||
|
- `BaseWristband` - Abstract interface for all wristbands
|
||||||
|
- `RealWristband` - Connects to physical BLE devices
|
||||||
|
- `SimulatedWristband` - Software simulation for testing
|
||||||
|
- `WristbandManager` - Central inventory manager
|
||||||
|
- `PacketDecoder` - Decodes 16-byte BLE packets
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `config_system.py`
|
||||||
|
**Purpose:** Configuration management and CLI tools
|
||||||
|
**Technology:** Python + PyYAML
|
||||||
|
**Key Functions:**
|
||||||
|
- Loads wristband inventory from YAML config
|
||||||
|
- Command-line tools for managing wristbands
|
||||||
|
- BLE device scanning and discovery
|
||||||
|
- Add/remove wristbands without code changes
|
||||||
|
|
||||||
|
**CLI Commands:**
|
||||||
|
```bash
|
||||||
|
python config_system.py --inventory # Show configured wristbands
|
||||||
|
python config_system.py --scan # Scan for real BLE devices
|
||||||
|
python config_system.py --add-simulated # Add a simulated wristband
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `main_runner.py`
|
||||||
|
**Purpose:** Main system orchestrator
|
||||||
|
**Technology:** Python asyncio
|
||||||
|
**Key Functions:**
|
||||||
|
- **Auto-detects new patient check-ins** from backend
|
||||||
|
- **Auto-assigns wristbands** (prefers real, falls back to simulated)
|
||||||
|
- Creates emergency simulated bands if inventory depleted
|
||||||
|
- Reports wristband status to backend every 10 seconds
|
||||||
|
- Manages lifecycle of all wristband monitoring tasks
|
||||||
|
|
||||||
|
**This is the heart of the wristband system!**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `wristband_config.yaml`
|
||||||
|
**Purpose:** Wristband inventory configuration
|
||||||
|
**Technology:** YAML configuration file
|
||||||
|
**Structure:**
|
||||||
|
```yaml
|
||||||
|
backend_url: "http://localhost:8000"
|
||||||
|
auto_scan_ble: true # Scan for real bands on startup
|
||||||
|
prefer_real_bands: true # Use real bands first
|
||||||
|
|
||||||
|
simulated_bands: # MOCK wristbands for testing
|
||||||
|
- band_id: "MOCK-SIM1"
|
||||||
|
profile: "stable"
|
||||||
|
|
||||||
|
real_bands: # Physical BLE devices
|
||||||
|
- band_id: "VitalLink-A3B2"
|
||||||
|
ble_address: "AA:BB:CC:DD:EE:FF"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Edit this file** to add/remove wristbands without touching code!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Frontend (`frontend/`)
|
||||||
|
|
||||||
|
#### `dashboard/src/App.jsx`
|
||||||
|
**Purpose:** Staff monitoring dashboard
|
||||||
|
**Technology:** React + Vite + Tailwind CSS
|
||||||
|
**Key Features:**
|
||||||
|
- **Patients Tab:**
|
||||||
|
- Real-time vital signs display
|
||||||
|
- Color-coded alert tiers (🟢 Normal, 🟡 Alert, 🔴 Emergency)
|
||||||
|
- Priority queue ordering
|
||||||
|
- Filter by tier
|
||||||
|
- Discharge patients
|
||||||
|
- **Wristbands Tab:**
|
||||||
|
- Inventory management view
|
||||||
|
- Real vs simulated differentiation (🔵 vs 🟢)
|
||||||
|
- Click wristband to see **raw 16-byte packet hex dump**
|
||||||
|
- Decoded packet fields
|
||||||
|
- Flag visualization (emergency, alert, battery, etc.)
|
||||||
|
|
||||||
|
**Port:** http://localhost:5173
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `kiosk/src/App.jsx`
|
||||||
|
**Purpose:** Patient self-service check-in
|
||||||
|
**Technology:** React + Vite + Tailwind CSS
|
||||||
|
**Key Features:**
|
||||||
|
- User-friendly check-in wizard
|
||||||
|
- Symptom selection
|
||||||
|
- Severity rating
|
||||||
|
- Wristband assignment confirmation
|
||||||
|
- Next steps guidance
|
||||||
|
|
||||||
|
**Port:** http://localhost:5174
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Tests (`tests/`)
|
||||||
|
|
||||||
|
#### `test_suite.py`
|
||||||
|
**Purpose:** Comprehensive system testing
|
||||||
|
**Technology:** Python asyncio
|
||||||
|
**Test Coverage:**
|
||||||
|
- Patient data validation
|
||||||
|
- Packet generation and checksums
|
||||||
|
- Tier classification logic
|
||||||
|
- Priority score calculation
|
||||||
|
- Simulator stability
|
||||||
|
- Deterioration detection
|
||||||
|
- Transmission timing
|
||||||
|
|
||||||
|
**Run with:** `python tests/test_suite.py`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Scripts
|
||||||
|
|
||||||
|
#### `start_everything.sh`
|
||||||
|
**Purpose:** Master startup script - **ONE COMMAND TO START ENTIRE SYSTEM**
|
||||||
|
**What it does:**
|
||||||
|
1. ✅ Activates Python virtual environment
|
||||||
|
2. ✅ Starts backend API server (port 8000)
|
||||||
|
3. ✅ Starts wristband management system
|
||||||
|
4. ✅ Starts staff dashboard (port 5173)
|
||||||
|
5. ✅ Starts check-in kiosk (port 5174)
|
||||||
|
6. ✅ Creates logs for all services
|
||||||
|
|
||||||
|
**Usage:** `./start_everything.sh`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `stop_everything.sh`
|
||||||
|
**Purpose:** Clean shutdown of all services
|
||||||
|
**What it does:**
|
||||||
|
1. Stops backend server
|
||||||
|
2. Stops wristband system
|
||||||
|
3. Stops frontend dev servers
|
||||||
|
4. Cleans up PID files
|
||||||
|
|
||||||
|
**Usage:** `./stop_everything.sh`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔗 How Components Connect
|
||||||
|
|
||||||
|
### 1. Patient Check-In Flow
|
||||||
|
```
|
||||||
|
Kiosk (React)
|
||||||
|
→ POST /api/checkin
|
||||||
|
→ Backend creates patient record
|
||||||
|
→ Main Runner detects new patient
|
||||||
|
→ Wristband Manager assigns band
|
||||||
|
→ Monitoring starts
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Vital Signs Data Flow
|
||||||
|
```
|
||||||
|
Wristband (Real or Simulated)
|
||||||
|
→ Generates 16-byte BLE packet
|
||||||
|
→ Wristband Manager decodes
|
||||||
|
→ POST /api/vitals to Backend
|
||||||
|
→ Backend updates patient record
|
||||||
|
→ WebSocket broadcasts to Dashboard
|
||||||
|
→ Dashboard displays live data
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Priority Queue Flow
|
||||||
|
```
|
||||||
|
Backend calculates priority scores every 3 seconds based on:
|
||||||
|
- Tier (Emergency=100, Alert=50, Normal=0)
|
||||||
|
- Wait time (increases after 30 min)
|
||||||
|
- Initial severity (severe=20, moderate=10, mild=5)
|
||||||
|
- Vital sign abnormalities
|
||||||
|
→ Queue reordered
|
||||||
|
→ Dashboard fetches updated queue
|
||||||
|
→ Patients displayed in priority order
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Wristband Inventory Flow
|
||||||
|
```
|
||||||
|
Main Runner reports inventory every 10 seconds:
|
||||||
|
→ POST /api/wristband-details (full inventory + packet data)
|
||||||
|
→ Backend caches data
|
||||||
|
→ Dashboard fetches wristband details
|
||||||
|
→ Wristbands tab displays inventory
|
||||||
|
→ Click wristband → show raw packet hex
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Technology Stack
|
||||||
|
|
||||||
|
| Component | Technology | Purpose |
|
||||||
|
|-----------|-----------|---------|
|
||||||
|
| Backend | FastAPI + Uvicorn | REST API + WebSocket server |
|
||||||
|
| Wristband System | Python asyncio + Bleak | BLE communication + simulation |
|
||||||
|
| Frontend | React + Vite | Fast, modern UI development |
|
||||||
|
| Styling | Tailwind CSS | Utility-first responsive design |
|
||||||
|
| Icons | Lucide React | Beautiful, consistent icons |
|
||||||
|
| BLE Protocol | Bluetooth Low Energy | Wireless communication with wristbands |
|
||||||
|
| Data Format | 16-byte binary packets | Efficient, spec-compliant data transmission |
|
||||||
|
| Configuration | YAML | Human-readable wristband inventory |
|
||||||
|
| Virtual Env | UV (optional) or venv | Python dependency isolation |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Quick Start
|
||||||
|
|
||||||
|
### 1. Start Everything
|
||||||
|
```bash
|
||||||
|
./start_everything.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Access Interfaces
|
||||||
|
- **Staff Dashboard:** http://localhost:5173
|
||||||
|
- **Check-in Kiosk:** http://localhost:5174
|
||||||
|
- **API Documentation:** http://localhost:8000/docs
|
||||||
|
|
||||||
|
### 3. Test the System
|
||||||
|
1. Open kiosk, check in a patient
|
||||||
|
2. Watch dashboard - patient appears with assigned wristband
|
||||||
|
3. Click "Wristbands" tab to see inventory
|
||||||
|
4. Click any wristband to view raw packet data
|
||||||
|
|
||||||
|
### 4. Stop Everything
|
||||||
|
```bash
|
||||||
|
./stop_everything.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Configuration
|
||||||
|
|
||||||
|
### Adding Simulated Wristbands
|
||||||
|
Edit `simulator/wristband_config.yaml`:
|
||||||
|
```yaml
|
||||||
|
simulated_bands:
|
||||||
|
- band_id: "MOCK-SIM4"
|
||||||
|
profile: "critical"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Adding Real Wristbands
|
||||||
|
1. Scan for devices:
|
||||||
|
```bash
|
||||||
|
python simulator/config_system.py --scan
|
||||||
|
```
|
||||||
|
2. Add to config when prompted, or manually:
|
||||||
|
```yaml
|
||||||
|
real_bands:
|
||||||
|
- band_id: "VitalLink-A3B2"
|
||||||
|
ble_address: "AA:BB:CC:DD:EE:FF"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Changing Priority Preferences
|
||||||
|
```yaml
|
||||||
|
prefer_real_bands: true # Use real bands first
|
||||||
|
auto_scan_ble: true # Scan on startup
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 BLE Packet Structure
|
||||||
|
|
||||||
|
VitalLink wristbands transmit 16-byte packets over BLE:
|
||||||
|
|
||||||
|
| Bytes | Field | Type | Description |
|
||||||
|
|-------|-------|------|-------------|
|
||||||
|
| 0 | Version | uint8 | Protocol version (0x01) |
|
||||||
|
| 1-2 | Sequence | uint16 | Packet counter |
|
||||||
|
| 3-6 | Timestamp | uint32 | Milliseconds since boot |
|
||||||
|
| 7 | Flags | uint8 | Status bits (emergency, alert, battery, etc.) |
|
||||||
|
| 8 | Heart Rate | uint8 | BPM |
|
||||||
|
| 9 | SpO₂ | uint8 | Oxygen saturation % |
|
||||||
|
| 10-11 | Temperature | int16 | Celsius × 100 (3650 = 36.50°C) |
|
||||||
|
| 12-13 | Activity | uint16 | RMS × 100 |
|
||||||
|
| 14 | Checksum | uint8 | Sum of bytes 0-13 mod 256 |
|
||||||
|
| 15 | Reserved | uint8 | Future use |
|
||||||
|
|
||||||
|
**Example Packet:**
|
||||||
|
```
|
||||||
|
01 2A 00 87 D6 12 00 02 4E 61 3D 0E B4 00 BA 00
|
||||||
|
```
|
||||||
|
|
||||||
|
**View in Dashboard:** Click any wristband in the Wristbands tab!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Development Notes
|
||||||
|
|
||||||
|
### For Hardware Integration
|
||||||
|
When you get physical wristbands:
|
||||||
|
1. Power on wristbands (remove from charger)
|
||||||
|
2. Run: `python simulator/config_system.py --scan`
|
||||||
|
3. Add discovered bands to config
|
||||||
|
4. Set `prefer_real_bands: true`
|
||||||
|
5. Restart system - real bands will be used automatically!
|
||||||
|
|
||||||
|
### Mixed Mode Testing
|
||||||
|
You can run **1 real + 5 simulated** simultaneously:
|
||||||
|
- Real wristband: For actual patient (you wearing it)
|
||||||
|
- Simulated: For demo patients with various conditions
|
||||||
|
|
||||||
|
### Packet Debugging
|
||||||
|
View raw packets in real-time:
|
||||||
|
1. Dashboard → Wristbands tab
|
||||||
|
2. Click any active wristband
|
||||||
|
3. See hex dump + decoded fields
|
||||||
|
4. Perfect for verifying hardware compliance!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎓 For Capstone Presentation
|
||||||
|
|
||||||
|
### Demo Flow
|
||||||
|
1. **Start system:** `./start_everything.sh`
|
||||||
|
2. **Show kiosk:** Check in yourself as a patient
|
||||||
|
3. **Show dashboard:** You appear in queue with assigned wristband
|
||||||
|
4. **Show wristbands tab:** Your band is listed as "in use"
|
||||||
|
5. **Click your wristband:** Show raw 16-byte packet matching spec
|
||||||
|
6. **Add mock patient:** Check in another via kiosk
|
||||||
|
7. **Show auto-assignment:** System assigns MOCK band automatically
|
||||||
|
8. **Show priority queue:** Emergency patients automatically moved to top
|
||||||
|
|
||||||
|
### Key Talking Points
|
||||||
|
- ✅ Real-time vital sign monitoring
|
||||||
|
- ✅ Automatic triage prioritization
|
||||||
|
- ✅ Seamless real/simulated wristband mixing
|
||||||
|
- ✅ Production-ready BLE protocol implementation
|
||||||
|
- ✅ Complete end-to-end system
|
||||||
|
- ✅ Scalable microservice architecture
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Additional Resources
|
||||||
|
|
||||||
|
- **BLE Protocol Details:** See uploaded specification document
|
||||||
|
- **API Documentation:** http://localhost:8000/docs (when running)
|
||||||
|
- **Wristband Inventory:** `python simulator/config_system.py --inventory`
|
||||||
|
- **System Logs:** `tail -f logs/*.log`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏆 Credits
|
||||||
|
|
||||||
|
**VitalLink Emergency Room Patient Monitoring System**
|
||||||
|
Capstone Project - 2025
|
||||||
|
**Developer:** Mai(Andrew Hartley)
|
||||||
|
**Institution:** [Northeastern University]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📄 License
|
||||||
|
|
||||||
|
Educational/Capstone Project
|
||||||
@ -1,621 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# VitalLink Automatic Installer for Arch Linux
|
|
||||||
# This script sets up the entire project structure
|
|
||||||
# You'll still need to copy the Python/React code from Claude artifacts
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
CYAN='\033[0;36m'
|
|
||||||
NC='\033[0m'
|
|
||||||
|
|
||||||
PROJECT_ROOT="$PWD/vitallink"
|
|
||||||
|
|
||||||
clear
|
|
||||||
echo -e "${CYAN}"
|
|
||||||
cat <<"EOF"
|
|
||||||
╔══════════════════════════════════════════════════════════════════════════╗
|
|
||||||
║ ║
|
|
||||||
║ ██╗ ██╗██╗████████╗ █████╗ ██╗ ██╗ ██╗███╗ ██╗██╗ ██╗ ║
|
|
||||||
║ ██║ ██║██║╚══██╔══╝██╔══██╗██║ ██║ ██║████╗ ██║██║ ██╔╝ ║
|
|
||||||
║ ██║ ██║██║ ██║ ███████║██║ ██║ ██║██╔██╗ ██║█████╔╝ ║
|
|
||||||
║ ╚██╗ ██╔╝██║ ██║ ██╔══██║██║ ██║ ██║██║╚██╗██║██╔═██╗ ║
|
|
||||||
║ ╚████╔╝ ██║ ██║ ██║ ██║███████╗███████╗██║██║ ╚████║██║ ██╗ ║
|
|
||||||
║ ╚═══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ║
|
|
||||||
║ ║
|
|
||||||
║ Emergency Room Patient Monitoring System ║
|
|
||||||
║ Automatic Installer v1.0 ║
|
|
||||||
║ ║
|
|
||||||
╚══════════════════════════════════════════════════════════════════════════╝
|
|
||||||
EOF
|
|
||||||
echo -e "${NC}"
|
|
||||||
|
|
||||||
echo -e "${YELLOW}This script will:${NC}"
|
|
||||||
echo " 1. Create project structure in $PROJECT_ROOT"
|
|
||||||
echo " 2. Set up Python virtual environment"
|
|
||||||
echo " 3. Install all dependencies"
|
|
||||||
echo " 4. Create startup/stop scripts"
|
|
||||||
echo " 5. Generate placeholder files for you to fill"
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}Note: You'll need to copy Python/React code from Claude artifacts after this.${NC}"
|
|
||||||
echo ""
|
|
||||||
read -p "Continue? (y/n) " -n 1 -r
|
|
||||||
echo
|
|
||||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
||||||
echo -e "${RED}Installation cancelled.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if directory exists
|
|
||||||
if [ -d "$PROJECT_ROOT" ]; then
|
|
||||||
echo -e "${YELLOW}Warning: $PROJECT_ROOT already exists.${NC}"
|
|
||||||
read -p "Delete and recreate? (y/n) " -n 1 -r
|
|
||||||
echo
|
|
||||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
||||||
rm -rf "$PROJECT_ROOT"
|
|
||||||
echo -e "${GREEN}✓ Removed existing directory${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${RED}Installation cancelled.${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
echo -e "${CYAN}STEP 1: Creating Directory Structure${NC}"
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
|
|
||||||
mkdir -p "$PROJECT_ROOT"/{backend,simulator,frontend/{kiosk,dashboard},tests,docs,logs}
|
|
||||||
echo -e "${GREEN}✓ Created project directories${NC}"
|
|
||||||
|
|
||||||
cd "$PROJECT_ROOT"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
echo -e "${CYAN}STEP 2: Setting up Python Virtual Environment${NC}"
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
|
|
||||||
python -m venv venv
|
|
||||||
source venv/bin/activate
|
|
||||||
echo -e "${GREEN}✓ Virtual environment created${NC}"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
echo -e "${CYAN}STEP 3: Creating requirements.txt${NC}"
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
|
|
||||||
cat >requirements.txt <<'EOF'
|
|
||||||
# Backend API
|
|
||||||
fastapi==0.104.1
|
|
||||||
uvicorn[standard]==0.24.0
|
|
||||||
websockets==12.0
|
|
||||||
pydantic==2.5.0
|
|
||||||
python-multipart==0.0.6
|
|
||||||
|
|
||||||
# HTTP client for simulator integration
|
|
||||||
aiohttp==3.9.1
|
|
||||||
requests==2.31.0
|
|
||||||
|
|
||||||
# Testing
|
|
||||||
pytest==7.4.3
|
|
||||||
pytest-asyncio==0.21.1
|
|
||||||
|
|
||||||
# Utilities
|
|
||||||
python-dateutil==2.8.2
|
|
||||||
EOF
|
|
||||||
|
|
||||||
echo -e "${GREEN}✓ requirements.txt created${NC}"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
echo -e "${CYAN}STEP 4: Installing Python Dependencies${NC}"
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
|
|
||||||
pip install --upgrade pip -q
|
|
||||||
pip install -r requirements.txt -q
|
|
||||||
echo -e "${GREEN}✓ All Python packages installed${NC}"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
echo -e "${CYAN}STEP 5: Creating Project Files${NC}"
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
|
|
||||||
# Backend server placeholder
|
|
||||||
cat >backend/server.py <<'EOF'
|
|
||||||
"""
|
|
||||||
VitalLink Backend Server
|
|
||||||
TODO: Copy the complete FastAPI code from Claude artifact:
|
|
||||||
"VitalLink Backend API (FastAPI)"
|
|
||||||
"""
|
|
||||||
|
|
||||||
print("Backend server placeholder - please copy the actual code from Claude artifacts")
|
|
||||||
EOF
|
|
||||||
echo -e "${GREEN}✓ backend/server.py created (placeholder)${NC}"
|
|
||||||
|
|
||||||
# Simulator placeholder
|
|
||||||
cat >simulator/wristband_simulator.py <<'EOF'
|
|
||||||
"""
|
|
||||||
VitalLink Wristband Simulator
|
|
||||||
TODO: Copy the complete simulator code from Claude artifact:
|
|
||||||
"VitalLink Wristband Simulator & Base Station"
|
|
||||||
"""
|
|
||||||
|
|
||||||
print("Simulator placeholder - please copy the actual code from Claude artifacts")
|
|
||||||
EOF
|
|
||||||
echo -e "${GREEN}✓ simulator/wristband_simulator.py created (placeholder)${NC}"
|
|
||||||
|
|
||||||
# Test suite placeholder
|
|
||||||
cat >tests/test_suite.py <<'EOF'
|
|
||||||
"""
|
|
||||||
VitalLink Test Suite
|
|
||||||
TODO: Copy the complete test suite code from Claude artifact:
|
|
||||||
"VitalLink Complete Test Suite"
|
|
||||||
"""
|
|
||||||
|
|
||||||
print("Test suite placeholder - please copy the actual code from Claude artifacts")
|
|
||||||
EOF
|
|
||||||
echo -e "${GREEN}✓ tests/test_suite.py created (placeholder)${NC}"
|
|
||||||
|
|
||||||
# Dashboard HTML
|
|
||||||
cat >frontend/dashboard/index.html <<'EOF'
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>VitalLink Staff Dashboard</title>
|
|
||||||
<script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
|
|
||||||
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
|
|
||||||
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
|
|
||||||
<script src="https://cdn.tailwindcss.com"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="root"></div>
|
|
||||||
|
|
||||||
<script type="text/babel">
|
|
||||||
/*
|
|
||||||
* TODO: Copy the ENTIRE React component code from Claude artifact:
|
|
||||||
* "VitalLink Staff Monitoring Dashboard"
|
|
||||||
*
|
|
||||||
* Replace "export default StaffDashboard;" with:
|
|
||||||
* const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
||||||
* root.render(<StaffDashboard />);
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Placeholder
|
|
||||||
const Placeholder = () => (
|
|
||||||
<div style={{
|
|
||||||
display: 'flex',
|
|
||||||
alignItems: 'center',
|
|
||||||
justifyContent: 'center',
|
|
||||||
height: '100vh',
|
|
||||||
backgroundColor: '#f3f4f6',
|
|
||||||
fontFamily: 'system-ui, -apple-system, sans-serif'
|
|
||||||
}}>
|
|
||||||
<div style={{
|
|
||||||
backgroundColor: 'white',
|
|
||||||
padding: '3rem',
|
|
||||||
borderRadius: '1rem',
|
|
||||||
boxShadow: '0 10px 25px rgba(0,0,0,0.1)',
|
|
||||||
maxWidth: '600px',
|
|
||||||
textAlign: 'center'
|
|
||||||
}}>
|
|
||||||
<h1 style={{color: '#1e40af', fontSize: '2rem', marginBottom: '1rem'}}>
|
|
||||||
VitalLink Staff Dashboard
|
|
||||||
</h1>
|
|
||||||
<p style={{color: '#6b7280', marginBottom: '1.5rem'}}>
|
|
||||||
Please copy the React component code from Claude artifacts.
|
|
||||||
</p>
|
|
||||||
<div style={{
|
|
||||||
backgroundColor: '#fef3c7',
|
|
||||||
padding: '1rem',
|
|
||||||
borderRadius: '0.5rem',
|
|
||||||
border: '1px solid #fbbf24'
|
|
||||||
}}>
|
|
||||||
<p style={{color: '#92400e', fontSize: '0.875rem'}}>
|
|
||||||
<strong>Instructions:</strong><br/>
|
|
||||||
1. Open this file in a text editor<br/>
|
|
||||||
2. Find the TODO comment above<br/>
|
|
||||||
3. Copy the complete StaffDashboard component<br/>
|
|
||||||
4. Save and refresh
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
|
|
||||||
const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
||||||
root.render(<Placeholder />);
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
EOF
|
|
||||||
echo -e "${GREEN}✓ frontend/dashboard/index.html created (template)${NC}"
|
|
||||||
|
|
||||||
# Kiosk HTML
|
|
||||||
cat >frontend/kiosk/index.html <<'EOF'
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>VitalLink Check-in Kiosk</title>
|
|
||||||
<script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
|
|
||||||
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
|
|
||||||
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
|
|
||||||
<script src="https://cdn.tailwindcss.com"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="root"></div>
|
|
||||||
|
|
||||||
<script type="text/babel">
|
|
||||||
/*
|
|
||||||
* TODO: Copy the ENTIRE React component code from Claude artifact:
|
|
||||||
* "VitalLink Check-in Kiosk"
|
|
||||||
*
|
|
||||||
* Replace "export default CheckInKiosk;" with:
|
|
||||||
* const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
||||||
* root.render(<CheckInKiosk />);
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Placeholder (same as dashboard)
|
|
||||||
const Placeholder = () => (
|
|
||||||
<div style={{
|
|
||||||
display: 'flex',
|
|
||||||
alignItems: 'center',
|
|
||||||
justifyContent: 'center',
|
|
||||||
height: '100vh',
|
|
||||||
backgroundColor: '#f3f4f6',
|
|
||||||
fontFamily: 'system-ui, -apple-system, sans-serif'
|
|
||||||
}}>
|
|
||||||
<div style={{
|
|
||||||
backgroundColor: 'white',
|
|
||||||
padding: '3rem',
|
|
||||||
borderRadius: '1rem',
|
|
||||||
boxShadow: '0 10px 25px rgba(0,0,0,0.1)',
|
|
||||||
maxWidth: '600px',
|
|
||||||
textAlign: 'center'
|
|
||||||
}}>
|
|
||||||
<h1 style={{color: '#2563eb', fontSize: '2rem', marginBottom: '1rem'}}>
|
|
||||||
VitalLink Check-in Kiosk
|
|
||||||
</h1>
|
|
||||||
<p style={{color: '#6b7280', marginBottom: '1.5rem'}}>
|
|
||||||
Please copy the React component code from Claude artifacts.
|
|
||||||
</p>
|
|
||||||
<div style={{
|
|
||||||
backgroundColor: '#dbeafe',
|
|
||||||
padding: '1rem',
|
|
||||||
borderRadius: '0.5rem',
|
|
||||||
border: '1px solid #3b82f6'
|
|
||||||
}}>
|
|
||||||
<p style={{color: '#1e40af', fontSize: '0.875rem'}}>
|
|
||||||
<strong>Instructions:</strong><br/>
|
|
||||||
1. Open this file in a text editor<br/>
|
|
||||||
2. Find the TODO comment above<br/>
|
|
||||||
3. Copy the complete CheckInKiosk component<br/>
|
|
||||||
4. Save and refresh
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
|
|
||||||
const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
||||||
root.render(<Placeholder />);
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
EOF
|
|
||||||
echo -e "${GREEN}✓ frontend/kiosk/index.html created (template)${NC}"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
echo -e "${CYAN}STEP 6: Creating Control Scripts${NC}"
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
|
|
||||||
# Start script
|
|
||||||
cat >start.sh <<'STARTSCRIPT'
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
||||||
cd "$PROJECT_ROOT"
|
|
||||||
source venv/bin/activate
|
|
||||||
|
|
||||||
echo "╔═══════════════════════════════════════════════════════════════════════╗"
|
|
||||||
echo "║ Starting VitalLink System ║"
|
|
||||||
echo "╚═══════════════════════════════════════════════════════════════════════╝"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
mkdir -p logs
|
|
||||||
|
|
||||||
echo "Starting backend server..."
|
|
||||||
python backend/server.py > logs/backend.log 2>&1 &
|
|
||||||
echo $! > logs/backend.pid
|
|
||||||
echo "✓ Backend started (PID: $(cat logs/backend.pid))"
|
|
||||||
|
|
||||||
sleep 3
|
|
||||||
|
|
||||||
echo "Starting wristband simulator..."
|
|
||||||
python simulator/wristband_simulator.py > logs/simulator.log 2>&1 &
|
|
||||||
echo $! > logs/simulator.pid
|
|
||||||
echo "✓ Simulator started (PID: $(cat logs/simulator.pid))"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "═══════════════════════════════════════════════════════════════════════"
|
|
||||||
echo "✅ VitalLink System Running!"
|
|
||||||
echo "═══════════════════════════════════════════════════════════════════════"
|
|
||||||
echo ""
|
|
||||||
echo "📊 Access Points:"
|
|
||||||
echo " • API Docs: http://localhost:8000/docs"
|
|
||||||
echo " • API Stats: http://localhost:8000/api/stats"
|
|
||||||
echo " • WebSocket: ws://localhost:8000/ws"
|
|
||||||
echo " • Staff Dashboard: file://$PROJECT_ROOT/frontend/dashboard/index.html"
|
|
||||||
echo " • Check-in Kiosk: file://$PROJECT_ROOT/frontend/kiosk/index.html"
|
|
||||||
echo ""
|
|
||||||
echo "📝 View Logs:"
|
|
||||||
echo " • Backend: tail -f logs/backend.log"
|
|
||||||
echo " • Simulator: tail -f logs/simulator.log"
|
|
||||||
echo ""
|
|
||||||
echo "🛑 Stop System:"
|
|
||||||
echo " • Run: ./stop.sh"
|
|
||||||
echo ""
|
|
||||||
echo "═══════════════════════════════════════════════════════════════════════"
|
|
||||||
STARTSCRIPT
|
|
||||||
|
|
||||||
chmod +x start.sh
|
|
||||||
echo -e "${GREEN}✓ start.sh created${NC}"
|
|
||||||
|
|
||||||
# Stop script
|
|
||||||
cat >stop.sh <<'STOPSCRIPT'
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
||||||
cd "$PROJECT_ROOT"
|
|
||||||
|
|
||||||
echo "Stopping VitalLink system..."
|
|
||||||
|
|
||||||
if [ -f logs/backend.pid ]; then
|
|
||||||
kill $(cat logs/backend.pid) 2>/dev/null && echo "✓ Backend stopped" || echo "Backend not running"
|
|
||||||
rm -f logs/backend.pid
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f logs/simulator.pid ]; then
|
|
||||||
kill $(cat logs/simulator.pid) 2>/dev/null && echo "✓ Simulator stopped" || echo "Simulator not running"
|
|
||||||
rm -f logs/simulator.pid
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "✓ VitalLink system stopped"
|
|
||||||
STOPSCRIPT
|
|
||||||
|
|
||||||
chmod +x stop.sh
|
|
||||||
echo -e "${GREEN}✓ stop.sh created${NC}"
|
|
||||||
|
|
||||||
# Test script
|
|
||||||
cat >test.sh <<'TESTSCRIPT'
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
||||||
cd "$PROJECT_ROOT"
|
|
||||||
source venv/bin/activate
|
|
||||||
|
|
||||||
echo "Running VitalLink Test Suite..."
|
|
||||||
echo ""
|
|
||||||
python tests/test_suite.py
|
|
||||||
TESTSCRIPT
|
|
||||||
|
|
||||||
chmod +x test.sh
|
|
||||||
echo -e "${GREEN}✓ test.sh created${NC}"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
echo -e "${CYAN}STEP 7: Creating Documentation${NC}"
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
|
|
||||||
# README
|
|
||||||
cat >README.md <<'EOF'
|
|
||||||
# VitalLink - ER Patient Monitoring System
|
|
||||||
|
|
||||||
Emergency department patient monitoring system using smart wristbands.
|
|
||||||
|
|
||||||
## Quick Start
|
|
||||||
|
|
||||||
1. **Copy Code from Claude Artifacts:**
|
|
||||||
- `backend/server.py` ← Copy "VitalLink Backend API (FastAPI)"
|
|
||||||
- `simulator/wristband_simulator.py` ← Copy "VitalLink Wristband Simulator"
|
|
||||||
- `tests/test_suite.py` ← Copy "VitalLink Complete Test Suite"
|
|
||||||
- `frontend/dashboard/index.html` ← Insert React code from "Staff Dashboard"
|
|
||||||
- `frontend/kiosk/index.html` ← Insert React code from "Check-in Kiosk"
|
|
||||||
|
|
||||||
2. **Test the System:**
|
|
||||||
```bash
|
|
||||||
./test.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Start the System:**
|
|
||||||
```bash
|
|
||||||
./start.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
4. **Access the Interfaces:**
|
|
||||||
- API Documentation: http://localhost:8000/docs
|
|
||||||
- Staff Dashboard: Open `frontend/dashboard/index.html` in browser
|
|
||||||
- Check-in Kiosk: Open `frontend/kiosk/index.html` in browser
|
|
||||||
|
|
||||||
5. **Stop the System:**
|
|
||||||
```bash
|
|
||||||
./stop.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
## Project Structure
|
|
||||||
|
|
||||||
```
|
|
||||||
vitallink/
|
|
||||||
├── backend/ # FastAPI server
|
|
||||||
├── simulator/ # Wristband simulator
|
|
||||||
├── frontend/ # Web interfaces
|
|
||||||
│ ├── dashboard/ # Staff monitoring
|
|
||||||
│ └── kiosk/ # Patient check-in
|
|
||||||
├── tests/ # Test suite
|
|
||||||
├── logs/ # System logs
|
|
||||||
└── venv/ # Python virtual env
|
|
||||||
```
|
|
||||||
|
|
||||||
## Commands
|
|
||||||
|
|
||||||
- `./start.sh` - Start backend + simulator
|
|
||||||
- `./stop.sh` - Stop all services
|
|
||||||
- `./test.sh` - Run test suite
|
|
||||||
- `tail -f logs/backend.log` - View backend logs
|
|
||||||
- `tail -f logs/simulator.log` - View simulator logs
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Run all tests
|
|
||||||
./test.sh
|
|
||||||
|
|
||||||
# Test API
|
|
||||||
curl http://localhost:8000/api/stats
|
|
||||||
|
|
||||||
# Create test patient
|
|
||||||
curl -X POST http://localhost:8000/api/checkin \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-d '{"firstName":"Test","lastName":"Patient","dob":"1990-01-01","symptoms":["Fever"],"severity":"moderate"}'
|
|
||||||
```
|
|
||||||
|
|
||||||
## Next Steps
|
|
||||||
|
|
||||||
See `docs/SETUP_GUIDE.md` for detailed instructions.
|
|
||||||
EOF
|
|
||||||
|
|
||||||
echo -e "${GREEN}✓ README.md created${NC}"
|
|
||||||
|
|
||||||
# Setup guide
|
|
||||||
cat >docs/SETUP_GUIDE.md <<'EOF'
|
|
||||||
# Detailed Setup Guide
|
|
||||||
|
|
||||||
## Copying Code from Claude Artifacts
|
|
||||||
|
|
||||||
### 1. Backend Server (backend/server.py)
|
|
||||||
|
|
||||||
Open the artifact titled **"VitalLink Backend API (FastAPI)"** and copy the ENTIRE Python code.
|
|
||||||
|
|
||||||
Paste it into `backend/server.py`.
|
|
||||||
|
|
||||||
### 2. Wristband Simulator (simulator/wristband_simulator.py)
|
|
||||||
|
|
||||||
Open the artifact titled **"VitalLink Wristband Simulator & Base Station"** and copy the ENTIRE Python code.
|
|
||||||
|
|
||||||
Paste it into `simulator/wristband_simulator.py`.
|
|
||||||
|
|
||||||
### 3. Test Suite (tests/test_suite.py)
|
|
||||||
|
|
||||||
Open the artifact titled **"VitalLink Complete Test Suite"** and copy the ENTIRE Python code.
|
|
||||||
|
|
||||||
Paste it into `tests/test_suite.py`.
|
|
||||||
|
|
||||||
### 4. Staff Dashboard (frontend/dashboard/index.html)
|
|
||||||
|
|
||||||
1. Open the artifact titled **"VitalLink Staff Monitoring Dashboard"**
|
|
||||||
2. Copy the ENTIRE React component code
|
|
||||||
3. Open `frontend/dashboard/index.html` in a text editor
|
|
||||||
4. Find the TODO comment section
|
|
||||||
5. Paste the React code there
|
|
||||||
6. Remove the line `export default StaffDashboard;`
|
|
||||||
7. Add these lines at the end:
|
|
||||||
```javascript
|
|
||||||
const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
||||||
root.render(<StaffDashboard />);
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5. Check-in Kiosk (frontend/kiosk/index.html)
|
|
||||||
|
|
||||||
Follow the same process as the dashboard, but use the **"VitalLink Check-in Kiosk"** artifact.
|
|
||||||
|
|
||||||
## Verification
|
|
||||||
|
|
||||||
After copying all code:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Activate virtual environment
|
|
||||||
source venv/bin/activate
|
|
||||||
|
|
||||||
# Run tests
|
|
||||||
./test.sh
|
|
||||||
|
|
||||||
# Start system
|
|
||||||
./start.sh
|
|
||||||
|
|
||||||
# In another terminal, test API
|
|
||||||
curl http://localhost:8000/api/stats
|
|
||||||
```
|
|
||||||
|
|
||||||
If everything works, you should see JSON output from the API.
|
|
||||||
EOF
|
|
||||||
|
|
||||||
echo -e "${GREEN}✓ docs/SETUP_GUIDE.md created${NC}"
|
|
||||||
|
|
||||||
# .gitignore
|
|
||||||
cat >.gitignore <<'EOF'
|
|
||||||
__pycache__/
|
|
||||||
*.py[cod]
|
|
||||||
venv/
|
|
||||||
logs/
|
|
||||||
*.log
|
|
||||||
*.pid
|
|
||||||
.DS_Store
|
|
||||||
EOF
|
|
||||||
|
|
||||||
echo -e "${GREEN}✓ .gitignore created${NC}"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
echo -e "${CYAN}STEP 8: Final Setup${NC}"
|
|
||||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
|
|
||||||
# Create empty log directory
|
|
||||||
touch logs/.gitkeep
|
|
||||||
|
|
||||||
# Deactivate venv for clean state
|
|
||||||
deactivate 2>/dev/null || true
|
|
||||||
|
|
||||||
echo -e "${GREEN}✓ Project setup complete!${NC}"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${GREEN}╔═══════════════════════════════════════════════════════════════════════╗${NC}"
|
|
||||||
echo -e "${GREEN}║ ✅ Installation Complete! ║${NC}"
|
|
||||||
echo -e "${GREEN}╚═══════════════════════════════════════════════════════════════════════╝${NC}"
|
|
||||||
echo ""
|
|
||||||
echo -e "${YELLOW}📁 Project Location:${NC} $PROJECT_ROOT"
|
|
||||||
echo ""
|
|
||||||
echo -e "${YELLOW}🔔 IMPORTANT - Next Steps:${NC}"
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}1. Copy Code from Claude Artifacts:${NC}"
|
|
||||||
echo " Open each artifact in Claude and copy the code to these files:"
|
|
||||||
echo " • backend/server.py"
|
|
||||||
echo " • simulator/wristband_simulator.py"
|
|
||||||
echo " • tests/test_suite.py"
|
|
||||||
echo " • frontend/dashboard/index.html (insert React code)"
|
|
||||||
echo " • frontend/kiosk/index.html (insert React code)"
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}2. Navigate to project:${NC}"
|
|
||||||
echo " cd $PROJECT_ROOT"
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}3. Run tests:${NC}"
|
|
||||||
echo " ./test.sh"
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}4. Start the system:${NC}"
|
|
||||||
echo " ./start.sh"
|
|
||||||
echo ""
|
|
||||||
echo -e "${CYAN}5. Open interfaces:${NC}"
|
|
||||||
echo " xdg-open frontend/dashboard/index.html"
|
|
||||||
echo " xdg-open frontend/kiosk/index.html"
|
|
||||||
echo ""
|
|
||||||
echo -e "${GREEN}📖 Full documentation:${NC} cat docs/SETUP_GUIDE.md"
|
|
||||||
echo ""
|
|
||||||
echo -e "${BLUE}═══════════════════════════════════════════════════════════════════════${NC}"
|
|
||||||
echo ""
|
|
||||||
@ -180,3 +180,702 @@ INFO: 127.0.0.1:53200 - "GET /api/queue HTTP/1.1" 200 OK
|
|||||||
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:53208 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:53214 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:53216 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:53218 - "POST /api/vitals HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:53234 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:44644 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:44646 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:44660 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:44670 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:44672 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:44684 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36350 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36364 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36372 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36388 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36390 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36396 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51530 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51538 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51540 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51548 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51562 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51570 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52486 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52500 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52514 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52520 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52534 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52550 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54118 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54126 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54142 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54146 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54148 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54162 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:53770 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:53782 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:53792 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:53802 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:53810 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:53826 - "POST /api/vitals HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:53836 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60856 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60862 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60874 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60884 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60896 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:60902 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38798 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38810 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38816 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38824 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38834 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38836 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:33754 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:33760 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:33774 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:33790 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:33798 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:33806 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56788 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56800 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56810 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56824 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56834 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:56838 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40858 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40862 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40878 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40894 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40904 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:40912 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:45962 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:45964 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:45978 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:45980 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:45992 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:46006 - "POST /api/vitals HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:46018 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35982 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35994 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35998 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36000 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36004 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36016 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43598 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43612 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43622 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43624 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43628 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43638 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55430 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55442 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55446 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55456 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55458 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55472 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48006 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48008 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48010 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48026 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48042 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48050 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55096 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55102 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55104 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55116 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55122 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55126 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55748 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55752 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55762 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55778 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55790 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55802 - "POST /api/vitals HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55810 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59564 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59580 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59586 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59602 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59614 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:59626 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51300 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51314 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51320 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51322 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51332 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51346 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42724 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42738 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42740 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42744 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42752 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42756 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34330 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34340 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34346 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34360 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34362 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:34368 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39604 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39620 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39626 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39632 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39646 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39656 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42312 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42324 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42330 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42342 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:42350 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "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:42366 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47694 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47696 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47708 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47710 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47712 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47716 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39504 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39516 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39526 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39532 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39546 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:39562 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51586 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51594 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51596 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51610 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51620 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:51628 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43548 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43556 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43568 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43578 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43590 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43598 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48462 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48478 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48480 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48488 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48502 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48512 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:46446 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:46462 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:46476 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:46478 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:46490 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:46496 - "POST /api/vitals HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:46498 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47958 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47970 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47982 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:47998 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48014 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:48018 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54544 - "POST /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:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54560 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54568 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54580 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:54584 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55426 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55428 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55440 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55444 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55450 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:55456 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43632 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43642 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43646 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43658 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43674 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:43676 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35608 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35610 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35620 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35622 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35626 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35638 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50036 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50050 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50064 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50078 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50094 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50100 - "POST /api/vitals HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50106 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35516 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35526 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35534 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35550 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35566 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:35578 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52394 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52402 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52418 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52420 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52426 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52440 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41388 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41398 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41404 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41420 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41436 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:41446 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50050 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50066 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50072 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50078 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50082 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:50084 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52234 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52246 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52260 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52274 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52284 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:52292 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36692 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36708 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36714 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36730 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36738 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36754 - "POST /api/vitals HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:36760 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38692 - "POST /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38704 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/stats HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:57242 - "GET /api/wristband-details HTTP/1.1" 200 OK
|
||||||
|
INFO: 127.0.0.1:38708 - "GET /api/queue HTTP/1.1" 200 OK
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user