Existe software que rastreia o tempo de uso de janelas e aplicativos?

10

Existe um software que mantém o tempo das minhas atividades e fornece um relatório? Baseado na janela focada e no título da janela. O relatório mostraria apenas o tempo gasto para uma janela específica e seu título, como:

Application   Title                             Time
Firefox       Ask Ubuntu - Mozilla Firefox      5:58
ambi
fonte
1
Há um tracker tempo no centro de software que faz exatamente isso
Mateo
1
Isso pode ser feito de maneira extremamente fácil com programas disponíveis - não vamos atribuir motivos a isso; usei esse programa para gravar meu próprio tempo em um projeto antes. Isto certamente não é no "muito amplo" categoria
Mateo
De qualquer maneira, não entendo por que essa questão é fortemente votada. É uma pergunta normal e clara. Não vi um aviso "apenas fazer pergunta que ninguém sabe a resposta" em qualquer lugar do site.
Jacob Vlijm 31/05
Oi Ambi. Postado minha resposta. Entre em contato se você conseguir!
Jacob Vlijm
Sim, pode ser que minha descrição não esteja correta - não quero espionar ninguém além de mim. Eu quero apenas ter uma estatística sobre o que eu perdi meu tempo. Eu verifiquei 'Time tracking overview' e 'GTimeLog Time Tracker', mas é preciso inserir tudo manualmente - o que eu não quero fazer. Jacob Vlijm, obrigado, isso é exatamente o que eu estava procurando, exceto eu pensei que há um software parecido com GUI
ambi

Respostas:

7

EDIT: uma versão do script com relatórios classificados pode ser encontrada aqui


Sempre divertido escrever um script para ele!

O script abaixo produzirá uma saída (relatório) como:

------------------------------------------------------------
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
============================================================


..que é atualizado uma vez por minuto.

Notas

  • O relatório possivelmente reportará janelas na categoria: "Desconhecido". É o caso das janelas pid 0( tkinterjanelas, como Idlejanelas, um PythonIDE). Seu título e uso da janela serão relatados corretamente, no entanto.

  • A tela de bloqueio com entrada de senha é relatada como uma "janela de entrada nux".

  • As porcentagens são arredondadas , que ocasionalmente podem levar a pequenas diferenças entre a porcentagem do aplicativo e a soma da porcentagem da janela.

    Um exemplo: Se um aplicativo tem duas janelas usadas, cada um usado 0,7%do tempo total, ambas as janelas irá relatar 1%cada ( 0.7-> arredondado para 1), enquanto o da aplicação relatórios de utilização 1%( 1.4-> arredondado para 1)

    Não é preciso dizer que essas diferenças são totalmente irrelevantes em todo o cenário.

O script

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

Como configurar

  1. O script precisa xdotoolobter as informações da janela

    sudo apt-get install xdotool
  2. Copie o script em um arquivo vazio, salve-o como window_logs.py

  3. Teste - execute o script: insira o script pelo comando (de um terminal):

    python3 /path/to/window_logs.py

    Após um minuto, o script cria um arquivo de log com os primeiros resultados em ~/.usagelogs. O arquivo é marcado com hora e data e hora de criação. O arquivo é atualizado uma vez por minuto.

    Na parte inferior do arquivo, você pode ver o horário de início e o carimbo de data e hora da edição mais recente. Dessa forma, você sempre pode ver qual é o período de tempo do arquivo.

    Se o script reiniciar, um novo arquivo com um novo registro de data e hora (início) será criado.

  4. Se tudo funcionar bem, adicione aos Aplicativos de inicialização: Dash> Aplicativos de inicialização> Adicionar. Adicione o comando:

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

Mais notas

  • ~/.uselogsé um diretório oculto por padrão. Pressione (in nautilus) Ctrl+ Hpara torná-lo visível.
  • Como é, o script arredonda a atividade da janela em 5 segundos, assumindo que menos de 5 segundos não está realmente usando a janela. Se você deseja alterar o valor, defina-o no cabeçalho do script na linha:

    # -- set update/round time (seconds)
    period = 5
    # -- 
  • O script é extremamente "com pouco suco". Além disso, como as atualizações de tempo por janela são feitas dentro do script, o número de linhas no arquivo de log é limitado ao número real de janelas usadas.

    No entanto, eu não executaria o script por semanas seguidas, por exemplo, para evitar o acúmulo de muitas linhas (= registros da janela) para manter.

Jacob Vlijm
fonte
1
Exatamente o que eu estava procurando, exceto que é bom ter uma GUI também, mas eu posso fazer isso sozinho. Obrigado.
ambi