Ú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.sh

    Termé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