Apakah ada perangkat lunak yang mengatur waktu aktivitas saya dan memberikan laporan?
Berdasarkan fokus jendela dan judul jendela.
Laporan hanya akan menunjukkan waktu yang dihabiskan untuk jendela tertentu dan judulnya seperti:
Application Title Time
Firefox Ask Ubuntu - Mozilla Firefox 5:58
Jawaban yang Diterima:
EDIT:versi skrip dengan laporan yang diurutkan dapat ditemukan di sini
Selalu menyenangkan untuk menulis naskah untuk itu!
Script di bawah ini akan menghasilkan output (laporan) seperti:
------------------------------------------------------------
nautilus
0:00:05 (3%)
------------------------------------------------------------
0:00:05 (3%) .usagelogs
------------------------------------------------------------
firefox
0:01:10 (36%)
------------------------------------------------------------
0:00:05 (3%) The Asker or the Answerer? - Ask Ubuntu Meta - Mozilla Firefox
0:00:15 (8%) scripts - Is there software which time- tracks window & application usage? - Ask Ubuntu - Mozilla Firefox
0:00:10 (5%) Ask Ubuntu - Mozilla Firefox
0:00:15 (8%) Why is a one line non-understandable answer used as review audit? - Ask Ubuntu Meta - Mozilla Firefox
0:00:20 (10%) bash - How to detect the number of opened terminals by the user - Ask Ubuntu - Mozilla Firefox
0:00:05 (3%) BlueGriffon - Mozilla Firefox
------------------------------------------------------------
gedit
0:02:00 (62%)
------------------------------------------------------------
0:02:00 (62%) 2016_06_04_10_33_29.txt (~/.usagelogs) - gedit
============================================================
started: 2016-06-04 10:33:29 updated: 2016-06-04 10:36:46
============================================================
..yang diperbarui sekali per menit.
Catatan
-
Laporan mungkin akan melaporkan jendela di bawah kategori:"Tidak diketahui". Ini adalah kasus ketika windows memiliki
pid 0
(tkinter
jendela, sepertiIdle
windows, sebuahPython
IDE). Judul jendela dan penggunaannya akan dilaporkan dengan benar. -
Layar kunci dengan input kata sandi dilaporkan sebagai “jendela input nux”.
-
Persentasenya dibulatkan persentase, yang terkadang dapat menyebabkan perbedaan kecil antara aplikasi persentase dan jumlah persentase jendelanya.
Contoh:Jika sebuah aplikasi memiliki dua jendela yang digunakan, masing-masing menggunakan
0,7%
dari total waktu, baik jendela akan melaporkan1%
masing-masing (0.7
–> dibulatkan menjadi1
), sedangkan aplikasi laporan penggunaan1%
(1.4
–> dibulatkan menjadi1
)Tidak perlu dikatakan bahwa perbedaan ini sama sekali tidak relevan secara keseluruhan.
Skrip
#!/usr/bin/env python3
import subprocess
import time
import os
# -- set update/round time (seconds)
period = 5
# --
# don change anything below
home = os.environ["HOME"]
logdir = home+"/.usagelogs"
def currtime(tformat=None):
return time.strftime("%Y_%m_%d_%H_%M_%S") if tformat == "file"\
else time.strftime("%Y-%m-%d %H:%M:%S")
try:
os.mkdir(logdir)
except FileExistsError:
pass
# path to your logfile
log = logdir+"/"+currtime("file")+".txt"; startt = currtime()
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
def time_format(s):
# convert time format from seconds to h:m:s
m, s = divmod(s, 60); h, m = divmod(m, 60)
return "%d:%02d:%02d" % (h, m, s)
def summarize():
with open(log, "wt" ) as report:
totaltime = sum([it[2] for it in winlist])
report.write("")
for app in applist:
wins = [r for r in winlist if r[0] == app]
apptime = sum([it[2] for it in winlist if it[0] == app])
appperc = round(100*apptime/totaltime)
report.write(("-"*60)+"\n"+app+"\n"+time_format(apptime)+\
" ("+str(appperc)+"%)\n"+("-"*60)+"\n")
for w in wins:
wperc = str(round(100*w[2]/totaltime))
report.write(" "+time_format(w[2])+" ("+\
wperc+"%)"+(6-len(wperc))*" "+w[1]+"\n")
report.write("\n"+"="*60+"\nstarted: "+startt+"\t"+\
"updated: "+currtime()+"\n"+"="*60)
t = 0; applist = []; winlist = []
while True:
time.sleep(period)
frpid = get(["xdotool", "getactivewindow", "getwindowpid"])
frname = get(["xdotool", "getactivewindow", "getwindowname"])
app = get(["ps", "-p", frpid, "-o", "comm="]) if frpid != None else "Unknown"
# fix a few names
if "gnome-terminal" in app:
app = "gnome-terminal"
elif app == "soffice.bin":
app = "libreoffice"
# add app to list
if not app in applist:
applist.append(app)
checklist = [item[1] for item in winlist]
if not frname in checklist:
winlist.append([app, frname, 1*period])
else:
winlist[checklist.index(frname)][
2] = winlist[checklist.index(frname)][2]+1*period
if t == 60/period:
summarize()
t = 0
else:
t += 1
Cara menyiapkan
-
Script membutuhkan
xdotool
untuk mendapatkan informasi jendelasudo apt-get install xdotool
-
Salin skrip ke file kosong, simpan sebagai
window_logs.py
-
Uji- jalankan skrip:tart skrip dengan perintah (dari terminal):
python3 /path/to/window_logs.py
Setelah satu menit, skrip membuat file log dengan hasil pertama di
~/.usagelogs
. File diberi cap waktu dengan tanggal &waktu pembuatan. File diperbarui sekali per menit.Di bagian bawah file, Anda dapat melihat waktu mulai dan stempel waktu dari hasil edit terbaru. Dengan cara ini Anda selalu dapat melihat rentang waktu file.
Jika skrip dimulai ulang, file baru dengan stempel waktu (mulai) baru akan dibuat.
-
Jika semua berfungsi dengan baik, tambahkan ke Aplikasi Startup:Dash> Startup Applications> Add. Tambahkan perintah:
/bin/bash -c "sleep 15 && python3 /path/to/window_logs.py"
Catatan lainnya
~/.uselogs
adalah direktori tersembunyi secara default. Tekan (dinautilus
) Ctrl +H untuk membuatnya terlihat.-
Seperti itu, skrip membulatkan keaktifan jendela pada 5 detik, dengan asumsi kurang dari 5 detik tidak benar-benar menggunakan jendela. Jika Anda ingin mengubah nilainya, atur di kepala skrip di baris:
# -- set update/round time (seconds) period = 5 # --
-
Skripnya sangat "rendah jus". Selanjutnya, sejak waktu- update per jendela dilakukan di dalam skrip, jumlah baris dalam file log terbatas pada jumlah sebenarnya dari jendela yang digunakan.
Namun demikian, saya tidak akan menjalankan skrip selama berminggu-minggu berturut-turut misalnya, untuk mencegah akumulasi terlalu banyak baris (=window record) untuk dipelihara.