Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mujx/hakatime
Wakatime server implementation & analytics dashboard
https://github.com/mujx/hakatime
mithriljs self-hosted servant wakatime wakatime-dashboard wakatime-server
Last synced: 3 months ago
JSON representation
Wakatime server implementation & analytics dashboard
- Host: GitHub
- URL: https://github.com/mujx/hakatime
- Owner: mujx
- License: unlicense
- Created: 2020-02-26T15:02:37.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-04-20T11:41:38.000Z (9 months ago)
- Last Synced: 2024-08-01T16:30:15.838Z (6 months ago)
- Topics: mithriljs, self-hosted, servant, wakatime, wakatime-dashboard, wakatime-server
- Language: Haskell
- Homepage: https://hakatime.mtx-dev.xyz
- Size: 1.47 MB
- Stars: 620
- Watchers: 11
- Forks: 46
- Open Issues: 22
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
- awesome - mujx/hakatime - Wakatime server implementation & analytics dashboard (Haskell)
- awesome-starred - mujx/hakatime - Wakatime server implementation & analytics dashboard (Haskell)
- awesome-starred - mujx/hakatime - Wakatime server implementation & analytics dashboard (Haskell)
README
# hakatime
[![Latest version](https://img.shields.io/github/v/release/mujx/hakatime)](https://github.com/mujx/hakatime/releases)
[![BuiltWithNix](https://img.shields.io/badge/Built_With-Nix-5277C3.svg?logo=nixos&labelColor=73C3D5)](https://nixos.org/)Hakatime is a server implementation of [Wakatime](https://wakatime.com/). You can use it as a self-hosted alternative.
It comes together with a dashboard which provides a graphical representation of the collected data.
## Features
- Import Wakatime activity using an API token and a range of dates.
- See time spent on Github commits.
- Forward incoming heartbeats to another Wakatime compatible server (e.g `wakatime.com`)
- Group projects together with tags (e.g `#work`, `#personal`) and view their aggregated statistics.
- User registration & login through the UI.
- Leaderboards for all the users of the instance.
- Badge generation for a project that displays that total amount of hours spent for a configurable
time period. [![my-app](https://hakatime.mtx-dev.xyz/badge/svg/4e8273d1-84bc-46f9-890b-14fdfb83cdcc?days=14)](https://hakatime.mtx-dev.xyz/badge/svg/4e8273d1-84bc-46f9-890b-14fdfb83cdcc?days=7)
- Global and per project charts
- Breakdown by project or language.
- Breakdown by day of week and hour of the day.
- Timeline of activity for a configurable time-frame.
- Total time spent per file.
- API token management & generation.## Demo
There is an instance [here](https://hakatime.mtx-dev.xyz) that you can use to send data or browse
around.Use `demo` as username and `demodemo` as password or create your own user to login. You can create
an API token and try sending your data.## Client setup
After you've generated a new API token from Hakatime's UI, update your `~/.wakatime.cfg` file like below:
```ini
[settings]
api_key=# e.g api_url=https://hakatime.mtx-dev.xyz/api/v1/users/current/heartbeats.bulk for the demo instance.
api_url=/api/v1/users/current/heartbeats.bulk# e.g If you're using the docker-compose-deploy.yml to test things locally, use the following:
# api_url=http://localhost:8080/api/v1/users/current/heartbeats.bulk
```The file's location might be different depending on your system and editor. Please consult the [client docs](https://wakatime.com/plugins)
for further information.## Deployment
You can use the following docker-compose setup for testing locally or an actual
deployment. Change `HAKA_BADGE_URL` to match the actual external endpoint of your
instance.Deploying on ARM is also possible using the `mujx/hakatime:latest-arm` or `mujx/hakatime:v1.7.3-arm` image or the dedicated
Dockerfile ([`Dockerfile.arm`](/Dockerfile.arm)) to build the image.```yaml
version: "3"
services:
server:
container_name: hakatime
image: mujx/hakatime:v1.7.3
environment:
# DB settings.
HAKA_DB_HOST: haka_db
HAKA_DB_PORT: 5432
HAKA_DB_NAME: test
HAKA_DB_PASS: test
HAKA_DB_USER: test
# Server settings.
# Fill out this field if the api is behind another path (e.g behind a reverse proxy).
# This will adjust the Set-Cookie path for all the /auth related API calls.
HAKA_API_PREFIX: ""
# Update this with the external endpoint that you use to access hakatime.
HAKA_BADGE_URL: "http://localhost:8080"
HAKA_PORT: 8080
HAKA_SHIELDS_IO_URL: "https://img.shields.io"
HAKA_ENABLE_REGISTRATION: "true" # Toggle after you've created your account.
# Number of hours after which inactive browser sessions will expire (login required).
HAKA_SESSION_EXPIRY: "24"
HAKA_LOG_LEVEL: "info" # Control the verbosity of the logger.
HAKA_ENV: "dev" # Use a json logger for production, otherwise key=value pairs.
HAKA_HTTP_LOG: "true" # If you want to log http requests.
GITHUB_TOKEN: "" # If you want to retrieve time spent per commit. No extra scope is required.
# Add the following variables if you want to forward any received heartbeats to another
# Wakatime compatible server.
HAKA_REMOTE_WRITE_URL: "https://wakatime.com/api/v1/users/current/heartbeats.bulk"
# You can also use this URL format to forward heartbeats to Wakapi:
# https://[wakapi-instance]/api/compat/wakatime/v1/users/current/heartbeats.bulk
HAKA_REMOTE_WRITE_TOKEN: ""
ports:
# This will start the services on all interfaces.
# More info here: https://github.com/compose-spec/compose-spec/blob/master/spec.md#ports
- "8080:8080"
haka_db:
container_name: haka_db
image: postgres:12-alpine
environment:
POSTGRES_DB: test
POSTGRES_PASSWORD: test
POSTGRES_USER: test
volumes:
- deploy_db_data:/var/lib/postgresql/datavolumes:
deploy_db_data: {}
```To start all the services run:
```bash
$ docker-compose -f ./docker-compose-deploy.yml up
```and navigate to [http://localhost:8080](http://localhost:8080) to access the dashboard.
## Building
### Server
Requirements:
- [GHC](https://www.haskell.org/ghc/) (tested with 8.8 & 8.10)
- [libpq](https://www.postgresql.org/docs/11/libpq.html) (PostgreSQL bindings)
- [cabal-install](https://www.haskell.org/cabal/) (Build system for Haskell)```bash
cabal build
cabal run exe:hakatime -- run
```### Dashboard
The output files will be located at `dashboard/dist`.
Requirements:
- Node.js & npm
```bash
cd dashboardnpm install
npm run prod
```## CLI options
```
hakatime :: v1.7.3Usage: hakatime COMMAND
Wakatime server implementationAvailable options:
-h,--help Show this help textAvailable commands:
create-token Create a new auth token
create-user Create a new user account
run-migrations Apply pending database migrations
run Start the Server
```## Screens
### Overview
![Overview Page](img/overview.png "Overview Page")
### Projects
![Projects Page](img/projects.png "Projects Page")
![Projects Page - Commits](img/commits.png "Projects Page - Commits")
## Contributing
Any kind of contribution is greatly appreciated. This could be:
- Bug fixes
- Suggesting/Implementing new features
- UI/UX improvements/suggestions
- Code refactoring