• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    ANGEL333node.js - Evented I/O for V8 JavaScript
    KOC256
    KOC256 --- ---
    Myslím, že je problém, tu:
    Unexpected platform or architecture: linux/arm

    Ale našel jsem jen verzi pro PÍčku a ta mi nefungovala...
    KOC256
    KOC256 --- ---
    MARYO:
    Už jsem to zkoušel dříve a tedy výpis chyby...

    
    admin@NAS:/volume1/web/node$ npm install phantomjs-prebuilt -g
    npm WARN checkPermissions Missing write access to /volume1/@appstore/Node.js_v8/usr/local/lib/node_modules
    npm ERR! path /volume1/@appstore/Node.js_v8/usr/local/lib/node_modules
    npm ERR! code EACCES
    npm ERR! errno -13
    npm ERR! syscall access
    npm ERR! Error: EACCES: permission denied, access '/volume1/@appstore/Node.js_v8/usr/local/lib/node_modules'
    npm ERR!  { Error: EACCES: permission denied, access '/volume1/@appstore/Node.js_v8/usr/local/lib/node_modules'
    npm ERR!   stack: 'Error: EACCES: permission denied, access \'/volume1/@appstore/Node.js_v8/usr/local/lib/node_modules\'',
    npm ERR!   errno: -13,
    npm ERR!   code: 'EACCES',
    npm ERR!   syscall: 'access',
    npm ERR!   path: '/volume1/@appstore/Node.js_v8/usr/local/lib/node_modules' }
    npm ERR!
    npm ERR! Please try running this command again as root/Administrator.
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /var/services/homes/admin/.npm/_logs/2018-02-06T08_13_18_993Z-debug.log
    admin@NAS:/volume1/web/node$ sudo npm install phantomjs-prebuilt -g
    Password:
    /volume1/@appstore/Node.js_v8/usr/local/bin/phantomjs -> /volume1/@appstore/Node.js_v8/usr/local/lib/node_modules/phantomjs-prebuilt/bin/phantomjs
    
    > phantomjs-prebuilt@2.1.16 install /volume1/@appstore/Node.js_v8/usr/local/lib/node_modules/phantomjs-prebuilt
    > node install.js
    
    PhantomJS not found on PATH
    Unexpected platform or architecture: linux/arm
    It seems there is no binary available for your platform/architecture
    Try to install PhantomJS globally
    npm ERR! code ELIFECYCLE
    npm ERR! errno 1
    npm ERR! phantomjs-prebuilt@2.1.16 install: `node install.js`
    npm ERR! Exit status 1
    npm ERR!
    npm ERR! Failed at the phantomjs-prebuilt@2.1.16 install script.
    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /root/.npm/_logs/2018-02-06T08_14_29_381Z-debug.log
    admin@NAS:/volume1/web/node$
    
    KOC256
    KOC256 --- ---
    MARYO: zkusim jeste ale i ten prebuilt mi hazel nejake chyby.
    MARYO
    MARYO --- ---
    Prerequisites
    Node.js >= 0.8
    PhantomJS >= 1.9
    CasperJS >= 1.0

    npm install phantomjs-prebuilt
    npm install casperjs

    pripadne

    npm install phantomjs-prebuilt -g
    npm install casperjs -g
    KOC256
    KOC256 --- ---
    Zacal jsem si hrat s phantomjs a casperjs na lokale (windows). Chtel bych to dostat na server do prostredi webu a tak jsem si na Synology NAS nahral NODE.JS v8.

    Pak pres SSH
    npm init -y
    npm install express spookyjs

    Hello world! priklad z https://www.npmjs.com/package/express mi funguje. (node server.js)

    Ale pokud zkusim spustit priklad ze spookyho https://github.com/SpookyJS/SpookyJS/blob/master/examples/hello.js
    jako: node hello.js
    Tak dostanu chybu:
    
    admin@NAS:/volume1/web/node$ node hello.js
    events.js:182
          throw er; // Unhandled 'error' event
          ^
    
    Error: spawn casperjs ENOENT
        at exports._errnoException (util.js:1024:11)
        at Process.ChildProcess._handle.onexit (internal/child_process.js:192:19)
        at onErrorNT (internal/child_process.js:374:16)
        at _combinedTickCallback (internal/process/next_tick.js:138:11)
        at process._tickCallback (internal/process/next_tick.js:180:9)
        at Function.Module.runMain (module.js:607:11)
        at startup (bootstrap_node.js:158:16)
        at bootstrap_node.js:575:3
    admin@NAS:/volume1/web/node$
    


    Pokud si spookyho hodim do expressu, tak opet chyby...
    Na netu neco k tomu pisou ale nenasel jsem / nepochopil jsem co konkretne bych mel udelat. Rady jako restart pripadne npm install npm update vyzkouseny --> nic...

    Nejaky napad?
    FEDY
    FEDY --- ---
    ahoj, zase to zkusim, ve vire, ze si snad zachvili sam odpovim ... :-)

    stale stejny projekt - mereni SNMP. grafy uz funguji, jsou supr, jen jsem na nich odhalil, jak mi to blbe funguje ...

    pouzivam knihovnu net-snmp ( https://www.npmjs.com/package/net-snmp ) , generuju tisice requestu /s a chodi mi nazpet jen cast odpovedi. resp. na sitovku prijdou vsechny (vidim v nachytanem provozu ve wiresharku), ale uz zrejmne nejak nedorazi zpet do socketu. countery netstat -s "24392304 packets to unknown port received" docela dost naskakuji , coz bude jiste ona pricina. packety se vraci na port, ze ktereho sel request, ale zrejmne nektere nedorazi. tipuju, ze uz muze byt socket zavreny, ale je to takova rychlost, ze nevim jak to spravne hledat. vsechny mozne tweaky kernelu jsem zkousel (bezi to na linuxu)
    sysctl net.ipv4.ip_local_port_range="10000 61000"
    sysctl net.core.somaxconn=32768
    sysctl net.core.netdev_max_backlog=10000
    sysctl net.core.rmem_default=8388608
    sysctl net.core.wmem_default=8388608
    sysctl net.core.rmem_max=26214400
    sysctl net.core.wmem_max=26214400

    sitovka ma 0 erroru (musi , kdyz pozadovane odpovedi tcpdumpem chytim) , netstat counter vsak stale naskakuje. timeout pro SNMP mam v radech sekund, ve wiresharku vidim, ze odpoved prichazi nazpet po 200ms, ale zrejme je socket uz zavreny. nestalo se vam nekomu neco podobneho ?

    pripadne predem dik.
    FEDY
    FEDY --- ---
    FEDY: tohle auditko je supr ... pokazdy kdyz nevim, napisu sem, abych na to vzapeti prisel ... tentokrat se mazat nebudu a podelim se (treba to nekomu k necemu bude).

    reseni je jen v pridani * na konec coninuous query :-)

    CREATE CONTINUOUS QUERY cq_1day ON projectdb_2 BEGIN SELECT mean(rx) AS rx,mean(tx) AS tx INTO interface_1d FROM interface_4h GROUP BY time(5m),* END
    FEDY
    FEDY --- ---
    ahoj,

    nejni to primo nodejs, ale castecne to souvisi a asi nejni uplne kde jinde se na NYXyu ptat, tak to zkusim -

    zacal jsem , resp. snazim se zacit pouzivat InfluxDB na ukladani grafu. data ulozit a precist nejni problem, ovsem (logicky) potrebuju provadet downsampling starsich dat, od cehoz je v influx Retention Policy a Continuous query. to by take nebyl problem, ovsem nefunguje to presne jak bych rad aby to fungovalo nebo jsem si zvolil spatnou strukturu dat

    merim pomoci SNMP provoz na mnoha interfacech mnoha switchu (RX/TX Mbps, popr. posleze take pps). pozdeji to mohou byt take napr. mikrovlnne spoje (viz. typ signal, modulation) mam schema

    measurement: 'interface_4h',
    fields: {
    rx: Influx.FieldType.FLOAT,
    tx: Influx.FieldType.FLOAT
    },
    tags: [
    'type', // bandwidth, pps, signal, modulation
    'units', // mbps, gbps, pps, kpps, mpps, dbm, qam,
    'objectID' // ID of the interface
    ]

    ...pomoci objectID identifikuju zarizeni, tzn. ze v interface_4h jsou vsechny merene interfacy (tisice ks) a rozdeleny prave podle objectID. podle type je receno, zda jde o mereni bandwidth, packet per second, signal radia, modulace radia atp. units asi nejni potreba popisovat... tabulka (resp. measurement) se jmenuje _4h , protoze ma ukladat data za posledni 4 hodiny bez downsamplingu. z teto tabulky se ma pomoci continuous query vyrabet tabulka _1d , _30d, _1y (asi netreba vice popisovat) a v techto tabulkach stale opet potrebuju mit zachovany vsehny tagy (tzn. vsechny interfacy)

    CREATE CONTINUOUS QUERY cq_1day ON projectdb_2 BEGIN SELECT mean(rx) AS rx,mean(tx) AS tx INTO interface_1d FROM interface_4h GROUP BY time(5m) END

    ...mi udela prumer ze vsech interfacu v interface_4h a vypadne jen jedno zprumerovane rx + tx , namisto kyzenych tisicu "paru rx+tx". a je to tedy navic take bez tagu, ale to uz je celkem jedno, kdyz se sloucila vsechna data dohromady...

    otazka zni - je nutne delat na kazde mereni zvlast jednu continuous query ? (v mem pripade tisice ks) nelze to zaridit jednou query na celou tabulku ? (tim myslim jen jeden krok, napr. z 4hod na 1den )
    FEDY
    FEDY --- ---
    FIKOTEK: nebo nejdrive navazat spojeni z pocitace treba websocketem a do socketu to pak posilat
    CUCHULAIN
    CUCHULAIN --- ---
    FIKOTEK: nasadit nějaký dynamický DNS na ten cílový počítač?
    FIKOTEK
    FIKOTEK --- ---
    Potrbuju odeslat http request na pocitac ktery neni ve stejne siti jako pocitac ze ktereho ten request posilam. Ten pocitac na ktery bych rad poslal ten request je za routrem ktery mu prideluje pres DHCP nejakou IP adresu. Tusite jak tohle vyresit?
    GIOMIKY
    GIOMIKY --- ---
    DARKIE: Díky za tip s SVG.
    DARKIE
    DARKIE --- ---
    GIOMIKY: kvoli comu potrebujes obrazok?
    pokial kvoli tomu aby si mel predkresleny graf uz z nejakych hodnot, a potom donho on the fly dokresloval, tak mas principialne dve moznosti.
    1. na serveri si nakreslit obrazok ako tu uz kalicor povedal tam to moc s canvasom nepojde, asi pouzit nieco ine. nacitat si obrazok a vkreslit ho do canvasu a potom canvas prekreslovat.
    2. imho lepsia vec na toto, pouzit SVG, SVG je super v tom ze je to viacmenej DOM, takze ho vies "kreslit" aj na serveri tym ze si vyrobis ten string, na clientovi vies do SVG cez DOM metody pristupovat a menit ho. Toto samozrejme vsak iba vtedy ak mas v HTML embednute cele SVG a nemas ho tam referencovane cez img src=nieco.svg
    KALICOR
    KALICOR --- ---
    GIOMIKY: zkousim pochopit otazku:
    - chces generovat ten graf na klientovi? (posles JSON ajax/websocket, canvas jeto) anebo ciste server side?
    - na to prvni mi nesedi ten gif - dovedu si predstavit ze vygeneruji graf na canvas udelam PNG data a ty soupnu do img src, popr. poslu na server ...
    - to druhe - jelikoz bych se s tim asi nechtel moc crmcat - bych asi pouzil a PhantomJS nebo tak neco - pouzivali jsme to na generovani custom nahledu map ke vsi spokojenosti, ALE z hlediska service apod. by byla spravnejsi cesta mit k NodeJS knihovnu ktera bude generovat GIF/PNG/anything, tu se ale rozluc s CANVAS - server side neni browser - zadny getContext2D/3D pokud vim. i kdyz ve svete Javascrptu si clovek neni nikdy jistej co soudruzi vymysleli :D
    GIOMIKY
    GIOMIKY --- ---
    Dotaz (doufam, ze do spravneho klubu) ... mam html canvas ... a generuji na nej nejake grafy (viz. obrazek)... a chtel bych, aby se mi v prohlizeci zobrazil pouze obrazek... ale aby to bylo tak, ze uz se do prohlizece nacte primo obrazek... uz jsem zkousel takovy ty legrace s tim, ze si prepisu nahrany html gifem, ktery se objevi, kdyz vygeneruji blob. .. ale neni to ono... lze to nejak (mozna mi unika podstata) ... a to ta, ze javascript se provadi na klientovi a ja bych to chtel asi generovat na serveru.. je to tak? Da se nejak generovat gif z canvasu primo v node.js?

    DARKIE
    DARKIE --- ---
    REFLEX: ja len ze je imho trochu semanticky nespravne aby this vnutri objektu runner ukazovalo na nieco ine ako runner

    ak chces vramci runnera bezat nieco z myobjectu tak by som to zapisal takto

    this.runner.run(this.another_function.bind(this));

    samozrejme si potrebujes naprototypovat v myobject another_function a nie pouzivat anonymous funkciu.

    takto sa nestratis ked budes v buducnosti ten kod ty alebo niekto iny citat
    UETOYO
    UETOYO --- ---
    GitHub - facebook/prepack: Prepack is a partial evaluator for JavaScript. Prepack rewrites a JavaScript bundle, resulting in JavaScript code that executes more efficiently.
    https://github.com/facebook/prepack
    FEDY
    FEDY --- ---
    AREX: to je to co jsem prave napsal - jen 1x "worker_mysql: sending to main process" a nekolikrat "mod_subnets: received from SQL worker". bude to moje chyba asi ve zpracovani tech eventu ale nevim jaka
    AREX
    AREX --- ---
    FEDY: Tohle uz asi uplne nesouvisi s NodeJS :) S workery nemam zkusenosti, takze neporadim snad jen krome toho dat si logovani i tam kde to posilas jestli to opravdu je jenom jednou.
    FEDY
    FEDY --- ---
    AREX: tak jsem dosel k tomu, ze to dela ta mapa (visjs) - stale jsem nevypnul fyziku a dokud se body neustali, tak to pocita jako vztekle. jakmile zazoomuju tak aby byly videt 2-3 body (asi to nejni tolik vytizene), violations zmizi ...

    ale, mam jeste jeden dotaz - v nodejs si vytvarim child procesy forkem. napr. pro mysql operace, aby mi to nezdrzovalo hlavni proces. doposud vse ok - select, insert, update, retez nekolika udalosti select a potom insert / update - vse ok. ale nyni jsem narazil - child process mi v logu pise, ze odesila data do hlavniho procesu (jednou) a hlavni proces zarve, ze data obdrzel nekolikrat - tedy jakoby se on event volal vicekrat (?) nedelam nejakou zasadni blbost ? nebo to delam cele spatne ?

    worker_mysql: Found 1 subnet in MYSQL.
    worker_mysql: sending to main process {"err":false,"sqlAction":"select","sqlTable":"subnet","rows":[{"id_subnet":1,"prefixSize":24,"network":"10.133.36.0","purpose":0,"id_node":-1}]}
    ^^^
    child process hlasi 1x odeslani

    ....ale hlavni proces nekolikrat prijeti....

    mod_subnets: received from SQL worker {"err":false,"sqlAction":"select","sqlTable":"subnet","rows":[{"id_subnet":1,"prefixSize":24,"network":"10.133.36.0","purpose":0,"id_node":-1}]}
    mod_subnets: subnet 10.133.36.0 exists in database
    mod_subnets: received from SQL worker {"err":false,"sqlAction":"select","sqlTable":"subnet","rows":[{"id_subnet":1,"prefixSize":24,"network":"10.133.36.0","purpose":0,"id_node":-1}]}
    mod_subnets: subnet 10.133.36.0 exists in database
    mod_subnets: received from SQL worker {"err":false,"sqlAction":"select","sqlTable":"subnet","rows":[{"id_subnet":1,"prefixSize":24,"network":"10.133.36.0","purpose":0,"id_node":-1}]}
    mod_subnets: subnet 10.133.36.0 exists in database
    mod_subnets: received from SQL worker {"err":false,"sqlAction":"select","sqlTable":"subnet","rows":[{"id_subnet":1,"prefixSize":24,"network":"10.133.36.0","purpose":0,"id_node":-1}]}
    mod_subnets: subnet 10.133.36.0 exists in database


    hlavni proces vola child takto
                    global.sql.worker.send(request);
                    global.sql.worker.once('message', function(resp) {
                        console.log(_Fname+': received from SQL worker '+JSON.stringify(resp));
                        if (resp.err == false && resp.sqlTable == 'subnet' && resp.sqlAction == 'select') {
                            if (resp.rows.length === 0) {
                                console.log(_Fname+': subnet does not exist in database');
                                var insertRequest = [{sqlAction: 'insert', sqlTable: 'subnet', network: subnet.networkAddress, prefixSize: subnet.subnetMaskLength,  purpose: purpose, id_node: router }];
                                global.sql.worker.send(insertRequest);
                                return
                            } else {
                                console.log(_Fname+': subnet '+resp.rows[0].network+' exists in database');
                                return
                            }
                        }
                    });
                    global.sql.worker.once('message', function(resp) {
                        if (resp.err == false && resp.sqlTable == 'subnet' && resp.sqlAction == 'insert') {
                            console.log(_Fname+': subnet inserted with ID '+resp.insertId);
                            return
                        }
                    });
    

    --------------------------------------------------

    a child odpovida takto
    process.on('message', function(data) {
        console.log('worker_mysql: rececived data '+JSON.stringify(data));
        var table = data[0].sqlTable;
        var action = data[0].sqlAction;
        delete data[0].sqlTable;
        delete data[0].sqlAction;
    
        switch(action) {
    
            case "select":
    
                select(table,data,function(err,table,rows) {
                    if (err) {
                        var result = { err: true, sqlAction: action, sqlTable: table, rows: null };
                    } else {
                        var result = { err: false, sqlAction: action, sqlTable: table, rows: rows };
                    }
                    console.log('worker_mysql: sending to main process '+JSON.stringify(result)+'');
                    process.send(result);
                    return
                });
            break;
    
            case "insert":
    
                insert(table,data,function(err,insertId,dataOut) {
                    if (err) {
                        var result = { err: true, sqlAction: action, sqlTable: table, insertId: null, object: null };
                    } else {
                        var result = { err: false, sqlAction: action, sqlTable: table, insertId: insertId, object: dataOut };
                    }
                    console.log('worker_mysql: sending to main process '+JSON.stringify(result)+'');
                    process.send(result);
                    return
                });
    
            break;
    
            case "update":
    
            break;
            default:
    
            break;
    
        } 
    


    nevim proc, ale NYX nejak zkomolil ten zdrojak :-) snad tomu je rozumnet...
    Kliknutím sem můžete změnit nastavení reklam