Removed unneeded scripts
This commit is contained in:
@@ -1,303 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# OpenWrt-Compatible Improved fetch_data.sh
|
|
||||||
# Optimized for OpenWrt/BusyBox environment with enhanced performance
|
|
||||||
|
|
||||||
# Set content-type for JSON response
|
|
||||||
printf "Content-type: application/json\r\n"
|
|
||||||
printf "\r\n"
|
|
||||||
|
|
||||||
# Load centralized logging
|
|
||||||
. /www/cgi-bin/services/quecmanager_logger.sh
|
|
||||||
|
|
||||||
# Configuration
|
|
||||||
QUEUE_DIR="/tmp/at_queue"
|
|
||||||
QUEUE_MANAGER="/www/cgi-bin/services/at_queue_manager.sh"
|
|
||||||
SCRIPT_NAME_LOG="fetch_data"
|
|
||||||
|
|
||||||
# Performance settings - OpenWrt optimized
|
|
||||||
BATCH_TIMEOUT=45 # Timeout for batch operations
|
|
||||||
INDIVIDUAL_TIMEOUT=15 # Timeout for individual commands
|
|
||||||
TOKEN_RETRY_LIMIT=8 # Reduced retries for faster failure
|
|
||||||
TOKEN_RETRY_DELAY=0.1 # Faster retry intervals
|
|
||||||
|
|
||||||
# Minimal logging for performance
|
|
||||||
log_fetch() {
|
|
||||||
local level="$1"
|
|
||||||
local message="$2"
|
|
||||||
|
|
||||||
# Only log errors to centralized system for performance
|
|
||||||
case "$level" in
|
|
||||||
"error")
|
|
||||||
qm_log_error "service" "$SCRIPT_NAME_LOG" "$message"
|
|
||||||
;;
|
|
||||||
"debug")
|
|
||||||
[ "${DEBUG_MODE:-0}" = "1" ] && logger -t fetch_data -p "daemon.debug" "$message"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
# Ensure queue directory exists
|
|
||||||
mkdir -p "$QUEUE_DIR"
|
|
||||||
|
|
||||||
# OpenWrt-compatible JSON escaping using shell builtins
|
|
||||||
escape_json() {
|
|
||||||
printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g; s/\x1b/\\u001b/g' | tr -d '\r\n\f\b'
|
|
||||||
}
|
|
||||||
|
|
||||||
# OpenWrt-compatible URL encoding
|
|
||||||
urlencode_simple() {
|
|
||||||
local string="$1"
|
|
||||||
# Encode most common special characters for BusyBox compatibility
|
|
||||||
string="${string// /%20}"
|
|
||||||
string="${string//+/%2B}"
|
|
||||||
string="${string//\"/%22}"
|
|
||||||
string="${string//=/%3D}"
|
|
||||||
string="${string//&/%26}"
|
|
||||||
string="${string//#/%23}"
|
|
||||||
string="${string//?/%3F}"
|
|
||||||
string="${string//;/%3B}"
|
|
||||||
string="${string//,/%2C}"
|
|
||||||
echo "$string"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Fast AT command execution with OpenWrt timeout handling
|
|
||||||
execute_at_command() {
|
|
||||||
local cmd="$1"
|
|
||||||
local timeout="${2:-$INDIVIDUAL_TIMEOUT}"
|
|
||||||
|
|
||||||
local output=""
|
|
||||||
local status=1
|
|
||||||
|
|
||||||
# OpenWrt-compatible timeout implementation
|
|
||||||
if command -v timeout >/dev/null 2>&1; then
|
|
||||||
# Use timeout command if available
|
|
||||||
output=$(timeout "$timeout" sms_tool at "$cmd" 2>&1)
|
|
||||||
status=$?
|
|
||||||
else
|
|
||||||
# BusyBox-compatible timeout implementation
|
|
||||||
(
|
|
||||||
sms_tool at "$cmd" 2>&1 &
|
|
||||||
local cmd_pid=$!
|
|
||||||
|
|
||||||
# Background timeout
|
|
||||||
(sleep "$timeout" && kill -TERM $cmd_pid 2>/dev/null) &
|
|
||||||
local timeout_pid=$!
|
|
||||||
|
|
||||||
wait $cmd_pid
|
|
||||||
local cmd_status=$?
|
|
||||||
kill $timeout_pid 2>/dev/null
|
|
||||||
exit $cmd_status
|
|
||||||
)
|
|
||||||
status=$?
|
|
||||||
output=$(cat)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $status -eq 0 ] && [ -n "$output" ]; then
|
|
||||||
echo "$output"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Intelligent command grouping for batch processing
|
|
||||||
group_commands() {
|
|
||||||
local commands="$1"
|
|
||||||
|
|
||||||
# Separate quick vs slow commands for optimized processing
|
|
||||||
local quick_commands=""
|
|
||||||
local slow_commands=""
|
|
||||||
|
|
||||||
for cmd in $commands; do
|
|
||||||
case "$cmd" in
|
|
||||||
*"?"*|*"CREG"*|*"CGREG"*|*"CEREG"*|*"CPIN"*|*"CFUN"*)
|
|
||||||
quick_commands="$quick_commands $cmd"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
slow_commands="$slow_commands $cmd"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# Process quick commands first with shorter timeout
|
|
||||||
if [ -n "$quick_commands" ]; then
|
|
||||||
process_command_batch "$quick_commands" 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Then process slower commands
|
|
||||||
if [ -n "$slow_commands" ]; then
|
|
||||||
process_command_batch "$slow_commands" $INDIVIDUAL_TIMEOUT
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Process a batch of commands using the queue manager
|
|
||||||
process_command_batch() {
|
|
||||||
local commands="$1"
|
|
||||||
local timeout="${2:-$INDIVIDUAL_TIMEOUT}"
|
|
||||||
local first=1
|
|
||||||
|
|
||||||
for cmd in $commands; do
|
|
||||||
[ $first -eq 0 ] && printf ','
|
|
||||||
first=0
|
|
||||||
|
|
||||||
# Use queue manager for better performance and queuing
|
|
||||||
local escaped_cmd=$(urlencode_simple "$cmd")
|
|
||||||
local priority=5 # Medium priority for batch operations
|
|
||||||
|
|
||||||
# Submit to queue manager
|
|
||||||
local response=$(REQUEST_METHOD="GET" QUERY_STRING="command=$escaped_cmd&priority=$priority&timeout=$timeout" "$QUEUE_MANAGER" 2>/dev/null)
|
|
||||||
|
|
||||||
# Extract command ID
|
|
||||||
local cmd_id=""
|
|
||||||
if [ -n "$response" ]; then
|
|
||||||
cmd_id=$(echo "$response" | grep -o '"command_id":"[^"]*"' | cut -d'"' -f4)
|
|
||||||
[ -z "$cmd_id" ] && cmd_id=$(echo "$response" | grep -o '"id":"[^"]*"' | cut -d'"' -f4)
|
|
||||||
fi
|
|
||||||
|
|
||||||
local escaped_cmd_display=$(escape_json "$cmd")
|
|
||||||
|
|
||||||
if [ -n "$cmd_id" ]; then
|
|
||||||
# Wait for result with polling
|
|
||||||
local result_file="/tmp/at_queue/results/$cmd_id"
|
|
||||||
local wait_time=0
|
|
||||||
local max_wait=$timeout
|
|
||||||
|
|
||||||
while [ $wait_time -lt $max_wait ]; do
|
|
||||||
if [ -f "$result_file" ]; then
|
|
||||||
local result_content=$(cat "$result_file" 2>/dev/null)
|
|
||||||
if [ -n "$result_content" ]; then
|
|
||||||
# Extract response from result
|
|
||||||
local cmd_response=$(echo "$result_content" | grep -o '"response":"[^"]*"' | cut -d'"' -f4)
|
|
||||||
local cmd_status=$(echo "$result_content" | grep -o '"status":"[^"]*"' | cut -d'"' -f4)
|
|
||||||
|
|
||||||
if [ "$cmd_status" = "success" ] && [ -n "$cmd_response" ]; then
|
|
||||||
printf '{"command":"%s","response":"%s","status":"success"}' \
|
|
||||||
"$escaped_cmd_display" "$(escape_json "$cmd_response")"
|
|
||||||
else
|
|
||||||
printf '{"command":"%s","response":"Command failed","status":"error"}' \
|
|
||||||
"$escaped_cmd_display"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Cleanup result file
|
|
||||||
rm -f "$result_file" 2>/dev/null
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep 0.2
|
|
||||||
wait_time=$((wait_time + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
# If we didn't get a result, report timeout
|
|
||||||
if [ $wait_time -ge $max_wait ]; then
|
|
||||||
printf '{"command":"%s","response":"Command timed out","status":"timeout"}' \
|
|
||||||
"$escaped_cmd_display"
|
|
||||||
rm -f "$result_file" 2>/dev/null
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# Direct execution fallback if queue manager fails
|
|
||||||
local output=$(execute_at_command "$cmd" "$timeout")
|
|
||||||
local cmd_status=$?
|
|
||||||
|
|
||||||
if [ $cmd_status -eq 0 ] && [ -n "$output" ]; then
|
|
||||||
printf '{"command":"%s","response":"%s","status":"success"}' \
|
|
||||||
"$escaped_cmd_display" "$(escape_json "$output")"
|
|
||||||
else
|
|
||||||
printf '{"command":"%s","response":"Direct execution failed","status":"error"}' \
|
|
||||||
"$escaped_cmd_display"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# Enhanced batch processing with optimizations
|
|
||||||
process_all_commands() {
|
|
||||||
local commands="$1"
|
|
||||||
local priority="${2:-5}"
|
|
||||||
|
|
||||||
printf '['
|
|
||||||
group_commands "$commands"
|
|
||||||
printf ']\r\n'
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# Cleanup on exit
|
|
||||||
cleanup() {
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# Set up signal handlers
|
|
||||||
trap cleanup INT TERM
|
|
||||||
|
|
||||||
# Enhanced command sets with better organization
|
|
||||||
COMMAND_SET_1='AT+QUIMSLOT? AT+CNUM AT+COPS? AT+CIMI AT+ICCID AT+CGSN AT+CPIN? AT+CGDCONT? AT+CREG? AT+CFUN? AT+QENG="servingcell" AT+QTEMP AT+CGCONTRDP'
|
|
||||||
COMMAND_SET_2='AT+QCAINFO=1;+QCAINFO;+QCAINFO=0 AT+QRSRP AT+QMAP="WWAN" AT+C5GREG=2;+C5GREG? AT+CGREG=2;+CGREG? AT+QRSRQ AT+QSINR'
|
|
||||||
COMMAND_SET_3='AT+CGMI AT+CGMM AT+QGMR AT+CNUM AT+CIMI AT+ICCID AT+CGSN AT+QMAP="LANIP" AT+QMAP="WWAN" AT+QGETCAPABILITY'
|
|
||||||
COMMAND_SET_4='AT+QMAP="MPDN_RULE" AT+QMAP="DHCPV4DNS" AT+QCFG="usbnet" AT+QNWCFG="3gpp_rel"'
|
|
||||||
COMMAND_SET_5='AT+QRSRP AT+QRSRQ AT+QSINR AT+QCAINFO AT+QSPN'
|
|
||||||
COMMAND_SET_6='AT+CEREG=2;+CEREG? AT+C5GREG=2;+C5GREG? AT+CPIN? AT+CGDCONT? AT+CGCONTRDP AT+QMAP="WWAN" AT+QRSRP AT+QTEMP'
|
|
||||||
COMMAND_SET_7='AT+QNWPREFCFG="policy_band" AT+QNWPREFCFG="lte_band";+QNWPREFCFG="nsa_nr5g_band";+QNWPREFCFG="nr5g_band"'
|
|
||||||
COMMAND_SET_8='AT+QNWLOCK="common/4g" AT+QNWLOCK="common/5g" AT+QNWLOCK="save_ctrl"'
|
|
||||||
COMMAND_SET_9='AT+QNWCFG="lte_time_advance",1;+QNWCFG="lte_time_advance" AT+QNWCFG="nr5g_time_advance",1;+QNWCFG="nr5g_time_advance"'
|
|
||||||
COMMAND_SET_10='AT+QNWPREFCFG="mode_pref" AT+QNWPREFCFG="nr5g_disable_mode" AT+QMBNCFG="AutoSel" AT+QMBNCFG="list"'
|
|
||||||
|
|
||||||
# Parse command set with validation - OpenWrt compatible
|
|
||||||
COMMAND_SET=$(echo "$QUERY_STRING" | grep -o 'set=[0-9]\+' | cut -d'=' -f2 | tr -cd '0-9')
|
|
||||||
if [ -z "$COMMAND_SET" ] || [ "$COMMAND_SET" -lt 1 ] || [ "$COMMAND_SET" -gt 10 ]; then
|
|
||||||
COMMAND_SET=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Select appropriate command set
|
|
||||||
case "$COMMAND_SET" in
|
|
||||||
1) COMMANDS="$COMMAND_SET_1" ;;
|
|
||||||
2) COMMANDS="$COMMAND_SET_2" ;;
|
|
||||||
3) COMMANDS="$COMMAND_SET_3" ;;
|
|
||||||
4) COMMANDS="$COMMAND_SET_4" ;;
|
|
||||||
5) COMMANDS="$COMMAND_SET_5" ;;
|
|
||||||
6) COMMANDS="$COMMAND_SET_6" ;;
|
|
||||||
7) COMMANDS="$COMMAND_SET_7" ;;
|
|
||||||
8) COMMANDS="$COMMAND_SET_8" ;;
|
|
||||||
9) COMMANDS="$COMMAND_SET_9" ;;
|
|
||||||
10) COMMANDS="$COMMAND_SET_10" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Set priority based on command type
|
|
||||||
PRIORITY=5 # Medium-high priority for data fetching
|
|
||||||
|
|
||||||
# Check for high priority commands
|
|
||||||
if echo "$COMMANDS" | grep -qi "QSCAN"; then
|
|
||||||
PRIORITY=1
|
|
||||||
elif echo "$COMMANDS" | grep -qi "COPS\|CFUN"; then
|
|
||||||
PRIORITY=3
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Execute batch processing with timeout protection
|
|
||||||
(
|
|
||||||
# Set overall timeout for the entire script using OpenWrt-compatible method
|
|
||||||
if command -v timeout >/dev/null 2>&1; then
|
|
||||||
timeout $BATCH_TIMEOUT sh -c '
|
|
||||||
process_all_commands "$1" "$2"
|
|
||||||
' _ "$COMMANDS" "$PRIORITY"
|
|
||||||
else
|
|
||||||
# BusyBox timeout fallback
|
|
||||||
(
|
|
||||||
process_all_commands "$COMMANDS" "$PRIORITY" &
|
|
||||||
local main_pid=$!
|
|
||||||
|
|
||||||
(sleep $BATCH_TIMEOUT && kill -TERM $main_pid 2>/dev/null) &
|
|
||||||
local timeout_pid=$!
|
|
||||||
|
|
||||||
wait $main_pid
|
|
||||||
local exit_status=$?
|
|
||||||
kill $timeout_pid 2>/dev/null
|
|
||||||
|
|
||||||
if [ $exit_status -eq 143 ] || [ $exit_status -eq 124 ]; then
|
|
||||||
printf '[{"command":"batch","response":"Script execution timed out","status":"timeout"}]\r\n'
|
|
||||||
fi
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
) || {
|
|
||||||
# Handle script timeout
|
|
||||||
printf '[{"command":"batch","response":"Script execution timed out","status":"timeout"}]\r\n'
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user