Skip to main content

This CLI will monitor(active-tab, mouse, keyboard), log, and plot graphs.

Project description

GanttLogger

CLI that Monitors active-tab, mouse-distance and keyboard-count, Logs and Plots various graphs.
(PyPI)https://pypi.org/project/ganttlogger/


AGENDA


Requirements(Test Completing)

  • OS
    • Windows10(64bit)
    • MacOS High Sierra ~
  • Python
    • 3.6.x
    • 3.7.x

Get Started

Install

  • Windows
    There are two ways to install.
    • Install with pip.
      1. Install python3.
      2. Install with pip like below.
        > python -m pip install ganttlogger
        
    • Install by downloading ganttlogger-exe-x86_64-<version>.zip.
  • MacOS There are two ways to install.
    • Install with pip.
      1. Install python3 and pip3.
      2. Installl with pip3 like below.
        $ pip3 install ganttlogger
        
      3. If you can't install with pip3, download ganttlogger-<version>.tar.gz from Releases or PyPI, extract it, and run install command below.
        $ python3 setup.py install
        
      4. Add "Terminal.app" to "Accessibility" in "Security & Privacy" in system environment settings to allow Terminal.app to get inputs from keyboard.
    • Install by downloading ganttlogger-exe-macos-<version>.zip.

Quick Start

  1. Run as "Alone"(Run both monitoring and logging in a PC).
    $ ganttlogger
    
  2. Exit CLI(running as "Alone" or "Observer") by hitting keys 1+0+z+m continuously (mashing keys, not long pressing simultaneously).
  3. Check a created folder ganttlogger_logs in current directory.
    When you want a guide about the outputed folder, refer Structure of outputed folder "ganttlogger_logs".
  • If you get the following problems
    • ModuleNotFoundError: No module named 'win32gui' on Windows.
      • Try uninstall and install pywin32.
        > python -m pip uninstall pywin32 & python -m pip install pywin32
        
    • Appear warning below when plotting graphs.
      /usr/local/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 128266 missing from current font.
      font.set_text(s, 0.0, flags=flags)
      /usr/local/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 128266 missing from current font.
      font.set_text(s, 0, flags=flags)
      
      • No problem. You can ignore that.

Structure of outputed folder "ganttlogger_logs"

ganttlogger_logs
├ (ID)
    ├ active_tab.log
    ├ mouse.log
    ├ keyboard.log
    └ graphs
        ├ output_(date)_all.pkl
        ├ output_(date)_all.png
        ...
├ (ID)
    ├ active_tab.log
    ...
...
  • (ID): A unique ID generated by ganttlogger.
  • ~.log: log data.
  • ~.pkl: Dynamic graph data.
  • ~.png: Static graph data(image).

Command Options

usage: ganttlogger [--observer] [--logger] [--uuid <UUID>] [--help] [--plotter] [--withplot] [--displayer] [--merger]

This CLI will do Observing active-tab, mouse, keyboard,
and Logging them,
and Plotting graphs (active-tab=ganttchart, mouse=line, keyboard=bar).
If you don't set any option, this work both of 'observer' and 'logger'.

optional arguments:
  -h, --help            show this help message and exit
  -o, --observer        The role of this PC is only observing action.
  -l, --logger          The role of this PC is only logging and plotting. You must also set '--uuid'.
  -u UUID, --uuid UUID  When you set '--logger', you must also set this by being informed from 'observer' PC.
  -p, --plotter         Use this option if you want other outputs by a log in the current directory after getting one and a graph.
  --withplot            Use this option when you want to get a graph after running 'Alone'.
  -d, --displayer       Use this option when you want to look a graph from a '.pkl' file.
  -m, --merger          Use this option when you want to merge all logs in folders in 'ganttlogger_logs'.
  • --observer and --logger don't work because they're not implemented yet.
  • Run ganttlogger without any options if you run CLI as alone - both of observer and logger/plotter -.
    • Add an option --withplot, if you want graphs along with logs.
      Then, CLI will output a graph like No.1 of Graph Examples
  • Change to current directory of logs and add an option --plotter, if you want to get other graphs from logs.
    • Then, you'll be required some settings to decide formats to plot graphs.
    • First,
      Select plot types separated by ',',  or enter without input.:
      
      Select keywords(you can combine) from (set_interval | filter_tab | select_data | xaxis_type | xlim_range).
    • When select set_interval, you'll be required a setting.
      Set the number of interval by seconds:
      
      Example graph when set "5" is No.2 of Graph Examples.
    • When select filter_tab, you'll be required two settings.
      (1)Input a file name written a list of tab text you want to filter.:
      
      (2)Do you want to hide mouse and keyboard graph depictions of the duration filtered regarding tab text?(Y/n) :
      
    • When select select_data, you'll be required a setting.
      Select 'all' or names separated by ',' from ('active_tab'|'mouse'|'keyboard'|'mouse-keyboard').:
      
      Example graphs when set "active_tab" and "keyboard" are No.5 and No.6 of Graph Examples.
    • When select xaxis_type, you'll be required two settings.
      (1)Select x-axis type for ActiveTab from whether 'active-start' or number of the interval by seconds:
      
      (2)Select x-axis type for Mouse or Keyboard from whether 'active-start' or number of the interval by seconds:
      
      Example graphs when set "(1)active-start(2)active-start" and "(1)15(2)15" are No.3 and No.4 of Graph Examples.
    • When select xlim_range, you'll be required two settings.
      (1)Input start time of graph xlim in the format 'YYYY/mm/dd HH:MM:SS'.:
      
      (2)Input end time of graph xlim in the format 'YYYY/mm/dd HH:MM:SS'.:
      
      Then, you can get a graph during the specified time zone.
    • When select set_ylabel, you'll be required a setting.
      Do you want to remove from active-tab-names(y-labels)? (Y/n):
      
      If you input 'Y', you can get graphs having y-labels composed of the only application names (excluding tab names).
  • Add an option --displayer if you want watch dynamic graph with generated ~.pkl.
    • Then, you'll be required a setting.
      Input file name of '.pkl':
      
  • Add an option --merger if you want to merge all logs in folders(these names is ID) in "ganttlogger_logs".
    • Then, you'll be required a setting.
      Select 'all' or names separated by ',' from ('active_tab'|'mouse'|'keyboard').:
      
    • After running, you'll get an outputted folder "merged_<datetime>".

Graph Examples

  • All graphs were plotted from same logs. Graph Examples

Issues.

  • When long running on Mac, this cli makes PC out of memory.
    The reason may be in a dependent module pyobjc, but I don't know how to release memory.
    Memory leak pyobjc - stack overflow
  • Like No.2 in Graph Examples, a part of ganttchart disappear from graph when setting set_interval more than 2.
    I'm investigating the causes...
  • In Observer.py, sometimes thread error like below occurs on Windows. I'm investigating the causes...
    Exception in thread Thread-1:
    Traceback (most recent call last):
    ...
    
  • Sometimes an error below occurs when plotting from a short term logs.
    Traceback (most recent call last):
        File "/usr/local/bin/ganttlogger", line 10, in <module>
            sys.exit(main())
        File "/usr/local/lib/python3.7/site-packages/ganttlogger/app.py", line 42, in main
            plotter.start()
        File "/usr/local/lib/python3.7/site-packages/ganttlogger/modules/Plotter.py", line 248, in start
            self.run()
        File "/usr/local/lib/python3.7/site-packages/ganttlogger/modules/Plotter.py", line 272, in run
            self.get_mouse()
        File "/usr/local/lib/python3.7/site-packages/ganttlogger/modules/Plotter.py", line 691, in get_mouse
            current_time = self.plot_active_tab[0][0].replace(microsecond=0)
    IndexError: index 0 is out of bounds for axis 0 with size 0
    
  • Try implementing flushing stdin buffering. But it's difficury, so I want advices or pull-requests.

In the future...

  • Implement mode remote '--observer' and '--logger'.

License

MIT LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ganttlogger-0.2.2.tar.gz (4.1 MB view hashes)

Uploaded Source

Built Distribution

ganttlogger-0.2.2-py3-none-any.whl (4.1 MB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page