{"_id":"workaholic","_rev":"26-d610a70ef8db8a59af289a4a3367af98","name":"workaholic","description":"workaholic","dist-tags":{"latest":"1.3.0"},"versions":{"0.1.0":{"name":"workaholic","version":"0.1.0","repository":{"type":"git","url":"https://github.com/flrngel/workaholic"},"author":{"name":"flrngel"},"license":"MIT","bugs":{"url":"https://github.com/flrngel/workaholic/issues"},"homepage":"https://github.com/flrngel/workaholic","devDependencies":{"redis":"~0.9.1","forever-monitor":"~1.2.3","hiredis":"~0.1.15","forever":"~0.10.10"},"description":"workaholic","main":"./workaholic","dependencies":{"coffee":"~0.0.1","forever":"~0.10.10","forever-monitor":"~1.2.3","hiredis":"~0.1.15","redis":"~0.9.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":["workaholic","worker"],"_id":"workaholic@0.1.0","dist":{"shasum":"bad38f3a317b3bacf639c95413cf7fd4c241f3e6","tarball":"https://registry.npmjs.org/workaholic/-/workaholic-0.1.0.tgz","integrity":"sha512-eXYEcaI3DzK8vnsVg+GN+wdzSw4niD1yxy7fEXOCH5hukRxQOvsCkYqmbOGLfn8jmt8GOg89gkkuB8EzBG1fig==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAw94fxAgG2JtQb5eJRMA0fET+5iGbMNqHX8Q0luyCVMAiEArsjAQnb/sO806/Mtt4AQvf0bkLdu/1SCFW+lcnxNUGM="}]},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"flrngel","email":"flrngel@gmail.com"},"maintainers":[{"name":"flrngel","email":"flrngel@gmail.com"}]},"1.0.1":{"name":"workaholic","version":"1.0.1","repository":{"type":"git","url":"https://github.com/flrngel/workaholic"},"author":{"name":"flrngel"},"license":"MIT","bugs":{"url":"https://github.com/flrngel/workaholic/issues"},"homepage":"https://github.com/flrngel/workaholic","devDependencies":{"redis":"~0.9.1","forever-monitor":"~1.2.3","hiredis":"~0.1.15","forever":"~0.10.10","async":"^0.8.0","node-uuid":"^1.4.1","express":"^4.2.0","body-parser":"^1.2.0"},"description":"workaholic","main":"./workaholic","dependencies":{"coffee":"~0.0.1","forever":"~0.10.10","forever-monitor":"~1.2.3","hiredis":"~0.1.15","redis":"~0.9.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":["workaholic","worker"],"_id":"workaholic@1.0.1","dist":{"shasum":"8ccfebce8351ae4433566bf0ed2a50a2f7cebabd","tarball":"https://registry.npmjs.org/workaholic/-/workaholic-1.0.1.tgz","integrity":"sha512-JM2KF/wp6qmb/ZHvTyogn0DF3Y48xD4cZJTHAiZl9ElVMkCqMuVvfi2/FEYrPGD2TgMnsxd8+jD5WN1sp2yBXg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLL/Gm3r/jUfPS6o7OEHew4L2BE5QsRrnMIqoessmg5AIgf7U3jrRBXUr0l7X9n+/6/dDtqyZIHzVae15s72wE0mY="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"flrngel","email":"flrngel@gmail.com"},"maintainers":[{"name":"flrngel","email":"flrngel@gmail.com"}]},"1.1.0":{"name":"workaholic","version":"1.1.0","repository":{"type":"git","url":"https://github.com/flrngel/workaholic"},"author":{"name":"flrngel"},"license":"MIT","bugs":{"url":"https://github.com/flrngel/workaholic/issues"},"homepage":"https://github.com/flrngel/workaholic","devDependencies":{"redis":"~0.9.1","forever-monitor":"~1.2.3","hiredis":"~0.1.15","forever":"~0.10.10","async":"^0.8.0","node-uuid":"^1.4.1","express":"^4.2.0","body-parser":"^1.2.0","jshint":"^2.5.0"},"description":"workaholic","main":"./workaholic","dependencies":{"coffee":"~0.0.1","forever":"~0.10.10","forever-monitor":"~1.2.3","hiredis":"~0.1.15","redis":"~0.9.1"},"scripts":{"test":"jshint boss/boss.js worker/worker.js front/front.js config.json worklist.json"},"keywords":["workaholic","worker"],"_id":"workaholic@1.1.0","dist":{"shasum":"eae28bd1991e56e9a7c9e911faac3b4089c93cfc","tarball":"https://registry.npmjs.org/workaholic/-/workaholic-1.1.0.tgz","integrity":"sha512-2UpF1OMADRXMhR25x0JcQhAvMlYu2MsXVAambpeIrUq2mN9MVxzWQ9BVrPAsXMiJVq4zzAcEARi59zM6nhWh7A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTp1p2r5DECIQkZHN5AjegbGif+ebapx1ez1Z94TGgGgIgA9ECFtpp5GEXPSDtmCjKvUIVzBaQ6szL91Qi0qZAxC4="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"flrngel","email":"flrngel@gmail.com"},"maintainers":[{"name":"flrngel","email":"flrngel@gmail.com"}]},"1.1.1":{"name":"workaholic","version":"1.1.1","repository":{"type":"git","url":"https://github.com/flrngel/workaholic"},"author":{"name":"flrngel"},"license":"MIT","bugs":{"url":"https://github.com/flrngel/workaholic/issues"},"homepage":"https://github.com/flrngel/workaholic","devDependencies":{"redis":"~0.9.1","forever-monitor":"~1.2.3","hiredis":"~0.1.15","forever":"~0.10.10","async":"^0.8.0","node-uuid":"^1.4.1","express":"^4.2.0","body-parser":"^1.2.0","jshint":"^2.5.0"},"description":"workaholic","main":"./workaholic","dependencies":{"coffee":"~0.0.1","forever":"~0.10.10","forever-monitor":"~1.2.3","hiredis":"~0.1.15","redis":"~0.9.1"},"scripts":{"test":"jshint boss/boss.js worker/worker.js front/front.js config.json worklist.json"},"keywords":["workaholic","worker"],"_id":"workaholic@1.1.1","dist":{"shasum":"816c57408bb946bfd8ce965c24ca4fb95d74554b","tarball":"https://registry.npmjs.org/workaholic/-/workaholic-1.1.1.tgz","integrity":"sha512-as2Ca+H/MyiD+R97/n2ZPqwEJ4i2uAXZlsjwq4g2gUXQfj4P4KcXu25WWEYN0iPKdB1LVsMDP1EIrsAZUNzTJA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCB03lSh6UhTyzL+yvjIy/UL/PUrTmOHmWK+Vg0rjhtTQIgBbGtzqEBwkxE+O6/P9Y5V+vhqgbNKlIYvUUQNw1wUY0="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"flrngel","email":"flrngel@gmail.com"},"maintainers":[{"name":"flrngel","email":"flrngel@gmail.com"}]},"1.1.2":{"name":"workaholic","version":"1.1.2","repository":{"type":"git","url":"https://github.com/flrngel/workaholic"},"author":{"name":"flrngel"},"license":"MIT","bugs":{"url":"https://github.com/flrngel/workaholic/issues"},"homepage":"https://github.com/flrngel/workaholic","devDependencies":{"redis":"~0.9.1","forever-monitor":"~1.2.3","hiredis":"~0.1.15","forever":"~0.10.10","async":"^0.8.0","node-uuid":"^1.4.1","express":"^4.2.0","body-parser":"^1.2.0","jshint":"^2.5.0"},"description":"workaholic","main":"./workaholic","dependencies":{"coffee":"~0.0.1","forever":"~0.10.10","forever-monitor":"~1.2.3","hiredis":"~0.1.15","redis":"~0.9.1"},"scripts":{"test":"jshint boss/boss.js worker/worker.js front/front.js config.json worklist.json"},"keywords":["workaholic","worker"],"_id":"workaholic@1.1.2","dist":{"shasum":"dc678542f0a1b3d34ebb85e3f8c0c397051a70ea","tarball":"https://registry.npmjs.org/workaholic/-/workaholic-1.1.2.tgz","integrity":"sha512-MWxOvn0TBGI44MbPL6vwDPeoqIF7e8MH4epkJDR1BB1UwsnvfdVgDXCm5GLgPV9lYtovpwwwagEKIkVYX+LxNQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDLSL1vWnzSe1w9/o43Atng4YcYi6ssHF1sMeh5sYV2CAiBUoMzegw0dvccQTg4DJoerJmttaj+T2hMQS/BwdBvO3A=="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"flrngel","email":"flrngel@gmail.com"},"maintainers":[{"name":"flrngel","email":"flrngel@gmail.com"}]},"1.2.0":{"name":"workaholic","version":"1.2.0","repository":{"type":"git","url":"https://github.com/flrngel/workaholic"},"author":{"name":"flrngel"},"license":"MIT","bugs":{"url":"https://github.com/flrngel/workaholic/issues"},"homepage":"https://github.com/flrngel/workaholic","devDependencies":{"redis":"~0.9.1","forever-monitor":"~1.2.3","hiredis":"~0.1.15","forever":"~0.10.10","async":"^0.8.0","node-uuid":"^1.4.1","express":"^4.2.0","body-parser":"^1.2.0","jshint":"^2.5.0"},"description":"workaholic","main":"./workaholic","dependencies":{"coffee":"~0.0.1","forever":"~0.10.10","forever-monitor":"~1.2.3","hiredis":"~0.1.15","redis":"~0.9.1"},"scripts":{"test":"jshint boss/boss.js worker/worker.js front/front.js config.json worklist.json"},"keywords":["workaholic","worker"],"_id":"workaholic@1.2.0","dist":{"shasum":"1be1a5e9c3e3ae6c88d995de2f70bf790bef49ce","tarball":"https://registry.npmjs.org/workaholic/-/workaholic-1.2.0.tgz","integrity":"sha512-m2559DK5JCKl1u4XY1iddWfPfvy86ZEOtMizOxXXSn0ilJrwc2dMSidyDTCeYYebiryNrbdordOigs56s2dIzA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOu+K8MUTn2qDyCzY2jlZ46w6+B3VJEDllmBe1weSofAIgTdi/IaaWPNtCCrqz6oWDaSQBVPVcqatgJOJKcrXCr2A="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"flrngel","email":"flrngel@gmail.com"},"maintainers":[{"name":"flrngel","email":"flrngel@gmail.com"}]},"1.2.2":{"name":"workaholic","version":"1.2.2","repository":{"type":"git","url":"https://github.com/flrngel/workaholic"},"author":{"name":"flrngel"},"license":"MIT","bugs":{"url":"https://github.com/flrngel/workaholic/issues"},"homepage":"https://github.com/flrngel/workaholic","devDependencies":{"redis":"~0.9.1","forever-monitor":"~1.2.3","hiredis":"~0.1.15","forever":"~0.10.10","async":"^0.8.0","node-uuid":"^1.4.1","express":"^4.2.0","body-parser":"^1.2.0","jshint":"^2.5.0"},"description":"workaholic","main":"./workaholic","dependencies":{"coffee":"~0.0.1","forever":"~0.10.10","forever-monitor":"~1.2.3","hiredis":"~0.1.15","redis":"~0.9.1"},"scripts":{"test":"jshint boss/boss.js worker/worker.js front/front.js config.json worklist.json"},"keywords":["workaholic","worker"],"_id":"workaholic@1.2.2","dist":{"shasum":"e47503a0881780e96dcef3f7774a4527d3aa5c1e","tarball":"https://registry.npmjs.org/workaholic/-/workaholic-1.2.2.tgz","integrity":"sha512-dvrIoX3FRXAL3yyoHB0iu5OSxKBqrOLeWP8Th+2zxh5zXE+25GEw+erQQwupI4BDwrkNpRAUGd0z46xeE5U6zg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAUMDwm/1AZPGrXxfUBUDlLyqL2ePFLCgSR5qEwpNLGgIgEgp83+a4U8xawVjwDwtXoFGsTlCusYyqSTSrJ6Hd/Jo="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"flrngel","email":"flrngel@gmail.com"},"maintainers":[{"name":"flrngel","email":"flrngel@gmail.com"}]},"1.3.0":{"name":"workaholic","version":"1.3.0","repository":{"type":"git","url":"https://github.com/flrngel/workaholic"},"author":{"name":"flrngel"},"license":"MIT","bugs":{"url":"https://github.com/flrngel/workaholic/issues"},"homepage":"https://github.com/flrngel/workaholic","devDependencies":{"redis":"~0.9.1","forever-monitor":"~1.2.3","hiredis":"~0.1.15","forever":"~0.10.10","async":"^0.8.0","node-uuid":"^1.4.1","express":"^4.2.0","body-parser":"^1.2.0","jshint":"^2.5.0"},"description":"workaholic","main":"./workaholic","dependencies":{"coffee":"~0.0.1","forever":"~0.10.10","forever-monitor":"~1.2.3","hiredis":"~0.1.15","redis":"~0.9.1"},"scripts":{"test":"jshint boss/boss.js worker/worker.js front/front.js config.json worklist.json"},"keywords":["workaholic","worker"],"_id":"workaholic@1.3.0","dist":{"shasum":"3f38da1ea225a275a133f074f067898cfb65e608","tarball":"https://registry.npmjs.org/workaholic/-/workaholic-1.3.0.tgz","integrity":"sha512-a80rY+Ypd57nxRJMAFUor+0tS6f2QU+czV+JCTqyAZHlbZVgVbH3DGtluJNWLZA2dNCWrDztCKyEzN2KOzqsyg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCh8BpDS1UEPHjYZK9cPMU20fNqgIKXkAu6j+xI3U5HZgIgEp/YvC8QDRrP/0MwGiPHJXQCSrdbGseQsWiLOzfppLQ="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"flrngel","email":"flrngel@gmail.com"},"maintainers":[{"name":"flrngel","email":"flrngel@gmail.com"}]}},"readme":"# Workaholic\n\n![Travis](https://travis-ci.org/flrngel/workaholic.svg?branch=master)\n\nWorkaholic is distributed [`execFile`](http://nodejs.org/api/child_process.html#child_process_child_process_execfile_file_args_options_callback) worker using [Redis](http://redis.io) for work(task) assign, written with javascript([node.js](http://nodejs.org))\n\n## Architecture\n\n![workaholic architecture v1.1](https://raw.githubusercontent.com/flrngel/workaholic/screenshots/workaholic_architecture_v1.1.png)\n\n![workaholic data structure v1.2](https://raw.githubusercontent.com/flrngel/workaholic/screenshots/workaholic_data_structure_v1.2.png)\n\n- [Redis](http://redis.io) : use for task queueing, ticket storing\n\n- `boss/boss.js` : fork and control workers [forever](https://github.com/nodejitsu/forever)\n\n\t- `worker/worker.js` : workers, get tasks from Redis\n\n- `front/front.js` : front-desk, registers task to Redis\n\n## Installation\n\n\tgit clone https://github.com/flrngel/workaholic\n\tcd workaholic\n\tnpm install\n\n## worklist.json\n\nworklist.json is for use to execute file([execFile](http://nodejs.org/api/child_process.html#child_process_child_process_execfile_file_args_options_callback))\n\nIt is highly recommended **not to use** interpreter applications for security reasons, execute as your own signle script.\n\n\t{\n\t\t\"<task name>\": {\n\t\t\t\"execFile\" : \"<File to execute>\",\n\t\t\t\"options\": {\n\t\t\t\t// see available options from http://nodejs.org/api/child_process.html#child_process_child_process_execfile_file_args_options_callback\n\t\t\t}\n\t\t}\n\t}\n\n## config.json\n\nconfig.json is for use to control Workaholic(`boss`, `worker`, `front`)\n\n\t{\n\t\t// redis configuration\n\t\t\"redis\":{\n\t\t\t\"host\": \"localhost\",\n\t\t\t\"port\": 6379,\n\t\t\t// ticket time to live - work ticket(key in redis) expire time(redis expire). -1 to permanent\n\t\t\t\"ticket_ttl\": 60,\n\t\t\t// authentication using redis auth command, removable\n\t\t\t\"password\": \"<insert_your_redis_auth_password>\"\n\t\t},\n\t\t// front-desk configuration\n\t\t\"front\":{\n\t\t\t// listening port\n\t\t\t\"port\": 8007,\n\t\t\t// authentication for front-desk, removable\n\t\t\t\"password\": \"<insert_your_password>\"\n\t\t},\n\t\t// worker configuration\n\t\t\"worker\":{\n\t\t\t// number of workers\n\t\t\t\"number\": 4,\n\t\t\t// wait time\n\t\t\t\"sleeptime\": 100\n\t\t}\n\t}\n\n## front/front.js (response type: json)\n\n#### GET /info\n\nGet Workaholic package information\n\n#### POST /work/new\n\nrequest\n\n\t{\n\t\t\"ticketing(optional;boolean type)\": true,\n\t\t\"data\": {\n\t\t\t\"taskName(string type)\": \"<task anme>\",\n\t\t\t\"argument(array type, strings)\": [\"<arg1>\",\"<arg2>...\"]\n\t\t}\n\t}\n\nresponse\n\n\t{\n\t\t\"result\": (true|false),\n\t\t\"ticket(optional)\": <ticket uuid>\n\t}\n\n#### GET /work/status\n\nrequest\n\n\t/work/status?ticket=<ticket uuid>\n\nresponse\n\n- `queue`: task is in queue pool\n\n- `assigned`: worker assigned task\n\n- `end`: task was successfully ended\n\n- `error`: task had error\n\n\n## Roadmap (todo list)\n\n- ~~architecture security improvement~~ (status: unstable)\n- front-desk access list\n- benchmark test\n- worker status\n- thin worker\n- task tracking\n- boss controller\n- ~~workers with different tasklist~~\n","maintainers":[{"name":"flrngel","email":"flrngel@gmail.com"}],"time":{"modified":"2022-06-29T03:18:12.754Z","created":"2013-12-10T07:25:17.607Z","0.1.0":"2014-01-16T06:28:50.751Z","1.0.0":"2014-05-14T09:35:06.309Z","1.0.1":"2014-05-15T07:16:22.010Z","1.1.0":"2014-05-16T05:28:49.698Z","1.1.1":"2014-05-16T05:57:48.690Z","1.1.2":"2014-05-28T04:47:48.898Z","1.2.0":"2014-05-28T04:48:16.665Z","1.2.1":"2014-06-03T04:38:32.007Z","1.2.2":"2014-06-03T04:47:13.078Z","1.3.0":"2014-06-03T07:22:49.754Z"},"author":{"name":"flrngel"},"repository":{"type":"git","url":"https://github.com/flrngel/workaholic"},"homepage":"https://github.com/flrngel/workaholic","keywords":["workaholic","worker"],"bugs":{"url":"https://github.com/flrngel/workaholic/issues"},"license":"MIT","readmeFilename":"README.md"}