-
IT café
ASUS WL-500G Premium
Új hozzászólás Aktív témák
-
ecaddict
senior tag
Korábbi hsz-ban rapidshare és data.hu letöltő scrip igértem, hogy lesz wget (AJAX-os) WeBUI (is) hozzá . Két variánsban létezik a WebUI.
Az első verzió szerver (azaz router) oldalon végzi a screen-ből kinyert adatok feldolgozását.
Mivel a router nem egy erőgép, ezt csak nagyon kicsi feltöltési sávszél esetén érdemes használni, mert bekapcsolt monitoringnál már néhány letöltés megemeli a load-ot a routeren (bár mindent elkövettem, hogy minél kevesebbszer kelljen új process-t indítani, szinte mini programot kap a sed elágazásokkal stb, ezzel együtt sem lehet elég gyors).
Itt ezt a variánst adom meg. Ebből nem tervezek késöbb sem új verziót.
A második variáns elküldi a nyers adatokat a kliens oldalra ahol (pl. PC) nem okoz komolyabb terhelést a monitoring adatok feldolgozása.
Ezt jön a köv. hsz-ban.Mivel a WebUI screen-t indít ill. wget fut a letöltésnél aki az általam korábban megadott shutdown script-et használja ki kell bővíteni a lelövendő process listát
a /usr/local/sbin/shutdown-ban erre:PLIST="smbd nmbd cron transmissiond xinetd vsftpd lighttpd mysqld httpd screen wget syslogd"
Az swget.cgi ugynabban a webroot alatt lévő könyvtárban kell legyen mint a korábban megadott rget.sh, nálam:
/mnt/cgi-bin/rget.sh
/mnt/cgi-bin/swget.cgi
/mnt/cgi-bin/qwget.shTermészetesen mind futtatható kell legyen, admin-ként chmod u+x fájl név
Linux sorvége jelekkel.A qwget.sh a letöltési sor kezelését végzi ill. összeköti a WebUI-t a rapid/data letöltővel.
A .cgi-s lighttpd.conf beállításokat már korábbi hsz-ekben megadtam:
cgi.assign
server.modulesÉn alapvetően Firefox-al használom, de funkcionálisan megy IE-el is (bár IE-el kicsit szétesett a kinézete). Más böngészőket nem próbáltam, jó eséllyel megy ott is.
/mnt/cgi-bin/qwget.sh:
#!/bin/sh
# written by ecaddict, distributed (conveyed) under GPL version 3 or any later version
SHBASE=/mnt/cgi-bin/
LIMIT_RATE="128k"
IN=qwget.list
SD=`dirname $0`
TMPFILE=`mktemp -q -t qwget_dl.XXXXXXXX`
DLDIR=`pwd`
[ -n "$EWGETDIR" ] && SHBASE="$EWGETDIR"
while true
do
read DF < "$SD/$IN"
if [ -n "$DF" ] ;then
if [ -n "`echo $DF | sed -ne '/rapidshare.com/p' -e '/data.hu/p'`" ] ;then
echo "$DF" > "$TMPFILE"
(
trap - INT QUIT TSTP
$SHBASE/rget.sh "$TMPFILE" "$DLDIR"
)
else
wget -c --limit-rate="$LIMIT_RATE" "$DF"
fi
DF=`basename "$DF"`
cat "$SD/$IN" | sed '/'''$DF'''/d' > "$SD/$IN"
fi
sleep 15
clear
done/mnt/cgi-bin/swget.cgi:
#!/bin/sh
# written by ecaddict, distributed (conveyed) under GPL version 3 or any later version
BASE=/mnt/protected/ewget
SRNAME=ewget
QFILE=qwget.list
QSH=qwget.sh
EXSC=/opt/bin/screen
EXFD=/opt/bin/find
EXSD=/bin/sed
EXWG=/opt/bin/wget
EXPS=/opt/bin/ps
SCDP=/tmp/screen.dump
_getspids() {
SFI=`echo /tmp/screens/S-admin/*.$SRNAME`
SPID=`expr "$SFI" : '[^0-9]*\([0-9]*\)'`
if [ -z "$SPID" ]; then #long way if short does not work
SPID=`$EXSC -ls $SRNAME | $EXSD -n "s/[^0-9]*\([0-9][0-9]*\)\.$SRNAME.*/\1/p"`
fi
if [ -n "$SPID" ]; then
SHID=`$EXPS -o pid,ppid ax | $EXSD -n 's/[^0-9]*\([0-9][0-9]*\) [ ]*'$SPID'.*/\1/p'`
fi
echo "$SHID"
}
_download () {
![ -d "$BASE" ] || mkdir "$BASE"
[ -d "$BASE" ] && cd "$BASE"
SPID=`$EXSC -ls $SRNAME | $EXSD -n "s/[^0-9]*\([0-9][0-9]*\)\.$SRNAME.*/\1/p"`
SDIR=`dirname $0`
if [ -z "$SPID"];then
EWGETDIR="$OLDPWD"; export EWGETDIR
$EXSC -dm -h 0 -S $SRNAME; $EXSC -dm -h 0 -S x$SRNAME $EXSC -x $SRNAME
$EXSC -x x$SRNAME -X quit; $EXSC -x x$SRNAME -X quit
sleep 1; $EXSC -S $SRNAME -p shell2 -X eval 'stuff "^D"\015'
sleep 1; PIDSH=`_getspids`
$EXSC -S $SRNAME -p shell1 -X title "PID$PIDSH"
$EXSC -S $SRNAME -p "PID$PIDSH" -X eval "stuff "$SDIR"/"$QSH"\015"
SPID=`$EXSC -ls $SRNAME | $EXSD -n "s/[^0-9]*\([0-9][0-9]*\)\.$SRNAME.*/\1/p"`
fi
if [ -n "`echo """$DF""" | $EXSD -n '/rapidshare.com/p'`" ] || [ -n "$QE" ] ;then
QF="$DF"; QL="$SDIR/$QFILE"; BN=`basename "$DF"`
[ -z "`cat "$QL" | $EXSD -n '/'''$BN'''/p'`" ] && echo "$QF" >> "$QL"
return 0
fi
if [ -n "`echo """$DF""" | $EXSD -n '/data.hu/p'`" ];then
DF=`$EXWG -q -O - "$DF" | $EXSD -n '/download_it/{s/.*href=.\([^\"]*\)\".*/\1/p}'`
fi
if [ -n "$SPID" ]; then
SHID=`$EXPS -o pid,ppid ax | $EXSD -n 's/[^0-9]*\([0-9][0-9]*\) [ ]*'$SPID'.*/\1/p'`
for P in $SHID ;do eval "PID$P='1'"; done # create PID array
[ -n "$UN" ] && [ -n "$UP" ] && UNUP="--user=$UN --password=$UP"
$EXSC -S $SRNAME -p 0 -X screen $EXWG --limit-rate="$DS"k $UNUP -c "$DF"
sleep 1
SHID=`$EXPS -o pid,ppid ax | $EXSD -n 's/[^0-9]*\([0-9][0-9]*\) [ ]*'$SPID'.*/\1/p'`
for P in $SHID ;do
eval TV='"$'"PID$P"'"' # PID not in PID array is new PID
if [ "$TV" = "" ] ;then $EXSC -S $SRNAME -p wget -X title "PID$P"
break; fi
done
fi
}
_cancel () {
BN=`basename "$DF"`; BN=`echo "$BN" | $EXSD 's/.html$//'`
SDIR=`dirname $0`; QL="$SDIR/$QFILE"
cat "$QL" | $EXSD '/'''$BN'''/d' > "$QL"
PD=`$EXPS -o pid,cmd ax | $EXSD -n '/[ ]*\([0-9][0-9]*\).*'''$BN'''$/\
{s/\([0-9][0-9]*\).*/\1/p;q}'`
if [ -n "$PD" ];then
PP=`$EXPS -o pid,ppid ax | $EXSD -n 's/[ ]*'''$PD'''[ ]*\([0-9]\)/\1/p'`
PSH=`$EXPS -p "$PP" | $EXSD -n '/rget.sh/p'`
[ -n "$PSH" ] && kill "$PP"
kill "$PD"
fi
}
_access () {
cat << __EOF__
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response><all>
__EOF__
SHID=`_getspids`
echo "<pids>Screen child pid(s): $SHID</pids>"
for P in $SHID ;do
`$EXSC -S $SRNAME -p PID$P -X hardcopy $SCDP`
SD=`$EXSD -n ':a;/^--[0-9]\{4,4\}-.*/!{n;ba;};:b;h;:c;n; ${H;x;s/.*Length: \([0-9]*\).*Saving\
to: .\(.*\).\n\n[ ]*\([0-9]*%\).*]\( .*\)/\2 \1 \3\4/p};/^--[0-9]\{4,4\}-.*/bb;H;bc' $SCDP`
if [ -z "$SD" ]; then
RS=`$EXSD -n ':a;/^[-]\{20,\}.*/!{n;ba;};:b;h;:c;n; ${H;x;s/.* \(http:[^ ]*\)\
\nId.* \([0-9][0-9]*\/[0-9][0-9]*\).*/\1 \2/p};/^[-]\{20,\}.*/bb;H;bc' $SCDP`
if [ -n "$RS" ];then
echo "<wait>$RS</wait>"
else
RS=`cat $SCDP`; echo "<rawsc>$RS</rawsc>"
fi
else
for F in $SD ;do FI=$F; break; done
FI=`basename "$FI"`
FL="$FL $FI"
echo "<active>$SD</active>"
fi
done
find $BASE -type f -printf "%f %s\n" | $EXSD '/^wget-log.*/d' | while read FILE
do
FF="0"; for F in $FILE ;do FI=$F; break; done
for F in $FL ;do
if [ "$F" = "$FI" ] ;then FF="1" break; fi
done
[ "$FF" != "1" ] && echo "<inactive>$FILE </inactive>"
done
cat $QFILE | while read FILE
do echo "<queued>$FILE</queued>"; done
cat << __EOF__
</all></response>
__EOF__
}
_header () {
cat << __EOF__
Content-type: text/html
<html> <head> <title>swget</title>
<script type="text/javascript">
<!--
var cgi = "swget.cgi"
var xmlhttp = createXmlHttpRequestObject();
var chkserver = 0; msTicks = 0;
function createXmlHttpRequestObject() {
var xmlHttp;
try { xmlHttp = new XMLHttpRequest(); }
catch(e) {
var XmlHttpV = new Array("MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.5.0",
"MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0");
for (var i=0; i<XmlHttpV.length && !xmlHttp; i++) {
try { xmlHttp = new ActiveXObject(XmlHttpV[i]); }
catch (e) {}
}
}
if (!xmlHttp) alert("Error creating the XMLHttpRequest object.");
else return xmlHttp;
} // createXmlHttpRequestObject
function addRowa(obj, cn, arr, id) {
var row = obj.insertRow(-1); row.id = id; row.className = cn;
for (var i=0; i<arr.length ; i++) {
cell = row.insertCell(-1); cell.className = cn + i;
cell.appendChild(document.createTextNode(arr[i]));
}
}
function rBytes(bytes) {
var s = ['bytes', 'kb', 'MB', 'GB', 'TB', 'PB'];
var e = Math.floor(Math.log(bytes)/Math.log(1024));
return (bytes/Math.pow(1024, Math.floor(e))).toFixed(2)+" "+s[e];
}
function rfrListArr(xmlRoot, state, obj) {
var item, dp, darr, eta;
arr = xmlRoot.getElementsByTagName(state);
for(i=0;i<arr.length && arr.item(i).firstChild;i++) {
item = arr.item(i).firstChild.data; item = item.replace(/\n+/g,"");
item = item.replace(/\s+/g," "); dp = item.split(" ");
if(state == "inactive") {
darr = new Array(dp[0], "-", rBytes(dp[1]), "-","Inactive","-");
} else if (state == "queued") {
darr = new Array(dp[0], "-", "-", "-","Queued","-");
} else if (state == "wait") {
darr = new Array(dp[0], "-", "-", "-",dp[1]+"s","-");
} else if (state == "active") {
if (dp.length == 8) eta = dp[6]+" "+dp[7];
else if (dp.length == 7) eta = dp[6]; dp[1] = rBytes(dp[1]);
if (dp[2] == "100%")
darr = new Array(dp[0], dp[2], dp[3], dp[4], "Completed", dp[1]);
else
darr = new Array(dp[0], dp[2], dp[3], dp[4], eta, dp[1]);
}
addRowa(obj,'td', darr, darr[0]);
}
}
function dTable(table){ // first line is header
for(i=table.rows.length-1; i > 0; i--) table.deleteRow(i);
}
function rfrList(xmlResp, xmlRespT) {
if (!xmlResp || !(xmlRoot=xmlResp.documentElement)) {
if(window.ActiveXObject && (xml = new ActiveXObject("Msxml2.DOMDocument"))) {
xml.loadXML( xmlRespT ); xmlRoot = xml.documentElement;
}
else return;
}
if (!xmlRoot) return;
obj = document.getElementById("list"); dTable (obj);
rfrListArr(xmlRoot, "inactive", obj);
rfrListArr(xmlRoot, "queued", obj);
rfrListArr(xmlRoot, "active", obj);
rfrListArr(xmlRoot, "wait", obj);
}
function makeRequest(serverPage, objID) {
var obj = document.getElementById(objID);
var d = new Date(); msTicks = d.getTime();
xmlhttp.open("GET", serverPage+'&NoCache='+msTicks);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
rfrList(xmlhttp.responseXML, xmlhttp.responseText);
}
}
try { xmlhttp.send(null); } catch (e) {}
} // makeRequest
function startCheckDL() {
setBtStl("sp", "disabled", "ad");
document.getElementById('queue').checked=true;
var obj = document.getElementById("list");
addRowa(obj,'th', new Array("Name", "Done", "DL Size", "DL Speed", "ETA", "Size"),"test" );
rfrDL();
}
function startDL(sA, arg) {
var d = new Date(); var QE=''; var UP='';
var obj = document.getElementById("sStatus");
var dfn = document.getElementById(arg).value;
var dls = document.getElementById('dls').value;
var que = document.getElementById('queue').checked;
var unm = document.getElementById('unm').value;
var ups = document.getElementById('ups').value;
if (dfn != '') {
if (que) QE='&QE=true';
if( unm != '' && ups != '' ) UP='&UN='+unm+'&UP='+ups;
document.getElementById(arg).value = '';
makeRequest(cgi+'?ACTION='+sA+'&DF='+dfn+'&DS='+dls+QE+UP, "sStatus");
}
}
function cancelDL(dfci) {
var dfc = document.getElementById(dfci).value;
document.getElementById(dfci).value = '';
makeRequest(cgi+'?ACTION=cancel'+'&DF='+ dfc, "sStatus");
}
function rfrDL() {
makeRequest(cgi+'?ACTION=access', "sStatus");
}
function setBtStl(name, d, c) {
sto = document.getElementById(name); sto.disabled=d; sto.className=c;
}
function chkDL(tp) {
if (tp == 'st') {
setBtStl("st", "disabled", "ad"); setBtStl("sp", "", "ac");
rfrDL(); // non round to avoid periodic collision
chkserver=setInterval("rfrDL()", 6130);
} else {
setBtStl("sp", "disabled", "ad"); setBtStl("st", "", "ac");
clearInterval(chkserver);
}
}
-->
</script>
<style type="text/css">
body { padding:0; margin:15; width: auto; color: ForestGreen; font-family:sans-serif; font-weight:bold; font-size:16px; }
input { padding:3px 7px; margin:2 3 2 3; color:White; font-family:tahoma;
font-size:20px; font-weight:bold; background-color:Gray; }
.dfn, .ds, .us {border: Indigo 2px solid; background-color:white; color:black}
.dfn {width: 650px} .ds {width: 70px} .us {width: 180px}
.df, .ac, .ad {border: DimGray 2px solid} .df {background-color:DarkSlateBlue}
.ac {background-color:ForestGreen} .ad {background-color:SlateGray}
td { text-align: left; background-color: LightGrey; color: black }
td.td0 { width: 510px } td.td1 { width: 55px } td.td2 { width: 120px }
td.td3 { width: 90px } td.td4 { width: 90px } td.td5 { width: 85px }
td.td1, td.td2, td.td3, td.td4, td.td5 { text-align: right }
td.th0 {text-align: left}
td.th1, td.th2, td.th3, td.th4, td.th5 { text-align: right }
td.th0, td.th1, td.th2, td.th3, td.th4, td.th5 {
background-color: CornflowerBlue; color: white }
table.list { border: blue 3px solid; width: 1000px; }
p { padding:0px; margin:12px; font-size:24px; color:Green; width: 1000px; }
</style></head>
<body onload="startCheckDL();">
<p>SWGET: WebUI enhanced wget based downloader</p>
<input type="button" class="df" id="df" value="download" onClick="startDL('download', 'dfn');"/>\
<input type="text" class="dfn" id="dfn"> max <input type="text" class="ds" value="20" id="dls">K/s<br>
HTTP/FTP User name:<input type="text" class="us" id="unm">
Password:<input type="password" class="us" id="ups">
Queue download<input type="checkbox" id="queue" value=""/>
<br><br><input type="button" class="df" id="dc" value="cancelDL" onClick="cancelDL('dfc');"/>\
<input type="text" class="dfn" id="dfc"><br><ht>Monitoring</ht>
<input type="button" class="ac" id="st" value="start" onClick="chkDL('st');"/>
<input type="button" class="ac" id="sp" value="stop" onClick="chkDL('sp');"/>
<table class="list" id="list" border="0"> <table>
<br><br> <div id="sStatus"></div>
__EOF__
}
_footer () {
cat << __EOF__
</body> </html>
__EOF__
}
query_string=`echo "$QUERY_STRING" | $EXSD 's/&/;/g'`
eval ${query_string}
case "${ACTION}" in
download) _download ;;
cancel) _cancel ;;
access) _access ;;
*) _header ; _footer ;;
esac### RT-N16, WL-500 Oleg optware script ami majdnem mindent feltesz ### ===========> http://wl500g.info/showthread.php?t=23684 <===========
Új hozzászólás Aktív témák
● Olvasd el az összefoglalót!
- Dell Latitude 7490,14",FHD,i5-8350U,16GB DDR4,256GB SSD,WIN10,TOUCH
- HP EliteBook 645 G10 (817M3EA) - ÚJ 14" üzleti notebook - Ryzen 5 PRO, W11 pro, WWAN
- 3 db ICERIVER KAS KS0 PRO
- DOBOZOS MSI Raider GE76: i7 12700H,32GB DDR5,1TB,17.3" QHD 240Hz 400nit 100%sRGB,RTX 3070Ti 8GB 150W
- Asus Tuf Dash 15 i7 11370H/16Gb/512Gb/RTX3060
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Promenade Publishing House Kft.
Város: Budapest