{"id":20461001,"url":"https://github.com/ericgj/trackd","last_synced_at":"2025-03-05T11:27:32.903Z","repository":{"id":1145159,"uuid":"1026980","full_name":"ericgj/trackd","owner":"ericgj","description":"Command line time tracking with Thin/Sinatra daemon","archived":false,"fork":false,"pushed_at":"2011-04-22T00:43:11.000Z","size":166,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-16T00:35:26.044Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ericgj.png","metadata":{"files":{"readme":"README.markdown","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-10-26T22:12:52.000Z","updated_at":"2014-03-01T13:02:15.000Z","dependencies_parsed_at":"2022-08-16T12:15:20.069Z","dependency_job_id":null,"html_url":"https://github.com/ericgj/trackd","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericgj%2Ftrackd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericgj%2Ftrackd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericgj%2Ftrackd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericgj%2Ftrackd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ericgj","download_url":"https://codeload.github.com/ericgj/trackd/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242017438,"owners_count":20058430,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-15T12:22:48.422Z","updated_at":"2025-03-05T11:27:32.884Z","avatar_url":"https://github.com/ericgj.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# trackd\n\nA rewrite of the command-line ReinH-track (voxdolo/track)\nas a skinny daemon + command-line client.\n\n## Usage\n\n    # start server daemon\n    trackd -d start\n    \n    # start time  =\u003e POST /1/projects/my-project/logs?task=config%20dbase\n    track start my-project config dbase\n    \n    # or simply\n    track my-project config dbase\n    \n    # stop time on current  =\u003e PUT /1/current/logs\n    track stop\n    \n    # stop time with message  =\u003e PUT /1/current/logs?message=I%20did%20some%20work\n    track stop \"I did some work\"\n    \n    # restart last   =\u003e POST /1/last/logs\n    track restart\n    \n    # print report of times by project and task  =\u003e GET /1/projects\n    track cat\n    \n    # print summary report by project   =\u003e GET /1/status\n    track status\n    \n    # print summary report for project by task   =\u003e GET /1/projects/my-project/status\n    track status my-project\n    \n    # print summary report by project and task   =\u003e GET /1/projects/my-project/status?task=config%20dbase\n    track status my-project config dbase\n    \n    # add time to named task    =\u003e  PUT /1/projects/my-project/logs?task=config%20dbase\u0026time=30\n    track add 00:30 my-project config dbase\n    \n    # subtract time from last  =\u003e PUT /1/last/logs?time=-60\n    track sub 01:00\n    \n    # add shortcut\n    track shortcut add mp my-project\n    \n\n## REST API \n(v1 draft - not fully implemented)\n\n\n\u003ctable\u003e\u003ctbody\u003e\n\u003ctr\u003e\n  \u003ctd\u003e Command         \u003c/td\u003e\u003ctd\u003e Verb \u003c/td\u003e\u003ctd\u003e URL                     \u003c/td\u003e\u003ctd\u003e Params         \u003c/td\u003e\u003ctd\u003e Redirect to              \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e start x y       \u003c/td\u003e\u003ctd\u003e POST \u003c/td\u003e\u003ctd\u003e /1/projects/x/logs      \u003c/td\u003e\u003ctd\u003e task=y         \u003c/td\u003e\u003ctd\u003e /1/logs/:id (1)            \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e restart         \u003c/td\u003e\u003ctd\u003e POST \u003c/td\u003e\u003ctd\u003e /1/last/logs      \u003c/td\u003e\u003ctd\u003e -         \u003c/td\u003e\u003ctd\u003e /1/logs/:id                \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e stop            \u003c/td\u003e\u003ctd\u003e PUT  \u003c/td\u003e\u003ctd\u003e /1/current/logs             \u003c/td\u003e\u003ctd\u003e -              \u003c/td\u003e\u003ctd\u003e /1/logs/:id                \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e stop m          \u003c/td\u003e\u003ctd\u003e PUT  \u003c/td\u003e\u003ctd\u003e /1/current/logs/?message=m  \u003c/td\u003e\u003ctd\u003e -              \u003c/td\u003e\u003ctd\u003e /1/logs/:id                \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e add t x y       \u003c/td\u003e\u003ctd\u003e PUT  \u003c/td\u003e\u003ctd\u003e /1/projects/x/logs      \u003c/td\u003e\u003ctd\u003e task=y\u0026time=t  \u003c/td\u003e\u003ctd\u003e /1/logs/:id                \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e add t           \u003c/td\u003e\u003ctd\u003e PUT  \u003c/td\u003e\u003ctd\u003e /1/last/logs      \u003c/td\u003e\u003ctd\u003e time=t  \u003c/td\u003e\u003ctd\u003e /1/logs/:id                \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e sub t x y       \u003c/td\u003e\u003ctd\u003e PUT  \u003c/td\u003e\u003ctd\u003e /1/projects/x/logs      \u003c/td\u003e\u003ctd\u003e task=y\u0026time=-t \u003c/td\u003e\u003ctd\u003e /1/logs/:id                \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e sub t           \u003c/td\u003e\u003ctd\u003e PUT  \u003c/td\u003e\u003ctd\u003e /1/last/logs      \u003c/td\u003e\u003ctd\u003e time=-t  \u003c/td\u003e\u003ctd\u003e /1/logs/:id                \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e cat             \u003c/td\u003e\u003ctd\u003e GET  \u003c/td\u003e\u003ctd\u003e /1/logs (2)         \u003c/td\u003e\u003ctd\u003e -              \u003c/td\u003e\u003ctd\u003e -                        \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e status          \u003c/td\u003e\u003ctd\u003e GET  \u003c/td\u003e\u003ctd\u003e /1/status (3)           \u003c/td\u003e\u003ctd\u003e -              \u003c/td\u003e\u003ctd\u003e -                        \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e status x        \u003c/td\u003e\u003ctd\u003e GET  \u003c/td\u003e\u003ctd\u003e /1/projects/x/status (4)\u003c/td\u003e\u003ctd\u003e -              \u003c/td\u003e\u003ctd\u003e -                        \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e status x y      \u003c/td\u003e\u003ctd\u003e GET  \u003c/td\u003e\u003ctd\u003e /1/projects/x/status (5)\u003c/td\u003e\u003ctd\u003e task=y         \u003c/td\u003e\u003ctd\u003e -                        \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\nAll messages are in JSON format.\n\n(1) log message:\n\n    id: \u003cint\u003e\n    task : \u003cstring\u003e\n    started_at : \u003ctime\u003e\n    stopped_at : \u003ctime\u003e\n    adjusted : \u003cint\u003e\n    duration : \u003cint\u003e\n    message : \u003cstring\u003e\n    project :\n      id: \u003cint\u003e\n      name: \u003cstring\u003e\n    \n(2) logs message (order by started_at desc)\n    \n    -\n      id: \u003cint\u003e\n      task : \u003cstring\u003e\n      started_at : \u003ctime\u003e\n      stopped_at : \u003ctime\u003e\n      adjusted : \u003cint\u003e\n      duration : \u003cint\u003e\n      message : \u003cstring\u003e\n      project :\n        id: \u003cint\u003e\n        name: \u003cstring\u003e\n    -\n      # ...\n\nproject-logs message -- not currently used, GET /1/projects\n\n    -\n      name : \u003cstring\u003e\n      logs :\n        - \n          task : \u003cstring\u003e\n          started_at : \u003ctime\u003e\n          stopped_at : \u003ctime\u003e\n          adjusted : \u003cint\u003e\n          duration : \u003cint\u003e\n          message : \u003cstring\u003e\n        -\n          # ...\n      name : \u003cstring\u003e\n      logs :\n        - # ...\n    # ...\n  \n(3) server status message (note projects are ordered by last_started_at desc, project name)\n\n    server_uptime : \u003cint\u003e\n    total_duration : \u003cint\u003e\n    current_log:\n      id: \u003cint\u003e\n      task : \u003cstring\u003e\n      started_at : \u003ctime\u003e\n      stopped_at : \u003ctime\u003e\n      adjusted : \u003cint\u003e\n      duration : \u003cint\u003e\n      message : \u003cstring\u003e\n      project :\n        id: \u003cint\u003e\n        name: \u003cstring\u003e\n    projects :\n      -\n        name : \u003cstring\u003e\n        last_task : \u003cstring\u003e\n        last_started_at : \u003ctime\u003e\n        last_stopped_at : \u003ctime\u003e\n        last_duration : \u003cint\u003e\n        total_duration : \u003cint\u003e\n      -\n        # ...\n    \n    \n(4) project status message:  (not yet implemented)\n\n    name : \u003cstring\u003e\n    total_duration : \u003cint\u003e\n    tasks :\n      -\n        task : \u003cstring\u003e\n        last_started_at : \u003ctime\u003e\n        last_stopped_at : \u003ctime\u003e\n        last_duration : \u003cint\u003e\n        total_duration : \u003cint\u003e\n      -\n        # ...\n      \n(5) project-task status message:   (not yet implemented)\n    \n    task : \u003cstring\u003e\n    last_started_at : \u003ctime\u003e\n    last_stopped_at : \u003ctime\u003e\n    last_duration : \u003cint\u003e\n    total_duration : \u003cint\u003e\n    project :\n      id: \u003cint\u003e\n      name: \u003cstring\u003e\n     \n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericgj%2Ftrackd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fericgj%2Ftrackd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericgj%2Ftrackd/lists"}