19db372cdc
- Introduced comprehensive data structures for ONVIF device information, capabilities, media profiles, and configurations. - Added types for device services, network settings, imaging options, audio/video configurations, and user management. - Implemented structures for handling various ONVIF features including PTZ control, event subscriptions, and analytics configurations. - Enhanced support for network protocols, security settings, and system logging.
112 lines
3.6 KiB
Bash
112 lines
3.6 KiB
Bash
#!/bin/bash
|
|
# collect-camera-data.sh - Collect test data from all discovered cameras
|
|
|
|
set -e
|
|
|
|
# Color output
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo -e "${GREEN}ONVIF Camera Data Collection${NC}"
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo ""
|
|
|
|
# Check if diagnostics tool exists
|
|
if [ ! -f "./bin/onvif-diagnostics" ]; then
|
|
echo -e "${RED}Error: onvif-diagnostics not found. Building...${NC}"
|
|
go build -o bin/onvif-diagnostics ./cmd/onvif-diagnostics
|
|
echo -e "${GREEN}✓ Built onvif-diagnostics${NC}"
|
|
fi
|
|
|
|
# Prompt for credentials
|
|
echo -e "${YELLOW}Enter ONVIF credentials for your cameras:${NC}"
|
|
read -p "Username: " ONVIF_USER
|
|
read -sp "Password: " ONVIF_PASS
|
|
echo ""
|
|
echo ""
|
|
|
|
# Cameras discovered
|
|
declare -a CAMERAS=(
|
|
"192.168.2.61:8000|Reolink_E1Zoom"
|
|
"192.168.2.57:80|Bosch_AUTODOME_5000i"
|
|
"192.168.2.82:80|AXIS_P3818"
|
|
"192.168.2.236:8000|Reolink_TrackMixWiFi"
|
|
"192.168.2.200:80|Bosch_FLEXIDOME_8000i"
|
|
"192.168.2.24:80|Bosch_FLEXIDOME_5100i"
|
|
"192.168.2.190:80|AXIS_Q3819"
|
|
"192.168.2.30:80|AXIS_P5655"
|
|
)
|
|
|
|
SUCCESS=0
|
|
FAILED=0
|
|
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
|
|
|
# Create output directory for this batch
|
|
BATCH_DIR="camera-data-batch-${TIMESTAMP}"
|
|
mkdir -p "${BATCH_DIR}"
|
|
|
|
echo -e "${GREEN}Collecting data from ${#CAMERAS[@]} cameras...${NC}"
|
|
echo ""
|
|
|
|
# Loop through each camera
|
|
for camera_info in "${CAMERAS[@]}"; do
|
|
IFS='|' read -r ip_port name <<< "$camera_info"
|
|
|
|
# Check if port is specified
|
|
if [[ $ip_port == *":"* ]]; then
|
|
ENDPOINT="http://${ip_port}/onvif/device_service"
|
|
else
|
|
ENDPOINT="http://${ip_port}:80/onvif/device_service"
|
|
fi
|
|
|
|
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
echo -e "${YELLOW}Camera: ${name}${NC}"
|
|
echo -e "${YELLOW}Endpoint: ${ENDPOINT}${NC}"
|
|
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
|
|
# Run COMPREHENSIVE diagnostics with XML capture (captures all operations)
|
|
if ./bin/onvif-diagnostics \
|
|
-endpoint "${ENDPOINT}" \
|
|
-username "${ONVIF_USER}" \
|
|
-password "${ONVIF_PASS}" \
|
|
-capture-all \
|
|
-verbose 2>&1 | tee "${BATCH_DIR}/${name}_log.txt"; then
|
|
|
|
echo -e "${GREEN}✓ Successfully captured data from ${name}${NC}"
|
|
SUCCESS=$((SUCCESS + 1))
|
|
else
|
|
echo -e "${RED}✗ Failed to capture data from ${name}${NC}"
|
|
FAILED=$((FAILED + 1))
|
|
fi
|
|
|
|
echo ""
|
|
sleep 2 # Brief delay between cameras to avoid network congestion
|
|
done
|
|
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo -e "${GREEN}Collection Complete${NC}"
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo -e "Success: ${GREEN}${SUCCESS}${NC} / ${#CAMERAS[@]}"
|
|
echo -e "Failed: ${RED}${FAILED}${NC} / ${#CAMERAS[@]}"
|
|
echo ""
|
|
echo -e "${YELLOW}Results saved to: ${BATCH_DIR}/${NC}"
|
|
echo ""
|
|
|
|
# Move camera-logs to batch directory
|
|
if [ -d "camera-logs" ]; then
|
|
echo -e "${YELLOW}Moving camera-logs to batch directory...${NC}"
|
|
mv camera-logs/* "${BATCH_DIR}/" 2>/dev/null || true
|
|
echo -e "${GREEN}✓ Logs organized${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GREEN}Next steps:${NC}"
|
|
echo "1. Review the capture files in ${BATCH_DIR}/"
|
|
echo "2. Copy .tar.gz files to testdata/captures/"
|
|
echo "3. Run: go build -o bin/generate-tests ./cmd/generate-tests"
|
|
echo "4. Generate tests for each camera capture"
|
|
echo ""
|