Files
proxmox/scripts/fix-oracle-publisher-complete.sh
defiQUG cb47cce074 Complete markdown files cleanup and organization
- Organized 252 files across project
- Root directory: 187 → 2 files (98.9% reduction)
- Moved configuration guides to docs/04-configuration/
- Moved troubleshooting guides to docs/09-troubleshooting/
- Moved quick start guides to docs/01-getting-started/
- Moved reports to reports/ directory
- Archived temporary files
- Generated comprehensive reports and documentation
- Created maintenance scripts and guides

All files organized according to established standards.
2026-01-06 01:46:25 -08:00

152 lines
5.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Complete Fix for Oracle Publisher Service
# Fixes all issues: transaction signing, parsers, API keys, authorization
# Usage: ./scripts/fix-oracle-publisher-complete.sh
set -euo pipefail
PROXMOX_HOST="${PROXMOX_HOST:-192.168.11.10}"
VMID=3500
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_detail() { echo -e "${CYAN}[DETAIL]${NC} $1"; }
echo "========================================="
echo "Complete Oracle Publisher Fix"
echo "========================================="
echo ""
# Fix 1: Transaction signing
log_info "Fix 1: Transaction signing (rawTransaction -> raw_transaction)..."
ssh "root@$PROXMOX_HOST" "pct exec $VMID -- bash" << 'EOF'
cd /opt/oracle-publisher
sed -i 's/\.rawTransaction/.raw_transaction/g' oracle_publisher.py
chown oracle:oracle oracle_publisher.py
echo "✓ Fixed"
EOF
log_success "Transaction signing fixed"
# Fix 2: Parser configuration
log_info "Fix 2: Price parser configuration..."
ssh "root@$PROXMOX_HOST" "pct exec $VMID -- bash" << 'EOF'
cd /opt/oracle-publisher
sed -i 's|DATA_SOURCE_1_PARSER=coingecko|DATA_SOURCE_1_PARSER=ethereum.usd|' .env
sed -i 's|DATA_SOURCE_2_PARSER=binance|DATA_SOURCE_2_PARSER=USD|' .env
echo "✓ Fixed"
EOF
log_success "Parser configuration fixed"
# Fix 3: Improve price parser in Python
log_info "Fix 3: Improving price parser logic..."
ssh "root@$PROXMOX_HOST" "pct exec $VMID -- bash" << 'PYEOF'
cd /opt/oracle-publisher
python3 << 'PYFIX'
with open('oracle_publisher.py', 'r') as f:
content = f.read()
# Improve _parse_price method
old_method = ''' def _parse_price(self, data: dict, parser: str) -> Optional[str]:
"""Parse price from JSON data"""
# Simple implementation - can be enhanced with jsonpath
try:
keys = parser.split('.')
value = data
for key in keys:
value = value[key]
return str(value)
except (KeyError, TypeError):
return None'''
new_method = ''' def _parse_price(self, data: dict, parser: str) -> Optional[str]:
"""Parse price from JSON data"""
# Handle different API response formats
try:
# If parser is a simple key (like 'USD'), try direct access
if parser in data:
return str(data[parser])
# Otherwise, try dot-notation path
keys = parser.split('.')
value = data
for key in keys:
if isinstance(value, dict):
value = value[key]
else:
return None
return str(value)
except (KeyError, TypeError, AttributeError):
# Try to find price in common locations
for key in ['price', 'usd', 'USD', 'ethereum', 'ETH']:
if key in data:
if isinstance(data[key], dict) and 'usd' in data[key]:
return str(data[key]['usd'])
elif isinstance(data[key], (int, float, str)):
return str(data[key])
return None'''
if old_method in content:
content = content.replace(old_method, new_method)
with open('oracle_publisher.py', 'w') as f:
f.write(content)
print('✓ Improved')
else:
print('Already updated')
PYFIX
chown oracle:oracle oracle_publisher.py
venv/bin/python -m py_compile oracle_publisher.py && echo "✓ Syntax valid" || echo "✗ Syntax error"
PYEOF
log_success "Price parser improved"
# Fix 4: Update data sources
log_info "Fix 4: Updating data sources (remove Binance, use CryptoCompare)..."
ssh "root@$PROXMOX_HOST" "pct exec $VMID -- bash" << 'EOF'
cd /opt/oracle-publisher
# Update CryptoCompare URL if not already set
if ! grep -q 'cryptocompare.com' .env; then
sed -i 's|DATA_SOURCE_2_URL=.*|DATA_SOURCE_2_URL=https://min-api.cryptocompare.com/data/price?fsym=ETH\&tsyms=USD|' .env
fi
echo "✓ Updated"
EOF
log_success "Data sources updated"
# Restart service
log_info "Restarting service..."
ssh "root@$PROXMOX_HOST" "pct exec $VMID -- systemctl restart oracle-publisher"
sleep 5
log_success "Service restarted"
# Verify
log_info "Verifying fixes..."
ssh "root@$PROXMOX_HOST" "pct exec $VMID -- bash" << 'EOF'
echo "Service status:"
systemctl is-active oracle-publisher && echo " ✓ Running" || echo " ✗ Not running"
echo ""
echo "Recent logs:"
journalctl -u oracle-publisher -n 10 --no-pager 2>&1 | grep -E '(Price|Transaction|ERROR)' | tail -5
EOF
echo ""
log_success "========================================="
log_success "All Fixes Applied!"
log_success "========================================="
echo ""
log_info "Next steps:"
log_info " 1. Monitor logs: ssh root@$PROXMOX_HOST \"pct exec $VMID -- journalctl -u oracle-publisher -f\""
log_info " 2. Verify oracle updates: cast call 0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 'latestRoundData()' --rpc-url https://rpc-http-pub.d-bis.org"
log_info " 3. Optional: Add CoinGecko API key for redundancy"
echo ""