WinMX web server (WWS)

25 Settembre 2010

Ho realizzato uno script in bash che permetta di visualizzare la situazione dei download di WinMX direttamente da web. Lo script è primitivo, visualizza il nome del file in download e la sua percentuale di completamento. Ovviamente come avrete capito c'è bisogno di una distro GNU/Linux per far girare questo script. I casi sono due: o avete un server linux muletto che fa da p2p server sul quale c'è installato WinMX oppure potete optare per la mia soluzione. Ho un bel server con installato Ubuntu 32 bit sul quale gira una macchina virtuale XP. Su XP c'è installato WinMX il quale salva i file in download in una cartella condivisa con samba del server Ubuntu. In questo modo le dimensioni della macchina virtuale non raggiungono livelli abominevoli e salvando su una cartella condivisa e fisicamente collocata sul server Ubuntu, posso gestire meglio le funzioni dello script. Ecco il codice commentato:
#!/bin/bash

# ##########################################################
# Name: WinMX Web Monitor
#
# Distributed under the terms of GNU GPL version 3 or later
# Copyright (C) Luca Scalvi (luca.scalvi(a)yahoo.it)
# Date: 20090928
# Last updated: 20090930
# version: Beta 0.2
# ##########################################################

#Costanti
page_html="/home/server/www/P2P/winmx.html"
folder_winmx="/home/server/NetDrive/WinMX"
header="__INCOMPLETE___" #NON MODIFICARE

#Aggiorna il file eliminando quello vecchio
rm $page_html

#Lista il contenuto della directory /home/server/NetDrive/WinMX
ls $folder_winmx > /home/server/www/P2P/winmx.txt

#Conta le righe ( quindi i file ) del file /home/server/www/P2P/winmx.txt
righe=$(ls $folder_winmx | wc -l)

#Setta riga a 0
riga=0

#Ciclo principale
while [ $riga -lt $righe ]; do
let riga+=1
current=$(head -$riga /home/server/www/P2P/winmx.txt | tail -1)

#Trova la dimensione dei file contenuti nella directory /home/server/NetDrive/WinMX
dimensione_down=$(stat -c%s $folder_winmx/$current)

#Toglie __INCOMPLETE___ e .avi dal nome del file
nome=$(echo $current | sed 's/__INCOMPLETE___//g' | sed 's/.avi//g' )

#Estrazione ultimi 8 caratteri
dimensione_tot_hex_low=$(echo $nome | sed 's/^.*\(........\)$/\1/' )
echo $dimensione_tot_hex_low > /home/server/www/P2P/.dthl

#Trasforma tutti i caratteri da minuscoli a MAIUSCOLI
dimensione_tot_hex_upp=$(cat '/home/server/www/P2P/.dthl' | tr '[a-z]' '[A-Z]')

#Conversione Hexadecimal -> Decimal
dimensione_tot=$(echo "ibase=16; $dimensione_tot_hex_upp" | bc )

#Calcola la % di completamento del file
dim_virgola=$(echo " $dimensione_down / $dimensione_tot " | bc -l )
dim_decimali=$(echo '0'$dim_virgola )
percentage=$(echo "$dim_decimali * 100" | bc -l )
echo $percentage > /home/server/www/P2P/.tmp
perc_trunk=$(cat '/home/server/www/P2P/.tmp' | cut -c1-5)

#Controlla se il file è completo o meno
if [[ $current =~ $header ]]; then

echo ''$nome' - Completo al: '$perc_trunk'%

' >> $page_html

else

echo ''$nome' - FILE COMPLETATO!

' >> $page_html
fi
done

#Struttura file HTML
echo 'Totale file: ' $righe'' >> $page_html
echo 'Ultimo aggiornamento:' >> $page_html
echo '' >> $page_html
date >> $page_html
echo '' >> $page_html
echo 'Note:' >> $page_html
echo 'I file contenenti hash finale sono incompleti' >> $page_html
echo '' >> $page_html
echo '' >> $page_html
echo '----------' >> $page_html
echo 'About:' >> $page_html
echo 'Win Web Server Beta 0.1' >> $page_html
La sezione #Struttura file HTML è completamente personalizzabile e potete impostarlo come volete. Per facilitare la personalizzazione ho impostato le directory come costanti. Personalizzate queste voci e lo script sarà pronto all'uso
#Costanti
page_html="/home/server/www/P2P/winmx.html"
folder_winmx="/home/server/NetDrive/WinMX"
Per automatizzare il tutto, ricorriamo al Cron. Da terminale digitare crontab -e ed inserire la seguente riga: * * * * * bash /directory_dello_script/nome_script.sh In questo modo lo script verrà lanciato ogni minuto, dandovi una situazione sempre aggiornata Clicca sul link per vedere l'output di esempio: DEMO


X
THE END