Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- TARGETDIR=/home/symbol/target
- WORKDIR=/home/symbol/.zabbix
- MYADDRESS=NATR4OJ2ROAMZLRCPWYLOC7PDW57KK75TKDG3KQ
- LOGDIR=$TARGETDIR/nodes/node/logs/
- HARVESTINGCONFIG=$TARGETDIR/nodes/node/server-config/resources/config-harvesting.properties
- PRESETFILE=$TARGETDIR/preset.yml
- HARVESTED=$WORKDIR/harvested
- ORPHANED=$WORKDIR/orphaned
- TOTALBALANCE=$WORKDIR/totalbalance
- TOTALIMPORTANCE=$WORKDIR/totalimportance
- MYBALANCE=$WORKDIR/mybalance
- BLOCKS=$WORKDIR/blocks
- update_harvesting_data() {
- LOGS=`find $LOGDIR -mtime -1 -type f -name 'catapult_server*.log'`
- YESTERDAY=`date -u "+%Y-%m-%d %H:%M:%S" -d yesterday`
- grep -a -h "successfully harvested block" $LOGS |
- awk "\$0 > \"$YESTERDAY\" {print \$10 \" \" \$13}" >$HARVESTED
- PREVIOUSLYFINALIZED=0
- if [ -f $WORKDIR/finalization ]
- then
- PREVIOUSLYFINALIZED=`cat $WORKDIR/finalization`
- fi
- FINALIZATIONHEIGHT=`wget -q -O- http://127.0.0.1:3000/chain/info |
- jq -r .latestFinalizedBlock.height`
- if [ "$FINALIZATIONHEIGHT" -gt "$PREVIOUSLYFINALIZED" ]
- then
- MYBENEFICIARYADDRESS=`grep beneficiaryAddress: $PRESETFILE |
- awk '{print $2}'`
- mv -f $ORPHANED ${ORPHANED}.old 2>/dev/null
- awk '{print $1}' <$HARVESTED |
- while read BLOCK
- do
- if [ "$BLOCK" -le "$PREVIOUSLYFINALIZED" ]
- then
- grep "^$BLOCK\$" ${ORPHANED}.old
- elif [ "$BLOCK" -le "$FINALIZATIONHEIGHT" ]
- then
- BENEFICIARY=`wget -q -O- http://127.0.0.1:3000/blocks/$BLOCK |
- jq -r .block.beneficiaryAddress`
- BENEFICIARYADDRESS=`symbol-cli converter hexToBase32Address -a "$BENEFICIARY" |
- tr -d -`
- if [ "$BENEFICIARYADDRESS" != "$MYBENEFICIARYADDRESS" ]
- then
- echo $BLOCK
- fi
- fi
- done >$ORPHANED
- echo $FINALIZATIONHEIGHT >$WORKDIR/finalization
- fi
- }
- exclusive_lock_harvested() {
- ( flock -x 9
- if [ ! -f $HARVESTED ]
- then
- update_harvesting_data
- else
- MTIME=`stat -c %y $HARVESTED`
- TENMINUTESAGO=`date "+%Y-%m-%d %H:%M:%S" -d "10 minutes ago"`
- if [[ "$MTIME" < "$TENMINUTESAGO" ]]
- then
- update_harvesting_data
- fi
- fi
- $1
- ) 9>$WORKDIR/harvested.lock
- }
- update_balance_data() {
- BALANCE=0
- IMPORTANCE=0
- touch $WORKDIR/addressescache
- wget -q -O- http://127.0.0.1:3000/node/unlockedaccount |
- jq -r .unlockedAccount |
- tr -d ' "[],' |
- grep -v '^$' |
- while read REMOTEPUBLICKEY
- do
- ADDRESS=`grep $REMOTEPUBLICKEY $WORKDIR/addressescache | awk '{print $2}'`
- if [ -z "$ADDRESS" ]
- then
- REMOTEADDRESS=`symbol-cli converter publicKeyToAddress -n MAIN_NET -p "$REMOTEPUBLICKEY" |
- tr -d -`
- PUBLICKEY=`wget -q -O- http://127.0.0.1:3000/accounts/$REMOTEADDRESS |
- jq -r .account.supplementalPublicKeys.linked.publicKey`
- if [ -n "$PUBLICKEY" ]
- then
- ADDRESS=`symbol-cli converter publicKeyToAddress -n MAIN_NET -p "$PUBLICKEY" |
- tr -d -`
- echo $REMOTEPUBLICKEY $ADDRESS >>$WORKDIR/addressescache
- fi
- fi
- if [ -n "$ADDRESS" ]
- then
- wget -q -O- http://127.0.0.1:3000/accounts/$ADDRESS >$WORKDIR/addressinfo
- XYM=`jq -r '.account.mosaics[] | select(.id == "6BED913FA20223F8") | .amount' <$WORKDIR/addressinfo`
- XYM=$(( $XYM / 1000000 ))
- if [ "$ADDRESS" == "$MYADDRESS" ]
- then
- echo $XYM >$MYBALANCE
- fi
- BALANCE=$(( $BALANCE + $XYM ))
- echo $BALANCE >$TOTALBALANCE
- IMP=`jq -r .account.importance <$WORKDIR/addressinfo`
- IMPORTANCE=$(( $IMPORTANCE + $IMP ))
- echo $IMPORTANCE >$TOTALIMPORTANCE
- fi
- done
- }
- exclusive_lock_balance() {
- ( flock -x 9
- if [ ! -f $TOTALBALANCE ]
- then
- update_balance_data
- else
- MTIME=`stat -c %y $TOTALBALANCE`
- HALFANHOURAGO=`date "+%Y-%m-%d %H:%M:%S" -d "30 minutes ago"`
- if [[ "$MTIME" < "$HALFANHOURAGO" ]]
- then
- update_balance_data
- fi
- fi
- $1
- ) 9>$WORKDIR/balance.lock
- }
- update_blocks_data () {
- HEIGHT=`wget -q -O- http://127.0.0.1:3000/chain/info | jq -r .height`
- HEIGHTMINUS60=$(( $HEIGHT - 60 ))
- if [ ! -f $BLOCKS ]
- then
- OLDHEIGHT=$HEIGHTMINUS60
- else
- awk "\$1 > \"$HEIGHTMINUS60\" {print \$0}" <$BLOCKS >${BLOCKS}.new
- OLDHEIGHT=`tail -n 1 ${BLOCKS}.new | awk '{print $1}'`
- fi
- H=$(( $OLDHEIGHT + 1 ))
- while [ $H -le $HEIGHT ]
- do
- FEEMULTIPLIER=`wget -q -O- http://127.0.0.1:3000/blocks/$H | jq -r .block.feeMultiplier`
- if [ $FEEMULTIPLIER -eq 0 ]
- then
- FEEMULTIPLIER=100
- fi
- echo -e "$H\t$FEEMULTIPLIER" >>${BLOCKS}.new
- H=$(( $H + 1 ))
- done
- mv ${BLOCKS}.new $BLOCKS
- }
- exclusive_lock_blocks() {
- ( flock -x 9
- if [ ! -f $BLOCKS ]
- then
- update_blocks_data
- else
- MTIME=`stat -c %y $BLOCKS`
- TWOMINUTESAGO=`date "+%Y-%m-%d %H:%M:%S" -d "2 minutes ago"`
- if [[ "$MTIME" < "$TWOMINUTESAGO" ]]
- then
- update_blocks_data
- fi
- fi
- $1
- ) 9>$WORKDIR/block.lock
- }
- if [ ! -d $WORKDIR ]
- then
- mkdir -p $WORKDIR || exit 1
- fi
- if [ "$1" == "harvested" ]
- then
- if [ "$2" == "me" ]
- then
- MYLINKEDPUBLICKEY=`wget -q -O- http://127.0.0.1:3000/accounts/$MYADDRESS |
- jq -r .account.supplementalPublicKeys.linked.publicKey`
- exclusive_lock_harvested "grep $MYLINKEDPUBLICKEY $HARVESTED" | wc -l
- else
- exclusive_lock_harvested "wc -l $HARVESTED" | awk '{print $1}'
- fi
- elif [ "$1" == "orphaned" ]
- then
- exclusive_lock_harvested "wc -l $ORPHANED" | awk '{print $1}'
- elif [ "$1" == "maxUnlockedAccounts" ]
- then
- grep maxUnlockedAccounts $HARVESTINGCONFIG | awk '{print $3}'
- elif [ "$1" == "broker_is_running" ]
- then
- ps axu 2>/dev/null | grep /usr/catapult/bin/catapult.broker | grep -v grep | wc -l
- elif [ "$1" == "catapult_is_running" ]
- then
- ps axu 2>/dev/null | grep /usr/catapult/bin/catapult.server | grep -v grep | wc -l
- elif [ "$1" == "mongodb_is_running" ]
- then
- ps axu 2>/dev/null | grep mongodb | grep -v grep | wc -l
- elif [ "$1" == "rest_is_running" ]
- then
- ps axu 2>/dev/null | grep /symbol-workdir/rest.json | grep -v grep | wc -l
- elif [ "$1" == "totalbalance" ]
- then
- exclusive_lock_balance "cat $TOTALBALANCE"
- elif [ "$1" == "totalimportance" ]
- then
- exclusive_lock_balance "cat $TOTALIMPORTANCE"
- elif [ "$1" == "mybalance" ]
- then
- exclusive_lock_balance "cat $MYBALANCE"
- elif [ "$1" == "fee" ]
- then
- if [ "$2" == "min" ]
- then
- exclusive_lock_blocks "sort -k 2 -n $BLOCKS" | head -n 1 | awk '{print $2}'
- elif [ "$2" == "max" ]
- then
- exclusive_lock_blocks "sort -k 2 -n $BLOCKS" | tail -n 1 | awk '{print $2}'
- elif [ "$2" == "median" ]
- then
- exclusive_lock_blocks "cut -f 2 $BLOCKS" | numaverage -M
- elif [ "$2" == "average" ]
- then
- exclusive_lock_blocks "cut -f 2 $BLOCKS" | numaverage
- elif [ "$2" == "below100" ]
- then
- exclusive_lock_blocks "cat $BLOCKS" | awk "\$2 < 100 {print \$2}" | wc -l
- fi
- fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement