Rewired 2.0 – RwData
Az RWMedia backend resze volt, de tok hasznos adathorodozo/loggolo szerszam, igy kulon modulkent szedtem.
Funkcioja kifejezetten fejlesztes centrikus. Adatokat tarolni es tetszoleges log informaciokat, mindezt egyetlen objektumban ami funkciokrol-funkciokra kuldozheto es a vegen kimutathato vagy egyeb modon kezelheto. Tovabba az egesz objektum konnyen konvertalhato JSON formaba, igy HTTP request-eken a neten keresztul is elkuldheto, majd miutan visszaerkezett, kombinalhato az eredeti valtozattal, igy vegul egyben kimutathato az osszes osszegyujtott log informacioval, idorendi sorrendben. Hasznos tud lenni ha pl aszinkronos request-eket akarunk lekovetni es logolni.
Mivel JSON formatumba konvertalhato, JSON formaba konnyen ki is mutathato a weboldalon, igy konnyu a fejleszonek atnezni minden adatot is benne.
Letoltes:
https://www.rewired.hu/sites/default/files/development/rwdata.zip
Telepiteshez lepesek:
1) Valamilyen PHP kodot es MySQL-t mukodteto rendszer, pl en XAMPP-ot hasznalok.
2) Sima Drupal 7.x telepites
3) Be kell masolni a kicsomagolt “rwdata” direktorium tartalmat a “{DrupalTelepites}/sites/all/modules” direktorium ala.
4) Drupalban bekapcsolni a “RwData“ modult. (menusor: modules->rwdata bekapcs)
5) Drupalban resetalni a cache-t, hogy aktivizalja magat a friss kod (menusor: configuration->performance->clear all cache gomb)
6) Keszen vagy.
Hasznalati elve, hogy meghivjuk az objektumot:
$obj = new \RWData();
Elozoleg ha van elokeszitett adatunk, akkor hivassal rogton beletehetjuk:
$input = [
'data1' => 'data1'
'log' => [],
'nesting' => 0,
];
$obj = new \RWData($input);
Ha logolni szeretnenk valamit, akkor csak hivni kell az objektumot es hozzadni:
$obj->log('tetszoleges log szoveg');
Hozzaadhatunk a logszoveg melle adatokat is ha vesszovel elvalasztva irjuk az adott log-vonalban pl:
$obj->log('tetszoleges log szoveg', $tetszolegesAdat);
Az adat fentebb lehet Array szintugy, igy tetszoleges mennyisegu informacio tarolhato itt.
A log-szoveg microszekundum szerint sorolodik mindig, igy pl pontosan lekovetheto hogy mikor hajtodott vegre es melyik parancs.
Kinyerni az osszes log informaciot az objektumbol az $obj->get('log') funkcioval tudjuk.
Ahogy fentebb mar emlitettem, egyeb tetszoleges adatokat is tarolhatunk az objektumon a $obj->set('tetszolegesNev', 'tetszolegesAdat') formatumban.
Ezeket teszolegesen kinyerni az $obj->get('tetszolegesNev') funkcioval tudjuk, hasonloan mint pl a 'log'-ot is.
A 'log'-on felul alapertelmezett valtozo az RWData-ban a 'nesting' is. A nesting meghatarozza hogy melyik szinten/melysegnek mutatodjon vizualisan ki az adott log szoveg. Ez hasznos tud lenni, ha 5-6 kulonbozo szintu HTTP request hivasbol akarjuk osszekombinalni a logokat, majd azt kimutatni, igy vizualisan konnyen meg tudjuk kulonboztetni hogy melyik mibol van. A nesting szam tetszolegesen valtoztathato, igy pl minden rekurziv hivasnal, vagy kulso HTTP hivasnal emelhetunk rajta. A lentebbi peldaval ez majd erthetobb lesz.
Osszekombinalni ket kulonbozo RWData objektum log informaciot a merge funcioval tudunk, tipikusan $obj1->merge($obj2) formaban, peldaul:
$inp1 = [
'nesing' => 0,
'data1' => 'data1',
'log' => ['000123 valami log info'],
];
$obj1 = new \RWData($inp1);
$inp2 = [
'nesing' => 1,
'log' => ['() 000456 masik log info'],
];
$obj2 = new \RWData($inp2);
$obj1->merge($obj2);
$obj1 log kimutatas akkor ez lesz:
[
'000123 valami log info',
'() 000456 masik log info'
]
Ha lenne egy harmadik objektum is, pl nesting lvl 4-el, akkor mind osszekombinalva igy nezne ki:
[
'000123 valami log info',
'() 000456 masik log info',
'() () () () 000789 harmadik log info'
]
Az RWMedia Backend pl nagyon aktivan hasznalja ezt a modult a szinkronos es aszinkronos logolasnal, adatbazisba irasnal, es vegso log kimutatasnal. Annak a topikjaban lathatjatok vizualisan is hogy mikent funckonal es hogyan is nez ki elesben.