Files
smom-dbis-138/scripts/reserve/keeper-service.sh

110 lines
2.7 KiB
Bash
Raw Normal View History

#!/bin/bash
# Price Feed Keeper Service (Bash version)
# Simple bash-based keeper that calls the keeper contract periodically
set -e
# Load environment variables
if [ -f .env ]; then
source .env
fi
# Configuration
RPC_URL="${RPC_URL_138:-http://localhost:8545}"
KEEPER_ADDRESS="${PRICE_FEED_KEEPER_ADDRESS}"
UPDATE_INTERVAL="${UPDATE_INTERVAL:-30}" # seconds
MAX_RETRIES=3
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Statistics
UPDATE_COUNT=0
ERROR_COUNT=0
# Function to log messages
log() {
echo -e "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
}
# Function to check if upkeep is needed
check_upkeep() {
forge script script/reserve/CheckUpkeep.s.sol:CheckUpkeep \
--rpc-url "$RPC_URL" \
--silent 2>/dev/null | grep -E "(needsUpdate|assets)" || echo "false"
}
# Function to perform upkeep
perform_upkeep() {
log "${YELLOW}Performing upkeep...${NC}"
local retries=0
local success=false
while [ $retries -lt $MAX_RETRIES ] && [ "$success" = false ]; do
if forge script script/reserve/PerformUpkeep.s.sol:PerformUpkeep \
--rpc-url "$RPC_URL" \
--broadcast \
--silent 2>/dev/null; then
success=true
UPDATE_COUNT=$((UPDATE_COUNT + 1))
log "${GREEN}✓ Upkeep successful${NC}"
else
retries=$((retries + 1))
if [ $retries -lt $MAX_RETRIES ]; then
log "${YELLOW}Retry $retries/$MAX_RETRIES...${NC}"
sleep 5
else
ERROR_COUNT=$((ERROR_COUNT + 1))
log "${RED}✗ Upkeep failed after $MAX_RETRIES retries${NC}"
fi
fi
done
}
# Function to stop keeper
stop_keeper() {
log "\nStopping keeper service..."
log "\n=== Statistics ==="
log "Total Updates: $UPDATE_COUNT"
log "Total Errors: $ERROR_COUNT"
if [ $UPDATE_COUNT -gt 0 ]; then
local success_rate=$(echo "scale=2; ($UPDATE_COUNT * 100) / ($UPDATE_COUNT + $ERROR_COUNT)" | bc)
log "Success Rate: ${success_rate}%"
fi
exit 0
}
# Trap signals for graceful shutdown
trap stop_keeper SIGINT SIGTERM
# Main loop
main() {
log "${GREEN}=== Price Feed Keeper Service ===${NC}"
log "RPC URL: $RPC_URL"
log "Keeper Address: $KEEPER_ADDRESS"
log "Update Interval: $UPDATE_INTERVAL seconds"
log ""
log "Keeper service started. Press Ctrl+C to stop."
log ""
while true; do
# Check if upkeep is needed
if check_upkeep | grep -q "true"; then
perform_upkeep
else
log "No updates needed"
fi
# Wait for next interval
sleep "$UPDATE_INTERVAL"
done
}
# Run main function
main