Apakah ada perangkat lunak yang melacak waktu jendela & penggunaan aplikasi?

10

Apakah ada perangkat lunak yang mengatur waktu kegiatan saya dan memberikan laporan? Berdasarkan jendela fokus 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
ambi
sumber
1
Ada pelacak waktu di pusat perangkat lunak yang melakukan ini
Mateo
1
Ini dapat dilakukan dengan sangat mudah dengan program-program yang tersedia - jangan biarkan memberikan motif untuk ini, saya telah menggunakan program semacam itu untuk mencatat waktu saya sendiri pada suatu proyek sebelumnya. Ini tentu saja tidak termasuk dalam kategori "terlalu luas"
Mateo
Bagaimanapun caranya, saya tidak mengerti mengapa pertanyaan ini sangat tidak disukai. Itu pertanyaan yang normal dan jelas. Saya tidak melihat peringatan "hanya ajukan pertanyaan yang tidak ada yang tahu jawabannya" di mana saja di situs.
Jacob Vlijm
Hai Ambi. Diposting jawaban saya. Tolong beri tahu saya jika Anda berhasil!
Jacob Vlijm
Ya mungkin uraian saya tidak benar - saya tidak ingin memata-matai siapa pun kecuali saya. Saya hanya ingin memiliki statistik tentang apa yang saya buang waktu saya. Saya telah memeriksa 'Ikhtisar pelacakan waktu' dan 'Pelacak Waktu GTimeLog' tetapi di sana Anda harus memasukkan semuanya secara manual - yang tidak ingin saya lakukan. Jacob Vlijm, terima kasih, itulah yang saya cari kecuali saya pikir ada perangkat lunak seperti itu dengan GUI
ambi

Jawaban:

7

EDIT: versi skrip dengan laporan yang diurutkan dapat ditemukan di sini


Selalu menyenangkan untuk menulis skrip 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 windows di bawah kategori: "Tidak Dikenal". Ini adalah kasus ketika windows memiliki pid 0( tkinterwindows, seperti Idlewindows, PythonIDE). Judul jendela dan penggunaannya akan dilaporkan dengan benar.

  • Layar kunci dengan input kata sandi dilaporkan "jendela input nux".

  • Persentase adalah persentase bulat , yang kadang-kadang dapat menyebabkan perbedaan kecil antara persentase aplikasi dan jumlah persentase window-nya.

    Contoh: Jika aplikasi memiliki dua jendela yang digunakan, masing-masing digunakan 0,7%dari total waktu, kedua jendela akan melaporkan 1%masing-masing ( 0.7-> dibulatkan ke 1), sedangkan laporan penggunaan aplikasi1% ( 1.4-> dibulatkan ke 1)

    Tidak perlu dikatakan bahwa perbedaan-perbedaan ini sama sekali tidak relevan dalam keseluruhan gambaran.

Naskah

#!/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 mengatur

  1. Script perlu xdotoolmendapatkan informasi jendela

    sudo apt-get install xdotool
  2. Salin skrip ke file kosong, simpan sebagai window_logs.py

  3. Tes-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 ini ditandai dengan tanggal & waktu pembuatan. File diperbarui sekali per menit.

    Di bagian bawah file, Anda dapat melihat waktu mulai dan cap waktu hasil edit terakhir. Dengan cara ini Anda selalu dapat melihat berapa rentang waktu file.

    Jika skrip dimulai ulang, file baru dengan cap waktu baru (mulai-) dibuat.

  4. Jika semua berfungsi dengan baik, tambahkan ke Aplikasi Startup: Dash> Aplikasi Startup> Tambah. Tambahkan perintah:

    /bin/bash -c "sleep 15 && python3 /path/to/window_logs.py"

Lebih banyak catatan

  • ~/.uselogsadalah direktori tersembunyi secara default. Tekan (dalam nautilus) Ctrl+ Huntuk 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 bagian atas skrip di baris:

    # -- set update/round time (seconds)
    period = 5
    # -- 
    
  • Skripnya sangat "rendah jus". Selain itu, karena pembaruan waktu per jendela dilakukan di dalam skrip, jumlah baris dalam file log terbatas pada jumlah aktual jendela yang digunakan.

    Namun demikian, saya tidak akan menjalankan skrip selama berminggu-minggu misalnya, untuk mencegah akumulasi terlalu banyak baris (= catatan jendela) untuk dikelola.

Yakub Vlijm
sumber
1
Persis apa yang saya cari kecuali itu baik untuk memiliki GUI juga tetapi saya bisa melakukannya sendiri. Terima kasih.
ambi