{"id":28295179,"url":"https://github.com/catalyst-42/tracker","last_synced_at":"2026-03-09T05:31:37.658Z","repository":{"id":122521237,"uuid":"556409557","full_name":"Catalyst-42/Tracker","owner":"Catalyst-42","description":"Трекер времени","archived":false,"fork":false,"pushed_at":"2025-05-11T15:27:20.000Z","size":3591,"stargazers_count":40,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-22T12:22:44.290Z","etag":null,"topics":["statistics","time-tracker"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Catalyst-42.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-10-23T19:38:55.000Z","updated_at":"2025-05-11T15:27:24.000Z","dependencies_parsed_at":"2024-01-19T13:53:40.105Z","dependency_job_id":"90d4b13d-5bb9-4d0e-a168-713467231e45","html_url":"https://github.com/Catalyst-42/Tracker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Catalyst-42/Tracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Catalyst-42%2FTracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Catalyst-42%2FTracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Catalyst-42%2FTracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Catalyst-42%2FTracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Catalyst-42","download_url":"https://codeload.github.com/Catalyst-42/Tracker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Catalyst-42%2FTracker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30283893,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["statistics","time-tracker"],"created_at":"2025-05-22T12:17:30.889Z","updated_at":"2026-03-09T05:31:37.650Z","avatar_url":"https://github.com/Catalyst-42.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tracker\nНастраиваемый трекер времени, и несколько скриптов для аналитики и изучения полученных данных. \n\n## Установка\nПомимо этого архива для работы требуется [Python3](https://www.python.org), библиотека `matplotlib` для работы с графиками, библиотеки `Pillow` и `numpy` для создания кружочка времени.\n\n```\npip3 install -r requirements.txt\n```\n\n## Использование\nОсновным скриптом считается `tracker.py`, с его помощью можно отслеживать время. \n\n![tracker](images/main.png)\n\nДля выбора действия необходимо записать номер действия. Все номера доступных операций выделены зелёным. \n  \nПри создании нового этапа можно через пробел добавить к нему подпись. Ещё можно добавить после номера сессии флаг `-f` (или `-force`) для того, чтобы этап создался отдельной сессией, а не продолжил предыдущую (если таковая была). Пример:\n\n```\nВвод: 1                    -\u003e Начнёт или продолжит сессию сна\nВвод: 1 Заметка для этапа  -\u003e Начнёт или продолжит сессию сна с подписью \"Заметка для этапа\"\nВвод: 2 -f                 -\u003e Начнёт новую сессию отдыха не зависимо от предыдущей\nВвод: 2 -force             -\u003e Начнёт новую сессию отдыха не зависимо от предыдущей\n```\n\nУправление трекером происходит вручную, после завершения одного этапа сразу начинается другой (пустоты между этапами нет). Формат этапов в сохранении сплошной, доступно также редактирование последнего этапа из трекера. Можно использовать константы для секунды, минуты, часа, дня и недели (`s`, `m`, `h`, `d`, `w`), формат записи и примеры валидных отрезков приведены ниже.\n\nВалидные строки для изменения времени:\n```\nВвод: 42       -\u003e 42 секунды\nВвод: m        -\u003e Одна минута\nВвод: 1.5h 32m -\u003e Полтора часа и 32 минуты\nВвод: 16h -15m -\u003e 16 часов без 15 минут\nВвод: w +6.25h -\u003e Неделя и 6.25 часа (плюс опционален)\n```\n\n![d](images/change_time.png)\n\nПри удалении этапа предыдущий занимает всё его время.\n\n```\n    До удаления               После\n| этап 1 | этап 2 |  -\u003e |     этап 1      |\n```\n\n### Файл сохранения\nВ файле сохранения `save.py` содержатся для каждого этапа его название, unit-time метка начала этапа, читаемое представление метки и подпись к этапу.\n\n```\n| этап 1 | этап 2 |\n^        ^        ^\n|        |        timestamp (конец)\n|        unix-time (начало 2 этапа)\nunix-time (начало 1 этапа)\n```\n\nФайл сохранения выглядит следующим образом:\n\n```python\nsaved = True\ntimestamp = 1670744270.0\nactivities = [\n    [\"Отдых\", 1670698800.0, \"10.12.2022 22:00:00\", \"Начало\"],\n    [\"Сон\", 1670704503.0, \"10.12.2022 23:35:03\", \"\"],\n    [\"Отдых\", 1670738442.0, \"11.12.2022 09:00:42\", \"\"],\n    [\"Другое\", 1670740670.0, \"11.12.2022 09:37:50\", \"Поход в горы\"],\n]\n```\n\nВ скриптах не используется текстовое представление времени, оно необходимо только для поиска нужной даты для редактирования. Если вы хотите изменить данные в файле сохранения вручную, то меняйте unix-time метку этого этапа (число). Для перевода времени из одного формата в другой можно использовать скрипт `timestamper.py`.\n\nРаз в неделю (от первого этапа) трекер будет создавать бэкап сохранения. Файлы бэкапов будут храниться в папке `dumps`.\n\n## Аналитика\nПри выходе из трекера он будет показывать простую аналитику по файлу сохранения.\n\n![stats](images/stats.png)\n\nПомимо этого можно использовать разные скрипты для более наглядной визуализации полученных данных. Два основных скрипта для просмотра файла сохранения - `bar.py` и `barh.py`. \n\n![barh](images/barh.png)\n\nСкрипты отображают этапы из файла сохранения по дням. Окно просмотра ограничено последними двумя неделями. Внизу есть отдельный график с процентным распределением этапов за всё время. При просмотре с matplotlib при наведении на каждый этап появляется дополнительная информация.\n\nЕсли файл сохранения очень большой, то можно воспользоваться скриптами `map.py` и `density.py` для просмотра глобальной статистики: карты всего сохранения и динамики плоности каждого из этапов по неделям, или за всё время. \n\nСкрипт `map.py` отображает все этапы всего файла сохранения. С его помощью можно изучать большие файлы сохранений.\n\n![map](images/map.png)\n\nСкрипт `density.py` отображает среднее время каждого из этапов по неделям. \n\n![density](images/density.png)\n\nТакже можно настроить отображение так, чтобы плотности показывались не за каждую неделю, а за всё время (накопительно).\n\n![density -c](images/densityc.png)\n\nЕщё можно создать кружок времени с помощью `circles.py`.\n\n| ![circles 1](images/circles1.png) | ![circles 2](images/circles2.png) |\n|-|-|\n\nЧем больше файл сохранения, тем больше точек. Круг представляет из себя 24 часовой циферблат, вверху полночь. Расстояние точки (времени начала этапа) от центра зависит от недели.\n\n## Настройки\nВсе доступные настройки для всех скриптов приведены в файле `settings.toml`. Также для каждого скрипта при его использовании определены параметры, которые можно менять из консоли. Для того чтобы узнать доступные для изменения из консоли параметры при выполнении скрипта добавьте флаг `--help`.\n\n![help message](images/help_message.png)\n\nДля каждого скрипта список параметров свой. Все возможные параметры для каждого скрипта можно посмотреть в файле `settngs.toml` в соответствующих секциях. Не все параметры, перечисленные в файле настроек могут быть изменены из консоли. \n\nЕщё можно менять список доступных этапов. Из этого можно, например, из трекера свободного времени сделать трекер для игр. Доступные для выбора этапы трекера определяются в секции `[activities]`. Для каждого занятия надо определить в массиве его цвет для отображения на графике в формате rgb:\n\n```toml\n[activities]\n\"Borderlands 2\" = [255, 127, 14]\n\"Stone Story\" = [128, 128, 128]\n\"Katana Zero\" = [149, 103, 189]\n\"Hotline Miami 2\" = [214, 39, 40]\n\"The Witness\" = [42, 172, 251]\n# \"Название этапа\" = [r, g, b]  # Цвет для matplotlib\n\n\"Пустота\" = [0, 0, 0]\n\n[global]\nVOID = \"Пустота\"\n# ...\n```\n\nПорядок названий определяет порядок отображения активностий в списке среднего времени и на легенде.\n\n![game barh](images/game_barh.png)\n\nТакже можно создать и определить `VOID` этап. Этот этап не отображается на легенде и на графике. Для скриптов доступен флаг для исключения Void этапа. При этом флаге график среднего времени будет иметь лимт времени, исключающий Void:\n\n![game barh -v](images/game_barh_v.png)\n\nДля правильной работы Void этап обязан быть последним в секции `[activities]` файла настроек, название этапа пустоты определяется значением поля `VOID` в секции `[global]`. Так же для возможности исключения `Void` этапа он обязан присутствовать в файле сохранения.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatalyst-42%2Ftracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcatalyst-42%2Ftracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatalyst-42%2Ftracker/lists"}