aMule and amulecmd remote monitoring
What?
This is a simple little script to monitor a remote aMule setup. I need to do this since my aMule is running on another box, that I administrate via SSH or xVNC. But I want to be able to have some feedback on how the mule is doing...
How?
On the machine where aMule is running, (and I guess that would work too with aMuled), first install amulecmd
sudo apt-get install amule-utils
Then in aMule, go into Preferences, then Remote Controls, and tick Accept external connections. Fill in a password (for instance mypass), eventually change the port number (for instance 5555) and maybe the IP of the listening interface.
Still on the machine where aMule is running, you can test if the external connections are working:
amulecmd -h localhost -p 5555 -P mypass -c status
It should display some information about the aMule client.
When all of that is working, you can try to run the same command on the local machine (if the remote machine is outside your network, you might want to forward the port number, or even tunnel the whole thing through SSH)
amulecmd -h 1.1.0.25 -p 5555 -P mypass -c status
Here, 1.1.1.25 is the IP of the remote machine on which aMule runs. The command should display some information about the aMule client.
The script
Now, on the local machine, you can run the following script. Don't forget to change the host, port number and password in the first lines. You can also download the script here.
#!/bin/sh
#
# amule_remote_status.sh v 0.1
#
# Bash script to look display the status of a remote amule + amulecmd setup
#
# by Colin Verot colin@verot.net
#
# this script is free to use, just keep the copyright notice
#
host=1.1.1.25
port=5555
pass=mypass
# we first get the general data
r=`amulecmd -h $host -p $port -P $pass -c status`
# we parse it
download=`echo $r | grep -o 'Download: .* Up' | sed -e 's/Download: //' -e 's/ > Up//'`
upload=`echo $r | grep -o 'Upload: .* Cl' | sed -e 's/Upload: //' -e 's/ > Cl//'`
ed2k=`echo $r | grep -o 'ED2K: .* Kad' | sed -e 's/ED2K: //' -e 's/ > Kad//'`
kad=`echo $r | grep -o 'Kad: .* Dow' | sed -e 's/Kad: //' -e 's/ > Dow//'`
# and then display it nicely
echo "amulecmd : listens on $host:$port"
echo "Download : $download"
echo "Upload : $upload"
echo "ED2K : $ed2k"
echo "Kad : $kad"
# we now get the current list of files, in a temp file
amulecmd -h $host -p $port -P $pass -c 'show DL' > /tmp/amulecmd
touch /tmp/amulecmd2
# we parse this file line by line, reformating it
cat /tmp/amulecmd | grep '>' | (
while read line;
do l=`echo $line | sed -e 's/> [A-Z0-9]\{32\} \(.*\) \[\([0-9\.]*\)%\] \([0-9]\{1,\}\/[0-9]\{1,\}\) - \(.*\)/\\2%#\\3#\\1#\\4/'`;
echo $l >> /tmp/amulecmd2 ;
done
)
# we output the list of files, formatted in columns
echo
cat /tmp/amulecmd2 | sort -r -g | column -s '#' -t
# we delete the temp files
rm /tmp/amulecmd
rm /tmp/amulecmd2
exit 0;
Make the script executable, and you should be able to run it with a simple command such as:
watch ./amule_remote_status.sh
Output
The script will output something like this:
amulecmd : listens on server:5555
Download : 5.04 kB/s
Upload : 2.00 kB/s
ED2K : Connected to Some Server [xx.xx.xx.xx:4242] with HighID
Kad : Connected (ok)
69.9% 0/13 Shadows.avi Waiting
55.1% 1/37 Aguirre, Der Zorn Gottes.avi Downloading 2.27 kB/s
31.5% 1/18 Network.avi Downloading 3.68 kB/s
25.4% 0/54 Dersu Uzala - CD1.avi Waiting
20.4% 0/148 Jules Et Jim [VF].avi Waiting
19.3% 0/45 Le Genou De Claire.avi Waiting
0.0% 0/43 Song From The Second Floor.avi Paused
Et voila!
Disclaimer
Running aMule and amulecmd with external commands leaves a port open in your computer. I shall not be held responsible for any problem related to the use of this script.