{"id":19935124,"url":"https://github.com/optimizely/optimizelyd-maildir","last_synced_at":"2025-05-03T12:31:02.162Z","repository":{"id":71780562,"uuid":"97652722","full_name":"optimizely/optimizelyd-maildir","owner":"optimizely","description":"Fullstack disk based event dispatcher using maildir queue","archived":true,"fork":false,"pushed_at":"2017-07-21T21:25:18.000Z","size":52,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-01T12:17:17.842Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/optimizely.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2017-07-18T23:36:30.000Z","updated_at":"2023-09-29T15:47:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"491fd41e-b8d1-4469-828b-f2d1df16a851","html_url":"https://github.com/optimizely/optimizelyd-maildir","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/optimizely%2Foptimizelyd-maildir","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/optimizely%2Foptimizelyd-maildir/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/optimizely%2Foptimizelyd-maildir/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/optimizely%2Foptimizelyd-maildir/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/optimizely","download_url":"https://codeload.github.com/optimizely/optimizelyd-maildir/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252190689,"owners_count":21708928,"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-12T23:18:52.281Z","updated_at":"2025-05-03T12:31:02.156Z","avatar_url":"https://github.com/optimizely.png","language":"Rust","readme":"# optimizelyd-maildir \n\nThis is another approach to implementing optimizelyd as a maildir queue implementation.  Right now, it is a very generic maildir queue consumer that takes files from new moves them to cur, sends them via json if a request body was provided.  If there is no request body it is sent as a GET.  The response is read but not consumed at this point. The queued items are json human readable files that contain a url and a request body.\n\n* since it uses the filesystem, it is very transparent and also easy to understand from an ops perspective.  \n* it is very easy to scale via nfs mount.\n* it is easy to scale with process as well since there can be several queue writers and several queue consumers at the same time. \n* it uses os calls.\n\nFor these reasons, the [Rust](https://www.rust-lang.org/en-US/) programming language was chosen for implementation.\n\n## Background\nThe queue is based on the lockless maildir queue.  The maildir queue file structure is shown below:\n\n    basedir/\n        tmp/\n        new/\n        cur/\n\nhttps://en.wikipedia.org/wiki/Maildir\n\nThe idea is that the client creates a unique filename (the one caveat) in tmp and then moves the file to new. File move is an atomic operation on all operating systems.  That is a `push` onto the queue.  \nThe optimizelyd-maildir picks up a file from new and moves it to cur, then the file is read and passed to the jsonsender to send.  That is the `pop`.\n\n## Project status\n\n* `src/` contains implementation of the maildirqueue, the jsonsender, and the main module to drive the consuming.\n* `examples/` contains a sample maildirqueue directory.  You can test by running `../optimizelyd-maildir client` for client test and leave off the client `..\\optimizelyd-maildir` if you want the server side. \n\n## Building\n\ncargo build\n\n### Prerequisites\n\n```sh\n# Install [rustup](https://github.com/rust-lang-nursery/rustup.rs), the Rust toolchain manager,\n# with the instructions found at https://rustup.rs/. Current instructions as of May 2017:\ncurl https://sh.rustup.rs -sSf | sh\n\n# Bash users, you can persist the just-installed CLI tools to your $PATH with\necho 'export PATH=$HOME/.cargo/bin:$PATH' \u003e\u003e ~/.bash_profile`\n```\n\n### Compiling, running tests, etc.\n\n```sh\n# From the repo root,\ncargo build\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foptimizely%2Foptimizelyd-maildir","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foptimizely%2Foptimizelyd-maildir","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foptimizely%2Foptimizelyd-maildir/lists"}