Pomiar czasu użycia komputera

W poprzednim wpisie opisałem jak ograniczyć czasowo dostęp do wybranych stron, a w tym opiszę jak można śledzić czas spędzony przed komputerem. Koncepcja tego oprogramowania jest bardzo prosta, przed wyłączeniem komputera będzie wywoływany skrypt, który sprawdzał czas przez jaki był uruchomiony system i zapisywał odpowiednie dane do bazy danych.

Baza danych

Pierwszym elementem naszej układanki jest baza danych. Wykorzystamy bazę sqlite3. Baza będzię bardzo prosta. Będzię się ona składał jedynie z jednej tabeli zawierającej dwie kolumny- datę i czas użycia komputera w danym dniu. Bazę można utworzyć za pomocą poniższego skryptu:

import sqlite3
from datetime import date

conn = sqlite3.connect('/home/twójużytkownik/.time_monitor/time_monitor.db')
c = conn.cursor()
c.execute('CREATE TABLE IF NOT EXISTS time ([date] TEXT PRIMARY KEY, time REAL)')
conn.commit()

conn.close()

Zwróć uwagę na ścieżkę do bazy, ustaw ją tak aby odpowiadała twojemu użytkownikowi.

Skrypt

Czas, który minął od uruchomienia komputera w Linuksie można znaleźć w pliku /proc/uptime. Trzeba odczytać pierwszą wartość. Wartość ta jest wyrażona w sekundach.

Dla ciekawskich, druga wartość w tym pliku oznacza czas spędzony “na biegu jałowym”(w sensie na idle’u) przez wszystkie rdzenie procesora zatem jeśli mamy conajmniej dwurdzeniowy procesor(ma ktoś jeszcze jednordzeniowe procesory w ogóle?) to ta wartość będzie najprawdopodobniej większa niż czas pracy komputera.

Kolejnym elementem jest skrypt aktualizujący bazę danych. Jest on bardzo prosty. Działanie skryptu można opisać w następujących punktach:

  1. Odczyt czasu pracy systemu i zamiana odczytanej wartości na minuty
  2. Podłączenie się do bazy danych i sprawdzenie czy istnieje rekord z aktualną datą
  3. Jeśli nie istnieje to tworzymy taki wpis i zapisujemy zmierzony czas pracy systemu
  4. Jeśli istnieje to odczytujemy wcześniejszą i dodajemy do niej aktualny czas pracy systemu

Skrypt wygląda następująco:

#!/usr/bin/python3

import sqlite3
from datetime import date

with open("/proc/uptime", "r") as f:
	uptime = f.readline().split(' ')[0]

uptime = float(uptime) / 60
today = date.today()

conn = sqlite3.connect('/home/twójużytkownik/.time_monitor/time_monitor.db')
c = conn.cursor()
c.execute('SELECT * FROM time WHERE date="{}"'.format(today))
row = c.fetchall()
if len(row) == 0:
	c.execute('INSERT INTO time VALUES ("{}", {})'.format(today, uptime))
else:
	uptime += row[0][1]
	c.execute('UPDATE time SET time={} WHERE date="{}"'.format(uptime, today))
conn.commit()
conn.close()

Oczywiście popraw ścieżkę do bazy danych tak aby odpowiadała lokalizacji na twoim komputerze.

Skrypt ten powinien być uruchamiany przed wyłączeniem systemu. Podobnie jak w przypadku oprogramowania z poprzedniego wpisu użyjemy systemd. Skopiuj zatem powyższy skrypt do katalogu /etc. Następnie utwórz plik time_monitor.service w katalogu /etc/systemd/system. Plik time_monitor.service ma następującą zawartość:

[Unit]
Description=Time monitoring script
DefaultDependencies=no
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/etc/time_monitor.py
TimeoutStartSec=0

[Install]
WantedBy=shutdown.target

Aby aktywować działanie wykonaj komendę:

# Wykonaj jako sudo lub root
systemctl enable website_scheduler.service

Sprawdzenie statystyk

Sprawdzenie swoich statystyk będzie polegało na odczycie danych z bazy danych, Najprościej to zrobić za pomocą sqlite3:

sqlite3 ~/.time_monitor/time_monitor.db

W bazie wykonujemy taką instrukcję SQLową:

SELECT * FROM time;

Komenda ta wydrukuje na ekran całą tabelę time. Aby dostać np. dane z ostatnich 10 dni można użyć komendy:

SELECT * FROM time ORDER BY date DESC LIMIT 10;

Teraz możemy monitorować czas spędzony przed komputerem. Kolejnym krokiem może być przygotowanie skrypty generującego wykresy przedstawiające zgromadzone dane.

Ten wpis został opublikowany w kategorii Artykuły, Linux. Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *