Zk 26.5. 2006

Uživatelský avatar
Tacoud
Donátor
Donátor
Příspěvky: 53
Registrován: 16. 9. 2005 08:38
Typ studia: Informatika Bc.
Bydliště: Mladá Boleslav
Kontaktovat uživatele:

Zk 26.5. 2006

Příspěvek od Tacoud »

Dnešní program se jmenoval UTMPSTAT

Jde o program, který produkuje statistiky o logování uživatelů na terminály.

Máme soubor, ve kterém jsou binárně uložená data o logování uživatelů. Jméno tohoto souboru je uložené v proměnné UTMP. Protože práce s binárním souborem je obtížná, máme k dispozici program extract, který dokáže převézt bin. data na textová.
Program extract vezme jako první parametr jméno bin. souboru, druhý parametr je jméno text. souboru, kam se ten binární přeloží (nebo může extract fungovat tak, že se mu na std. vstup pošle bin. soubor a vystupem je text - to jsme si mohli zvolit).
V přeloženém souboru je potom na každé řádce informace o tom, kdy se který uživatel uživatel kam zalogoval. Formát přeloženého souboru:
tty(terminál):user:datum a čas (formát data a časujsme si opět mohli zvolit sami).
Řádek, který obsahuje všechny tři informace znamená, že se daný uživatel zalogoval. Řádek, který neobsahuje jméno uživatele znamená, že se uživatel, který byl na daném terminálu odlogoval. Řádek, který má místo terminálu vlnku znamená, že celá mašina havarovala (shutdown) a tedy všichni uživatelé se odlogovali.

Cílem bylo napsat program utmpstat, který pracuje ve třech režimech:

1. utmpstat -x
Program "občerství" binární soubor, aby zůstal prázdný. Vezme bin. data, přeloží je do textové podoby a někam si je uloží. Pokud přijde na to, že nastaly nějaké problémy, ohlásí je správci. Vždy se pošle max. jedna zpráva na jedno spuštění utmpstat -x a to jen pokud nastaly problémy.
Problémem může být třeba to, že nějaký uživatel se nalogoval na terminál, který už je obsazený. To znamená, že chybí údaj o odlogování min. uživatele. V tom případě je potřeba dopsat údaj o odlogování tohoto uživatele do těch textových dat.
Jiný problém - v tabulce je údaj o odlogování uživatele, který nebyl zalogovaný. V tom případě se tento záznam ignoruje.

2. utmpstat -u user_spec date_from date_to
Vypíše údaje o uživatelích, kteří byli zalogování v intervalu dní [date_from, date_to]. Parametr user buď regexp nebo wildcard, to jsme si mohli zvolit. Pro tyto uživatele vypíše statistiky o nalogovaném času, tj. počet session (počet přihlášení) a jak dlouho byli celkem zalogovaní. Pokud byl uživatel přihlášený na více terminálů, tak se tyto časy nesčítají.

3. utmpstat -s date_from date_to
Vypíše údaje o vytíženosti stroje. Tj. něco jako

Kód: Vybrat vše

5% času bylo přihlášeno 6 lidí
20% času bylo přihlášeno 0 lidí
30% času bylo přihlášeno 8 lidí
10% času bylo přihlášeno 15 lidí
28% času bylo přihlášeno 9 lidí
7% času bylo přihlášeno 3 lidí
Pokud byl nějaký uživatel zalogovaný na více terminálů, tak se oproti 2. režimu čas sčítá. Počítá se tedy čas na terminálech, bez ohledu na to, kdo tam byl zalogovaný.

Tolik k zadání. Psalo nás to 24, 4 neodevzdali, 3 vyhodil po opravení písemek, pěti lidem to dal bez ptaní, no a my ostatní (12 lidí) si s ním půjdeme popovídat....
[/list]
aja
Matfyz(ák|ačka) level I
Příspěvky: 20
Registrován: 15. 5. 2006 09:02
Typ studia: Informatika Bc.
Kontaktovat uživatele:

Příspěvek od aja »

tak jak jste nakonec dopadli? na co se Forst ptal?
( :roll: bojim bojim :D )
Naposledy upravil(a) aja dne 28. 5. 2006 16:29, celkem upraveno 1 x.
Computers are useless. They can only give you answers. - Pablo Picasso
Calm down -- it's only ones and zeros.
Bug? That's not a bug, that's a feature. -T. John Wendel
Uživatelský avatar
Tacoud
Donátor
Donátor
Příspěvky: 53
Registrován: 16. 9. 2005 08:38
Typ studia: Informatika Bc.
Bydliště: Mladá Boleslav
Kontaktovat uživatele:

Příspěvek od Tacoud »

Kdo se dostal na ústní, tak podle mě neodešel domů s prázdnou.
Rozdávaly se jedničky a dvojky. Forst kouknul na moje řešení, zeptal se, proč jsem dělal tohle takhle, proč tahle věc by se neměla používat a tak. Konkrétně já jsem binární soubor nejdřív přesunul pomocí mv, ale potom jsem dal echo ''> $UTMP . No, to je blbě, protože i když řetězec, který se tam zapisuje, je prázdný, stejně se tam zapíše newline, a ten nadělá v tom binárním souboru docela guláš. Lepší bylo udělat jen to mv, nějak jsem přeslechl, že když soubor uložený v $UTMP chybí, že to nevadí.

Jinak k řešení:
Forst říkal, že tohle jeden z těch těžších příkladů.
Nejprve je potřeba zavolat mv na soubor uložený v $UTMP; mv je atomická akce, soubor se přejmenuje. Potom si na přejmenovaný soubor můžu v klidu volat export a vyexportovaný soubor dále zpracovávat, nehrozí, že bych přišel o nějaká data, která by se měla zapisovat do bin. souboru. Jinými slovy: žádné zámky, stačilo mv.
Ideální bylo zvolit si soubory, do kterých se zálohuje, po jednom dni. Nejvýhodnější bylo pojmenovat soubory YYMMDD (rok,měsíc,den), dny se potom snadno sortují.
V každém takovém souboru je potřeba si nějak pamatovat, kteří uživatelé jsou zalogovaní už z minulého dne (posledního předešlého dne). Já to měl ošetřené tak, že v souboru jsem měl nejdříve tyhle "loginy z minula", potom prázdný řádek a až po něm uživatele, kteří se logovali daný den.

Při zpracování utmpstat -x jsem si pomocí awk a asociativních polí pamatoval, jestli na daném terminálu někdo je nebo není. Tj. když přišel údaj o zalogování, zkontroloval jsem si, jestli v prom. pole[terminal] nic není, pokud ano, znamená to problém a je potřeba připsat problém k mailu, který se bude posílat správci. Podobně se udělá i odlogování a shutdown, při něm se projde pole přes všechny indexy a všichni uživatelé se odlogují.

Další dva módy jsem moc nestihl.
Statistiky pro zadané uživatele by se prováděly tak, že se vezmou odpovídající dny ze zadaného intervalu (proto to trhání po dnech), najdou se vyhovující záznamy a pro každého uživatele se kromě doby a počtu připojení počítá i počet terminálů, ke kterým je zalogovaný. Když potom přijde údaj o odlogování, jenom zmenším počet zalog. terminálů. Opět asi nejlépe v awk.

Statistiky pro všechny uživatele - asi opět nějak podobně. Pole by ale bylo indexované přes počet připojených uživatelů a při změně počtu zalogovaných lidí by se přičítal čas od poslední změny. Nakonec by se spočítaly procenta...
aja
Matfyz(ák|ačka) level I
Příspěvky: 20
Registrován: 15. 5. 2006 09:02
Typ studia: Informatika Bc.
Kontaktovat uživatele:

Příspěvek od aja »

hmmmmmmm......dik :wink:
Computers are useless. They can only give you answers. - Pablo Picasso
Calm down -- it's only ones and zeros.
Bug? That's not a bug, that's a feature. -T. John Wendel
Odpovědět

Zpět na „2005“