tracklater通过组合线索并在一个简单的时间轴视图上显示您的一天,帮助您跟踪事实发生后的时间。
tracklater的Python项目详细描述
tracklater
忘了跟踪你的工作时间?tracklater通过组合线索并在一个简单的时间轴视图上显示您的一天,帮助您跟踪事实发生后的时间。
初始版本支持从
- Thyme
- 吉特
- 松弛度
时间项可以导出到
- TOGGL
问题和项目/客户可以从
- 吉拉
- 泰加
- TOGGL(项目/客户)
背景
每个用时间追踪工作的人都知道,这可能是一种真正的痛苦,特别是如果你是一个像我这样健忘的人。我几乎从来不记得启动计时器,当我启动时,我肯定不会记得关闭它们。
当与多个客户机一起工作时,正确地跟踪您的时间并能够按客户机区分所有任务是至关重要的(计费方面)。对于在办公室为同一个客户工作9-5个小时而不需要分别跟踪每个任务的人来说,这个应用程序可能有点过头了。
考虑到这一点,我构建了一个基本的应用程序,使用百里香进行被动时间跟踪,使用toggl api进行导出。我很快发现我的工作流程得到了很大的改进,每周只需考虑1-2次时间跟踪。我现在已经使用这个应用程序大约一年了,时不时地构建一个新的时间模块。
tracklater提供一组基本功能,帮助所有时间跟踪者按顺序获取时间表:
- 时间线概述,这通常是跟踪软件中缺少的
- 使用自动检测的项目和响应式用户界面,轻松添加时间项
- 把你所有的面包屑,轨迹,线索,足迹放在一个地方
实施说明
每个模块都按group分隔它们的问题、时间条目和项目。这使得模块间的通信变得简单:例如,在git存储库中为groupx所做的提交将归于对应于groupx的toggl项目。
组是任意的,由用户在创建其设置文件时决定。选择groups数量的好方法 为每个客户机/工作项目创建一个group。
虽然所有模块都是可选的,但TimeLater的一个重要主干是thyme。
百里香模块假设一个实现,其中每天都存储在名为YYYY-MM-DD.json
的文件中。建议为此设置一个自动百里香跟踪脚本。
我用一个基本的脚本来运行百里香。经过大约一年的跟踪,它有了一些发展:有时百里香跟踪失败,破坏了整个文件, 所以我绝对推荐使用这个脚本。https://gist.github.com/Eerovil/36d109d531659d24bfafea7111b12e90
要每隔20秒自动运行百里香,可以将其添加到crontab中。Windows用户可能可以使用服务(不要引用我的话)。
* * * * * DISPLAY=:0 /home/eero/Documents/thyme/track-thyme-log.sh
* * * * * ( sleep 20; DISPLAY=:0 /home/eero/Documents/thyme/track-thyme-log.sh )
* * * * * ( sleep 40; DISPLAY=:0 /home/eero/Documents/thyme/track-thyme-log.sh )
运行
克隆存储库,安装在virtualenv中并运行:
git clone git@github.com:Eerovil/TrackLater.git
cd TrackLater
mkvirtualenv tracklater -p python3.7 -a .
pip install .
tracklater
启动服务器的附加示例命令。必须在根目录中运行。
FLASK_APP=tracklater python -m flask run
用法
从百里香中选择时间条目,然后单击导出。
您也可以双击时间线来创建条目。通过选择、拖动等方式进行编辑。
贡献
构建和运行项目很容易,因为您可以简单地克隆repo并开始制作prs。
如果您的工作流与我的工作流不完全相同,并且您需要其他功能,请创建问题,我们可以开始支持您所需的模块。
对未来支持的想法:
- JIRA时间跟踪
- 也许是一个Chrome页面历史分析器?
设置指南
创建一个名为user_settings.py
的文件到根文件夹(包含app.py
)
要加载测试设置,可以将from test_settings import *
添加到文件末尾。这将使用测试数据,不会进行实际的api调用。
每个模块H作为自己的设置dict,包含每个组的设置dict。还有
用于非组特定设置的global
键。
此示例设置文件包含两个组:group1
和group2
。
在示例workers工作流中,group1
的问题从jira获取,而group2
的问题从taiga.io获取,
所以你会发现jira设置没有group2
键,而taiga设置没有group1
键。
时间跟踪(计费)通过TOGGL完成。而且,这两个组碰巧都有自己的工作区,显然还有自己的git存储库。
# edit to your liking and save as ~/.config/tracklater.json. Remove the comments
{
"TESTING": false,
"ENABLED_MODULES": [
"thyme",
"gitmodule",
"toggl",
"taiga",
"jira",
"slack"
],
"UI_SETTINGS": {
"toggl": {
"global": "#E01A22"
},
"thyme": {
"global": "#1aef65"
},
"gitmodule": {
"global": "#F44D27"
},
"slack": {
"global": "#4A154B"
}
},
"TOGGL": {
"global": {
"API_KEY": "your-api-key"
},
"group1": {
"NAME": "First Group",
"PROJECTS": {
"Development": "default",
"Bug fixing": "bug"
}
},
"group2": {
"NAME": "Second Group",
"PROJECTS": {
"Development": "default",
"Bug fixing": "default"
}
}
},
"GIT": {
"global": {
# Only commits made by users with EMAILS will be shown
"EMAILS": ["firstname.lastname@email.com"]
},
"group1": {
# Full path to the git repo
"REPOS": ["/full/path/to/group1/repo"]
},
"group2": {
"REPOS": ["/full/path/to/group2/repo"]
}
},
"JIRA": {
"group1": {
# Each group must have these settings
"CREDENTIALS": ["username", "password"],
"URL": "https://group1.atlassian.net",
"PROJECT_KEY": "DEV"
}
},
"TAIGA": {
"global": {
"CREDENTIALS": ["username", "password"]
},
"group2": {
# project_slug can be found in the URL
"project_slug": "username-group2"
}
},
"THYME": {
"global": {
# Directory containing the json files generated by thyme
"DIR": "/full/path/to/thyme/dir"
}
},
"SLACK": {
# Each group should contain a workspace to match all messager to a group
"global": {
# Global catch-all workspace for all groups
"API_KEY": "legacy-slack-api-key-global",
"USER_ID": "your-user-id"
},
"group2": {
# Messages in this workspace will be matched to group2
"API_KEY": "legacy-slack-api-key-group2",
"USER_ID": "your-user-id"
}
}
}