¿Existe algún software que controle el tiempo de uso de ventanas y aplicaciones?

10

¿Existe un software que mantenga el tiempo de mis actividades y dé un informe? Basado en la ventana enfocada y el título de la ventana. El informe solo mostraría el tiempo dedicado a una ventana específica y su título como:

Application   Title                             Time
Firefox       Ask Ubuntu - Mozilla Firefox      5:58
ambi
fuente
1
Hay un rastreador de tiempo en el centro de software que hace exactamente esto
Mateo
1
Esto se puede hacer de manera extremadamente fácil con los programas disponibles: no asignemos un motivo a esto, he usado dicho programa para registrar mi propio tiempo en un proyecto anteriormente. Esto ciertamente no está en la categoría "demasiado amplia"
Mateo
De cualquier manera, no entiendo por qué esta pregunta está fuertemente rechazada. Es una pregunta normal y clara. No vi una advertencia de "solo preguntar, nadie sabe la respuesta" en ninguna parte del sitio.
Jacob Vlijm
Hola ambi Publiqué mi respuesta. ¡Avísame si te las arreglas!
Jacob Vlijm
Sí, puede que mi descripción no sea correcta, no quiero espiar a nadie excepto a mí. Solo quiero tener una estadística de lo que he perdido. Verifiqué 'Resumen de seguimiento de tiempo' y 'Rastreador de tiempo de GTimeLog', pero allí debe ingresar todo manualmente, eso no es lo que quiero hacer. Jacob Vlijm, gracias, eso es exactamente lo que estaba buscando, excepto que pensé que hay un software como ese con GUI
Ambi

Respuestas:

7

EDITAR: una versión del script con informes ordenados se puede encontrar aquí


¡Siempre es divertido escribir un guión para ello!

El siguiente script producirá una salida (informe) 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 se actualiza una vez por minuto.

Notas

  • El informe posiblemente informará ventanas en la categoría: "Desconocido". Este es el caso cuando las ventanas tienen pid 0( tkinterventanas, como Idleventanas, un PythonIDE). Sin embargo, su título de ventana y uso se informarán correctamente.

  • La pantalla de bloqueo con entrada de contraseña muestra una "ventana de entrada nux".

  • Los porcentajes son porcentajes redondeados , que ocasionalmente pueden ocasionar diferencias menores entre el porcentaje de la aplicación y la suma del porcentaje de su ventana.

    Un ejemplo: si una aplicación tiene dos ventanas utilizadas, cada una 0,7%de las cuales utiliza el tiempo total, ambas ventanas informarán 1%cada una ( 0.7-> redondeada a 1), mientras que el uso de la aplicación informa 1%( 1.4-> redondeada a 1)

    No es necesario decir que estas diferencias son totalmente irrelevantes en todo el panorama.

La secuencia de comandos

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

  1. El script necesita xdotoolobtener la información de la ventana.

    sudo apt-get install xdotool
  2. Copie el script en un archivo vacío, guárdelo como window_logs.py

  3. Prueba: ejecute la secuencia de comandos: agregue la secuencia de comandos mediante el comando (desde un terminal):

    python3 /path/to/window_logs.py

    Después de un minuto, el script crea un archivo de registro con los primeros resultados ~/.usagelogs. El archivo está marcado con la fecha y hora de creación. El archivo se actualiza una vez por minuto.

    En la parte inferior del archivo, puede ver tanto la hora de inicio como la marca de tiempo de la última edición. De esta manera, siempre puede ver cuál es el período de tiempo del archivo.

    Si el script se reinicia, se crea un nuevo archivo con una nueva marca de tiempo (inicio).

  4. Si todo funciona bien, agréguelo a Aplicaciones de inicio: Tablero> Aplicaciones de inicio> Agregar. Agrega el comando:

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

Más notas

  • ~/.uselogses un directorio oculto por defecto. Presione (in nautilus) Ctrl+ Hpara hacerlo visible.
  • Tal como está, el guión redondea la actividad de la ventana en 5 segundos, suponiendo que menos de 5 segundos realmente no esté usando la ventana. Si desea cambiar el valor, configúrelo en el encabezado del script en la línea:

    # -- set update/round time (seconds)
    period = 5
    # -- 
    
  • El guión es extremadamente "bajo en jugo". Además, dado que las actualizaciones de tiempo por ventana se realizan dentro del script, el número de líneas en el archivo de registro se limita al número real de ventanas utilizadas.

    Sin embargo, no ejecutaría el script durante semanas seguidas, por ejemplo, para evitar acumular demasiadas líneas (= registros de ventana) para mantener.

Jacob Vlijm
fuente
1
Exactamente lo que estaba buscando, excepto que también es bueno tener una GUI, pero puedo hacerlo yo mismo. Gracias.
ambi