A node Time Tracking application server. Needs a Postgres Database and a client.
Dockerhub: https://hub.docker.com/r/25thfloor/ttrack-server/
Our setups always include a Makefile
which helps with the setup. Needs Docker!
To see all possible targets just enter make
to your cli.
Targets:
-
up
: Starts the whole development stack -
start
: Start the stack in detached mode -
rm
: remove the development stack -
yarn
: to call yarn commands in the running development stack like for examplemake yarn test
to run the tests. -
shell
: get a shell within the server container -
postgres
: get a shell within the postgres container
Just call make up
and it will start the node server in development mode and a postgres database instance with some basic database setup.
The node server will expose port 8000
and 8001
while postgres will expose 5432
for development purposes.
To test the server code you need a running development environment, therefor you need to call make up
prior to the tests.
Then just calling make yarn test
will run the tests using yarn in the server container.
The Docker Image is located at https://hub.docker.com/r/25thfloor/ttrack-server.
It needs a running Database and can be configured using environment variables.
The needed variables are:
- DB_HOST:
your database hostname
- DB_DATABASE:
your database name
- DB_USER:
your database user
- DB_PASSWORD:
your password
Additional there are some optional ones too:
- NODE_ENV:
production
- HOST:
0.0.0.0
- PORT:
8000
- DB_DRIVER:
pg
- DB_PORT:
5432
- DB_SCHEMA:
public
One more thing, Sentry has been prepared so if you want to use it you just need to add your token as environment variable. If you don't use sentry then just ignore the environment variable.
- SENTRY_TOKEN:
your sentry token
The hapi server uses the swagger plugin to show the rest api documentation.
You can access it while the server is running using http://localhost:8000/docs
.
There are several functions implemented which do much of the work.
- create_user(firstname text, lastname text, email text, employment_start date, target interval): create a new user and it corresponding target time
- user_add_new_target_time(id integer, startdate date, target interval): change target time for a user and also update days and periods.
- user_get_periods_for_type(id integer, start_date date, period_type character varying DEFAULT 'Vacation'::character varying): get vacations for given user starting with start_date
- user_worktime(id INTEGER, due_date DATE): helper function to analyze the carry calculations in the database for given user
- user_calculate_carry_time(id INTEGER, due_date DATE): calculates carry time for given user
- user_get_day_periods(id INTEGER, date_from TIMESTAMP, date_to TIMESTAMP): Return days between the interval for the user including the periods for that time
- user_get_start_date(id integer): get first date for a user relevant for ttrack
- user_get_target_time(id INTEGER, day_date DATE): get the calculated target time for a user on a given date.
- ttrack_get_all_vacations(): get all vacations of all users from now to the beginning of ttrack
- user_get_average_day_time(id integer, day_date date): get the average day time of a user, does not check for workdays. (used by user_get_target_time)
To setup the users you need to be comfortable using the psql shell and working with the database as there is no Administration Interface, everything is done using pure sql.
The user
table is your main starting point.
You can use the database function create_user
to add a user with a target time.
Users change their target time for whatever reason. TTrack is able to handle this. You can always change the target time at a specific point in time using the user_add_new_target_time
database function.
Since because of security concerns we needed to purge the git commit history, here are the contributors of the project.
- Marcus Artner [email protected]
- Phillip Bisson [email protected]
- Andreas de Pretis [email protected]
- Stefan Oestreicher [email protected]
- Martin Prebio [email protected]
- Robert Prosenc [email protected]
- Ali Sharif [email protected]
- Pierre Strohmeier [email protected]
- Thomas Subera [email protected]
It all started as a fun project and never majored of it. It is strictly a tool for tracking our times with our needs. (f.e. Austrian Holidays, no Administration, ...)