{"id":20850421,"url":"https://github.com/noteed/humming","last_synced_at":"2025-10-11T08:32:57.529Z","repository":{"id":66654551,"uuid":"8543427","full_name":"noteed/humming","owner":"noteed","description":"queue_classic in Haskell","archived":false,"fork":false,"pushed_at":"2024-03-07T11:26:11.000Z","size":67,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-12T16:35:57.541Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/noteed.png","metadata":{"files":{"readme":"README.md","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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2013-03-03T22:08:40.000Z","updated_at":"2024-02-26T15:59:27.000Z","dependencies_parsed_at":"2024-03-07T12:51:15.320Z","dependency_job_id":null,"html_url":"https://github.com/noteed/humming","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/noteed/humming","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noteed%2Fhumming","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noteed%2Fhumming/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noteed%2Fhumming/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noteed%2Fhumming/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/noteed","download_url":"https://codeload.github.com/noteed/humming/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noteed%2Fhumming/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006611,"owners_count":26084148,"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","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-11-18T03:09:26.055Z","updated_at":"2025-10-11T08:32:57.493Z","avatar_url":"https://github.com/noteed.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Humming - `queue_classic` in Haskell\n\nHumming implements job queues and time-based job scheduling in Haskell on top\nof PostgreSQL. The job queue is a port of the Ruby\n[`queue_classic`](https://github.com/QueueClassic/queue_classic) library.\n\nThis package also provides a `humming` command-line program to interact with\n`queue_classic` or Humming.\n\n## Overview\n\nHumming essentially manages two PostgreSQL tables: one for the queues, and one\nfor the scheduled jobs.\n\nJobs can be pushed to (or retrieved from) Humming using any programming\nlanguage that can talk to PostgreSQL. In particular, you can use this library\nin Haskell, [`queue_classic`](https://github.com/QueueClassic/queue_classic) in\nRuby, or [Pueuey](https://github.com/cecton/pueuey) in Python.\n\nJobs are scheduled by writing to the scheduled jobs table. Moving scheduled\njobs to Humming queues is done by running the `humming schedule` process.\n\n## Example usage\n\nA `humming` executable is provided.\n\n    \u003e export DB='postgres://username:password@localhost/database'\n    \u003e humming create  --database-url $DB\n    \u003e humming drop    --database-url $DB\n    \u003e humming enqueue --database-url $DB \\\n        --queue FOO --method play --arguments '{}'\n    \u003e humming count   --database-url $DB [--queue FOO]\n    \u003e humming delete  --database-url $DB --job 4\n    \u003e humming lock    --database-url $DB --queue FOO\n    \u003e humming work    --database-url $DB --queue FOO\n\n    \u003e humming schedule --database-url $DB [--queue FOO]\n\n`humming schedule` push endlessly scheduled jobs to their respective queues. It\nis possible to take care of only jobs destined to a specific queue with the\n`--queue` option. It is safe to run multiple `humming schedule` processes\n(possibly on different hosts).\n\nInstead of a `--database-url` option, it is possible to use the\n`HUMMING_CONNECTION_STRING` environment variable.\n\n## Tests\n\nTests can be run withing GHCi with the `runTests` function.\n\n## Limitations\n\n- Uses `procpid` from `pg_stat_activity` which was renamed `pid` in PostgreSQL\n  9.2.\n- Probably doesn't reconnect after a connection error.\n- It should be possible to pass --database-url value via a file.\n- The table holding the jobs is hard-coded to `queue_classic_jobs`.\n- Not much logging is done (and actually only stdout is used).\n- Need to handle signals.\n- Doesn't handle more than one queue per worker.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoteed%2Fhumming","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoteed%2Fhumming","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoteed%2Fhumming/lists"}