AiR - Informatyka 2
Zadanie na laboratorium

Przetwarzanie rejestru ostatnich logowań

Celem zadania jest napisanie programu, który będzie przetwarzał dane o ostatnich logowaniach w systemie oraz wyświetlał statystyki logowań uporządkowane względem adresów, z których logowali się użytkownicy, oraz względem nazwy użytkownika.

Zakres materiału

Tworzenie i operacje na drzewach binarnych, polecenie last

Wykonanie zadania

Program uruchomi polecenie last z odpowiednimi parametrami, głównie -a, patrz man last. (Do testowania programu warto użyć zmniejszonej ilości danych, patrz niżej.) Na podstawie uzyskanych informacji program utworzy rekord zawierający: adres komputera, z którego nastąpiło logowanie, nazwę użytkownika oraz liczbę logowań dla tej kombinacji nazwy użytkownika i adresu komputera, lub, jeśli taki rekord istnieje, program zwiększy licznik logowań. Poszczególne rekordy umieszczane zostaną na drzewie binarnym uporządkowanym według nazwy użytkownika (podstawowy klucz sortowania) i adresu logowania (klucz pomocniczy). Jednocześnie rekord zostanie wprowadzony na drugie drzewo binarne uporządkowane według tych samych dwóch kluczy, ale w odwrotnej kolejności. Dzięki temu oba drzewa stanowić będą niezależne indeksy przeszukiwania utworzonej bazy danych. (W rzeczywistości, na obu drzewach powinny być umieszczane tylko wskaźniki definiujące strukturę drzewa, natomiast rzeczywiste rekordy informacyjne powinny znajdować się poza drzewami. Może to być jakaś prosta struktura danych, np. lista lub tablica, albo mogą być po prostu pojedynczymi danymi w pamięci dynamicznej, do których dostęp będzie wyłącznie z obu drzew.)

Następnie program powinien wejść w tryb analizy danych. W tym trybie program wyświetli na ekranie zawartość korzenia drzewa (jednego z dwóch drzew), i pozwoli na poruszanie się w górę lub w dół (lewy lub prawy) drzewa, po przejściu automatycznie wyświetlając zawartość aktualnie wizytowanego węzła drzewa, głębokość tego węzła względem korzenia, oraz wysokości lewego i prawego poddrzewa. Dostępne będą również następujące operacje:

  1. przejście na drugie drzewo, z zachowaniem aktualnej pozycji na drzewie
  2. sporządzenie podsumowania logowań z wybranego adresu z rozbiciem na poszczególnych użytkowników w postaci:
      adres: (sumaryczna liczba logowań)
        użytkownik1: (ile logowań) 
        użytkownik2: (ile logowań) 
        ...
    
  3. sporządzenie podsumowania logowań wybranego użytkownika z rozbiciem na poszczególne adresy w postaci:
      użytkownik: (sumaryczna liczba logowań)
        adres1: (ile logowań) 
        adres2: (ile logowań) 
        ...
    

Testowanie

Testowanie programu należy przeprowadzić najpierw na małym zbiorze danych, a po osiągnięciu poprawnego działania programu na większym zbiorze danych.

Dostępne zbiory danych:
komputer plik domyślny większy plik archiwalny
diablo /var/adm/wtmpx /var/adm/wtmpx.0
panamint /var/log/wtmp /var/log/wtmp.1

Przy testowaniu wykonanego programu, do porównawczego ręcznego podsumowania danych, przydatne mogą być polecenia:

last -a | egrep -v still | cut -c1-9,60- | sort | uniq -c | less

Przykładowe rozszerzenia