{"_id":"@byu-se/quartermaster","_rev":"9-38f8fad216ad93894ad70b29d92f1c01","name":"@byu-se/quartermaster","dist-tags":{"latest":"1.1.5"},"versions":{"1.0.0":{"name":"@byu-se/quartermaster","version":"1.0.0","description":"A Tool for Modeling and Simulating System Degradation","keywords":["quartermaster","graceful","degradation","fault","tolerance","simulation","circuit-breaker","retry","timeout","stage"],"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"start":"ts-node src/index.ts","build":"tsc","build:watch":"tsc -w","test":"jest --runInBand","example:circleci":"ts-node examples/circleci/model_original.ts","example:circleci:a":"ts-node examples/circleci/model_a.ts","example:circleci:b":"ts-node examples/circleci/model_b.ts","example:circleci:c":"ts-node examples/circleci/model_c.ts","example:aggressive-timeouts":"ts-node examples/aggressive-timeouts.ts","example:custom-statistics":"ts-node examples/custom-statistics.ts","example:manual":"ts-node examples/manual.ts","example:queue-sorting":"ts-node examples/queue-sorting.ts","example:timed":"ts-node examples/timed.ts","example:variable-traffic":"ts-node examples/variable-traffic.ts"},"author":{"name":"Matt Pope"},"license":"MIT","dependencies":{},"devDependencies":{"@types/jest":"^26.0.3","@types/node":"^14.0.11","colors":"^1.4.0","jest":"^26.1.0","jest-serial-runner":"^1.1.0","ts-jest":"^26.1.1","ts-node":"^8.10.2","typescript":"^3.9.5"},"directories":{"doc":"docs","example":"examples","test":"test"},"repository":{"type":"git","url":"git+https://github.com/BYU-SE/quartermaster.git"},"bugs":{"url":"https://github.com/BYU-SE/quartermaster/issues"},"homepage":"https://github.com/BYU-SE/quartermaster#readme","gitHead":"2779424ea280de9caa6bf8deac6b09df0d21e168","_id":"@byu-se/quartermaster@1.0.0","_nodeVersion":"14.11.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-E7CV7R6tk2a7XCX5VqmRGu4MPll1Sj1CIDIMl6D87uV1ESoTvLLa4TKe0njeLJRWpdIrzl/zcoUdln5NFSJYyg==","shasum":"54d0eeb99b6518a928e0907a8dd83fa266af580d","tarball":"https://registry.npmjs.org/@byu-se/quartermaster/-/quartermaster-1.0.0.tgz","fileCount":61,"unpackedSize":75109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsL4qCRA9TVsSAnZWagAAHfgQAItHH79QxZl94Z6Ig9gm\nI6TbuQzylOQpIV8ki4HVJXRIx6s7CgZvX3oVPjM7019F2OBOZVGCvQlElo7k\nClQyhL8EpORBAvmiqCUKa/s4AT8+DJfG6JoVYNc0ZLPwofVv35RGt4YXaugT\nyJW4xxKU570u/dHqDSLCpKy3sXzJGHUuiUWXRRGl/yEzVFhtqteB9GGtE81C\nMaYg2iThdjwHBto/gwMlubxisrVu0JoOXfLfnbh93wX3OLt3QyerbE/sxLr9\nduKXHvwW117Wgu/b1POw1R2sxDfs3FXKVAHHO31vJS6os4P/u2IdWbfJPPOg\ngnt7FRp6NbJoVfMH8wOo8klo/Gh2G5iTxDcuIaycsARXXf1WG+DA7KPJ8P0y\nJTjcehzghcqeUNvT2So4kMVWu/iqoJoNw8BtfU0qLnA/MHlslJiULbXL2cbK\n1q/flSYfoXANAG76n97e4tFCa9iDca5KO95MDJethWWqtVMRqRWFf8zj74tu\n2D3d8EiU8MRAuRLUCPoUMWc8ESPxnTfklYedMVxFtd0okH8/g3Cw/P1aTEdF\ns8Nch6Axyjm+qHahlvh6FXR2TINLTDqbAmEUQ9gHPILyuNSTLme28wNjYwFu\ngbxneSh81li8Wy7BeHLKPfjSzx4MFX6oZU+glcaYCWqKOZsJpPXgMjclkS9/\nilj/\r\n=Cr6U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYSOkUt7iqF0cVli5E77WUdZByydwsoBLpSivjXsySLwIgbrC9f+HSM42RWtkmlNB8TXzwF5JReGQ9flpveySgnlw="}]},"_npmUser":{"name":"unknownguardian","email":"matt@profusiondev.net"},"maintainers":[{"name":"unknownguardian","email":"matt@profusiondev.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/quartermaster_1.0.0_1605418537952_0.2948424268102674"},"_hasShrinkwrap":false},"1.1.0":{"name":"@byu-se/quartermaster","version":"1.1.0","description":"A Tool for Modeling and Simulating System Degradation","keywords":["quartermaster","graceful","degradation","fault","tolerance","simulation","circuit-breaker","retry","timeout","stage"],"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"start":"ts-node src/index.ts","build":"tsc","build:watch":"tsc -w","test":"jest --runInBand","example:circleci":"ts-node examples/circleci/model_original.ts","example:circleci:a":"ts-node examples/circleci/model_a.ts","example:circleci:b":"ts-node examples/circleci/model_b.ts","example:circleci:c":"ts-node examples/circleci/model_c.ts","example:aggressive-timeouts":"ts-node examples/aggressive-timeouts.ts","example:custom-statistics":"ts-node examples/custom-statistics.ts","example:manual":"ts-node examples/manual.ts","example:queue-sorting":"ts-node examples/queue-sorting.ts","example:timed":"ts-node examples/timed.ts","example:variable-traffic":"ts-node examples/variable-traffic.ts"},"author":{"name":"Matt Pope"},"license":"MIT","dependencies":{},"devDependencies":{"@types/jest":"^26.0.3","@types/node":"^14.0.11","jest":"^26.1.0","jest-serial-runner":"^1.1.0","ts-jest":"^26.1.1","ts-node":"^8.10.2","typescript":"^3.9.5"},"gitHead":"d2fff833e67a959410663ffe6979698012e992ea","_id":"@byu-se/quartermaster@1.1.0","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-N4Ot3jsmsGmolHwOOJk4Af/AMbdVn+SvQsY51AUhuHe1Won/yd26Md2D2qnTuE+j2oJoDD/wCkpcfQt9IvooyA==","shasum":"e0af0d76f2f6af960463124d5d560ef9b9972526","tarball":"https://registry.npmjs.org/@byu-se/quartermaster/-/quartermaster-1.1.0.tgz","fileCount":96,"unpackedSize":145647,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhQUXhCRA9TVsSAnZWagAASdAQAJ2uq4gPOTTVlFtp46fg\nned0yIGUDVSNlfdAxn6Sv57DSVHbtYE7L2/Aewt6wS4safV0m1HDog/Gqpzy\nlQZArTZ/6WY2p4hb781gWK2co9l4Fhu6469uqhDqeopu9U6i6dKfX5VgVsAP\nL6BFmr0/b4ll87MDFogajlMrOkMdEtgK4UTUbJBVZUatnRnSVZuxuaxxV3Fh\nAr/cM3SB72OMfD3ON8ZhEz49pSLelpMhdXsHlFumy7ju6l+QQiNiP5cNzkZ7\nGcU34m90Uix6TNp3pvr75TQ5+DdGLKIFjdDbPMOqF42D9ZrUijSeC5RxnE8E\n+P79ur2QSB192QIDvjTwtQyvGd+rMhWnbzdYaA7riDbpeNwjWfdpl6Tm62hj\nGd0wZcqHlrzIYKkaxC7/j7nIuOISwyL/4h584HT4bD/2ljHq6Ty2N6xspXYA\neyvRtD/6d2tq0Vd/KkwMozXt0ZBjVkxq1x/zSi97qJUILRSPDHgww4dj4N8G\nqREXU8idS+dGHNoBjOfXkJUmfWM6aRSJkQh1PHUQNdiBeB0Wm8uGf8XmF/YU\nrR3HPLJADLskhCI0hcyPvxRdGpxbgroQ8ox8VJg7W5JVxfFuSAWM0rMVULUl\nUMfkRaqEC+355vTa/tEaYwV6nExGvDICUsHK0KwoWLsLXcAizZuw/vuZgYGy\nc58Q\r\n=/x3K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDXb+URk1FADhlI34Kzj6yJnc5K/G/RHakxZVQvMgR2wIgOUdEvc2TXx54v96sqEyXyMWhbbrzlHcf+VsMomv/wRs="}]},"_npmUser":{"name":"unknownguardian","email":"matt@profusiondev.net"},"directories":{},"maintainers":[{"name":"unknownguardian","email":"matt@profusiondev.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/quartermaster_1.1.0_1631667681528_0.6419426169439229"},"_hasShrinkwrap":false},"1.1.3":{"name":"@byu-se/quartermaster","version":"1.1.3","description":"A Tool for Modeling and Simulating System Degradation","repository":{"type":"git","url":"https://github.com/BYU-SE/quartermaster.git"},"homepage":"https://github.com/BYU-SE/quartermaster","keywords":["quartermaster","graceful","degradation","fault","tolerance","simulation","circuit-breaker","retry","timeout","stage"],"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"start":"ts-node src/index.ts","build":"tsc","build:watch":"tsc -w","test":"jest --runInBand","example:circleci":"ts-node examples/circleci/model_original.ts","example:circleci:a":"ts-node examples/circleci/model_a.ts","example:circleci:b":"ts-node examples/circleci/model_b.ts","example:circleci:c":"ts-node examples/circleci/model_c.ts","example:aggressive-timeouts":"ts-node examples/aggressive-timeouts.ts","example:custom-statistics":"ts-node examples/custom-statistics.ts","example:manual":"ts-node examples/manual.ts","example:queue-sorting":"ts-node examples/queue-sorting.ts","example:timed":"ts-node examples/timed.ts","example:variable-traffic":"ts-node examples/variable-traffic.ts"},"author":{"name":"Matt Pope"},"license":"MIT","dependencies":{},"devDependencies":{"@types/jest":"^26.0.3","@types/node":"^14.0.11","jest":"^26.1.0","jest-serial-runner":"^1.1.0","ts-jest":"^26.1.1","ts-node":"^8.10.2","typescript":"^3.9.5"},"licenseText":"MIT License\n\nCopyright (c) 2020 Matt Pope\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_id":"@byu-se/quartermaster@1.1.3","dist":{"shasum":"3ba8e7db67fb17be0dd74115fa589d8d0982ce41","integrity":"sha512-0fcY5btBVjJEiyCnczgtnjw9AKFolX8TuFKbxkFj2Em7XdQJhl4Ro9AVwyPmx9lAVTieyV4Sd7jtPqb3eXoV7Q==","tarball":"https://registry.npmjs.org/@byu-se/quartermaster/-/quartermaster-1.1.3.tgz","fileCount":44,"unpackedSize":478234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhl/hFCRA9TVsSAnZWagAAXHAP/AoWz7SD+ybMRalyLxqf\nL4Iq//x01MZljfsg5PX57oXBOpqVxBwbfZthktTFMURrGrBt9TM4T6MgSlb4\nrDEf3P++vuLQ6ZpZNr+iRsHScM6QiV+iLrC+RHPreMRWtUkBVcCtNCPgcrDT\nZ6hQecaWDXlspNQYqZr6/rOiyB+GwpuTodDuKjklbvhCmZQEQ/OWxTlNLRel\nEEhbaPJtPu289tKEKhhHafBKMnUvg9Xxoh2nRMZ+VpuJ+11FwPS29kGWHBUr\n+56AbOtimdfX7lY1HQCCXy56Vl/sJNo5frt6GTaDZESyopae9VBlK/YYLf46\n/2i4kyuQl1BqajFo4htpsKPzu09ntTdnHI90Js0AGLWwGo5iMbPM1rozU89z\nfCBZRd5RW8uW4ygATLBTnN4doeTn1ML+jJl8ubixKYB1t7AFQ5io2JUzenMg\nGdmhd+wbNQOQwLuk6lQyj/Kzf09u6oatk3Z7btN0I6WrvokjpTNrehO72TBk\nFpPW3hG0uMzSOT1ISj9pJFuSaFBExBNyxW9QCl6mB7U7Bsn0OaCIjh9Y8PAp\nkU3Gerrbz78u2FjEUjF76LD5/2s67WzYy+MiF3UyDW6fk5DxPWiOkhMaCfPm\nbXJOVKsHjXGZbHEw4n+lljmbPlMlTPBMvV7UzwrlSmxKLz2/yQZ/sQzD8SNX\nbUN/\r\n=1ofe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNrpkACIz6FNRbn3BEK0N6PXXP0lRuyjsnCZz61mXWqQIgBfgYTWcrZ+8uSfNpYZCpdpOEH+la6bOy4octHYbuLko="}]},"_npmUser":{"name":"unknownguardian","email":"matt@profusiondev.net"},"directories":{},"maintainers":[{"name":"unknownguardian","email":"matt@profusiondev.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/quartermaster_1.1.3_1637349445543_0.6226355626160855"},"_hasShrinkwrap":false},"1.1.4":{"name":"@byu-se/quartermaster","version":"1.1.4","description":"A Tool for Modeling and Simulating System Degradation","repository":{"type":"git","url":"git+https://github.com/BYU-SE/quartermaster.git"},"homepage":"https://github.com/BYU-SE/quartermaster","keywords":["quartermaster","graceful","degradation","fault","tolerance","simulation","circuit-breaker","retry","timeout","stage"],"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"start":"ts-node src/index.ts","build":"tsc","build:watch":"tsc -w","test":"jest --runInBand","example:circleci":"ts-node examples/circleci/model_original.ts","example:circleci:a":"ts-node examples/circleci/model_a.ts","example:circleci:b":"ts-node examples/circleci/model_b.ts","example:circleci:c":"ts-node examples/circleci/model_c.ts","example:aggressive-timeouts":"ts-node examples/aggressive-timeouts.ts","example:custom-statistics":"ts-node examples/custom-statistics.ts","example:manual":"ts-node examples/manual.ts","example:queue-sorting":"ts-node examples/queue-sorting.ts","example:timed":"ts-node examples/timed.ts","example:variable-traffic":"ts-node examples/variable-traffic.ts"},"author":{"name":"Matt Pope"},"license":"MIT","dependencies":{},"devDependencies":{"@types/jest":"^26.0.3","@types/node":"^14.0.11","jest":"^26.1.0","jest-serial-runner":"^1.1.0","ts-jest":"^26.1.1","ts-node":"^8.10.2","typescript":"^3.9.5"},"gitHead":"95a037820e0975e201911114a1e0662efeefb082","bugs":{"url":"https://github.com/BYU-SE/quartermaster/issues"},"_id":"@byu-se/quartermaster@1.1.4","_nodeVersion":"16.11.1","_npmVersion":"8.0.0","dist":{"integrity":"sha512-yhLL9XACx1xz7Eakc1jjWmc+Ct3nTyn2uxRUKCc+3LjH9tGgcWFefQS1KJYhqcwTyoJzwwI3T2xFOJoavWJshw==","shasum":"fcdd21b1d84943dd9387a779fe140b9872356142","tarball":"https://registry.npmjs.org/@byu-se/quartermaster/-/quartermaster-1.1.4.tgz","fileCount":89,"unpackedSize":148753,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmJj0CRA9TVsSAnZWagAAKbAP/R7kQRR4OZCFMl4Rj5hA\nzsmhrBy/UONLTo+a3zOva7y8y+duYd5d8O3NoGkS4cpVc0npmO5Zrsze1eOo\nvVKnLuMTp7Ay3Qy+VfWawqsTjXwp+NTSvwJ/3bQmGwB6cTA1Ibis1SVv+6De\nXEVgmqXMXccGqcu1eKzfWjrxUDVhRQhDsfDNJQadSL+7yope0Lfmx0XsuF90\nvxClJ2L95aWpV7cjD+oGSC83HngE5O+ev7PKpjVe+aRHq56HhFRS5p/s9/SE\nHNlw5PHoqfygQLhRQ8vWt4uNB7AxYJQ9VDxNo/T9iU5vjrq8hKytD0lj01Hu\ngOkT/+fMrNI7yE28KFVasSqc73Wug6PA/d63WFqc7xKvf7XfDcszZwskTY5G\nwWYVY2yx/kE5H2I1QEL6t8X1o9NW+gDJ49pQhQexYop/AS7JZXOBnGJ/o2Ug\nX/5gGFhjs3WXxMjtu7++CBSZz1nIJ2fau/1sWNQOrJUALHEKIAI3jaBocTP5\nV4JnH4jmmbfHReFp5i4g51lVE4jluqV6Th2wKwOfR4Wax4NoakSbWwRgZHFP\nKQZXwlsLOrb59RqOD6oOOphZsRv9mGk7kreCvk2qNtQ3nr3oGkOpaGrqPWqU\n3nCPzoO0db6JJOUUTXCdXTA5ho+IXhTiA/PjZGdBqmJgXlVNAE5L6eBobSD1\nxxrm\r\n=1f8F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFchh4nAR+ACEVix62z9ksGvgLhvSTLMMP0ogDBjxCh7AiBbPBVjR8EUAVCTymnDnrXn5kEb4gf7WndoxTPcIJ6PNw=="}]},"_npmUser":{"name":"unknownguardian","email":"matt@profusiondev.net"},"directories":{},"maintainers":[{"name":"unknownguardian","email":"matt@profusiondev.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/quartermaster_1.1.4_1637390580546_0.22701312356364456"},"_hasShrinkwrap":false},"1.1.5":{"name":"@byu-se/quartermaster","version":"1.1.5","description":"A Tool for Modeling and Simulating System Degradation","repository":{"type":"git","url":"git+https://github.com/BYU-SE/quartermaster.git"},"homepage":"https://github.com/BYU-SE/quartermaster","keywords":["quartermaster","graceful","degradation","fault","tolerance","simulation","circuit-breaker","retry","timeout","stage"],"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"start":"ts-node src/index.ts","build":"tsc","build:watch":"tsc -w","test":"jest --runInBand","example:circleci":"ts-node examples/circleci/model_original.ts","example:circleci:a":"ts-node examples/circleci/model_a.ts","example:circleci:b":"ts-node examples/circleci/model_b.ts","example:circleci:c":"ts-node examples/circleci/model_c.ts","example:aggressive-timeouts":"ts-node examples/aggressive-timeouts.ts","example:custom-statistics":"ts-node examples/custom-statistics.ts","example:manual":"ts-node examples/manual.ts","example:queue-sorting":"ts-node examples/queue-sorting.ts","example:timed":"ts-node examples/timed.ts","example:variable-traffic":"ts-node examples/variable-traffic.ts"},"author":{"name":"Matt Pope"},"license":"MIT","dependencies":{},"devDependencies":{"@types/node":"^17.0.23","@types/jest":"^28.1.3","jest":"^28.1.3","ts-jest":"^28.0.7","ts-node":"^10.7.0","typescript":"^4.6.3"},"gitHead":"c0936edadc0d18e7fdec917e68703786f9b9c785","bugs":{"url":"https://github.com/BYU-SE/quartermaster/issues"},"_id":"@byu-se/quartermaster@1.1.5","_nodeVersion":"16.11.1","_npmVersion":"8.0.0","dist":{"integrity":"sha512-Wgju+iXT3Rg2zOjlghQ+E8KYa6Kbr2U2pyC/uJZqljmXlwJ3GbY8dXTaQ8clnjZbrNnYukLXNMEXJuyCyxUDlA==","shasum":"c4572febe0c009ba4128ca62db1451da7d7c5ec8","tarball":"https://registry.npmjs.org/@byu-se/quartermaster/-/quartermaster-1.1.5.tgz","fileCount":92,"unpackedSize":165480,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPWzjgSjbe0jYad9UF49OQMIzLY0+YZI+/n1vQ9BjVYwIgNky2HLzTSnCn5dSOs7nI+vzNOUDJagGgJeiynkQHUMk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi4EDLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrcCw/9HLd7QWMQkNLudYEd4k7NCl1mwFCp8CBhBpSdKxBMy66JbIwm\r\nuW18WuXfIyTGvNj6qkh0V96G6fHCgLZrvfis3EKxbwSwE5I1wwF6lB5ouc1/\r\nWADcZrIYQ5fcikl4X8+DzlzaPXOYn4hWUVj+22LskWtD2vHlBJrW0jzriuVJ\r\nUDIVlG6dmMnjMo7EVdfC6oDU19kA4ShX/26AEa5X30lw2SUDb7Dr37p7aSpA\r\n6bqW4z08M0fkaO95l+kNfg7hyODCD59OgWlNEmXgS9MTtpQGmUz9kdlTNimj\r\nqEiHY8e/krRXoLjUVKrFyWtrzSDeNlV6ZMyxbryodbjRTrBfsZYHtn2PeomF\r\nt9bk5c3vlHHtDyMDZTVgYxV+062KuCEjbItNtHYUp/wOm4x3nU6C16W6qBXk\r\n/ucNuWphtmZgfHhwuOgMvcxpWZy/yhWI1QvlonWtg0qiYU1xr5BDr/lxa5kV\r\nv+hBF9EwtKB4wsP09majiupdhxF6TVrsSsWUn3+hXtyvMSg8+rIAVf17zRcs\r\nOxai7X//W06cWuBsrNM9UJjAoWBFEct4XDyba3iUKWIzEgSZBNnGmwMp9EbW\r\n8/fM2llMrFQof/brpnbbiA3W547sSc6U6T07HSUqvga6ZX5n4Pvky/5JoLW5\r\n8s64SJtC5DZr5HWRlJ9++czcv31YLYY5aZ0=\r\n=VIcG\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"unknownguardian","email":"matt@profusiondev.net"},"directories":{},"maintainers":[{"name":"unknownguardian","email":"matt@profusiondev.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/quartermaster_1.1.5_1658863819361_0.5425238419427114"},"_hasShrinkwrap":false}},"time":{"created":"2020-11-15T05:35:37.691Z","1.0.0":"2020-11-15T05:35:38.094Z","modified":"2023-03-10T05:57:56.484Z","1.1.0":"2021-09-15T01:01:21.749Z","1.1.3":"2021-11-19T19:17:25.748Z","1.1.4":"2021-11-20T06:43:00.997Z","1.1.5":"2022-07-26T19:30:19.556Z"},"maintainers":[{"email":"mattpope4530@gmail.com","name":"matt4530"}],"description":"A Tool for Modeling and Simulating System Degradation","keywords":["quartermaster","graceful","degradation","fault","tolerance","simulation","circuit-breaker","retry","timeout","stage"],"author":{"name":"Matt Pope"},"license":"MIT","readme":"# Quartermaster\n\nA Tool for Modeling and Simulating System Degradation\n\n---\n\n## Installation\n\nTo explore and develop locally, you can clone this repository. Then, run `npm i` to install dependencies. This provides the examples and Typescript source code in an easy to consume format.\n\n## Usage\n\nA sample usage, representing a call to a remote dependency with a cache:\n\n```typescript\nimport {\n  TimedDependency,\n  LRUCache,\n  simulation,\n  eventSummary,\n  stageSummary,\n} from \".\";\n\n/**\n * The timed example is the basic unit of several other examples. It features\n * a timed dependency with available 99.5% of the time and a normally\n * distributed latency with mean = 150 ticks and standard deviation = 20 ticks.\n * Additionally, there is an LRU cache that can contain up to 500 cached items\n * with a max age of 30,000 ticks.\n *\n * The timed dependecy stage could represent a database and the lru cache\n * stage could represent a small, in memory cache that serves to speed up\n * responses to commonly queried items.\n */\n\nconst live = new TimedDependency();\nlive.availability = 0.995;\nlive.mean = 150;\nlive.std = 20;\n\nconst cache = new LRUCache(live);\ncache.ttl = 30000;\ncache.capacity = 500;\n\n/**\n * The keyspace is defined with normally distributed keys with a mean of 999\n * and a standard deviation of 90. Additionally, the simulation will push\n * 40 events every 1,000 ticks through the stages.\n *\n * This keyspace could represent a service which responds to a (relatively)\n * small set of distinct events at the rate of 40 requests per second.\n */\n\nsimulation.keyspaceMean = 999;\nsimulation.keyspaceStd = 90;\nsimulation.eventsPer1000Ticks = 40;\n\nwork();\nasync function work() {\n  const events = await simulation.run(cache, 20000);\n  eventSummary(events);\n  stageSummary([cache, live]);\n}\n```\n\n## The Quartermaster Model\n\nA system that is fault tolerant is resistant to faults, often by allowing the system to degrade gracefully instead of failing immediately. There are certain techniques that are commonly used in industry to this end, such as caching, retries, short timeouts, and the circuit breaker pattern.\n\nIn Quartermaster, a user can describe a system's structure and the fault-tolerant techniques it uses as various configurations of a single unit: the stage. A stage contains a queue and several methods which can be overwritten: `add()`, `workOn()`, `success()`, and `fail()`. Events are the basic units that pass through stages. In a web system, these events are analogous to http requests.\n\n`add()` An admission control function, called before the event enters the queue.\n\\\n`workOn()` Called when the event has left the queue and has been picked up by a worker.\n\\\n`success()` Called when `workOn()` did not throw an error or returned a rejected promise.\n\\\n`fail()` Called when `workOn()` did throw an error or returned a rejected promise.\n\n[Read more about the Quartermaster model.](docs/model.md)\n\n## Simulating With Quartermaster\n\nSome tools are provided to implement these methods and simulate their behavior, such as a variety of prebuilt fault tolerant techniques. Since this repository is a TypeScript implementation of the model, we've included a brief overview here. You can [read more in-depth about how Quartermaster simulates a system](docs/simulation.md) in our docs.\n\n### Rich Default Output\n\nThe simulation's `eventSummary([...events])` displays a quick summary of statistics of the events.\n\n```\nOverview of Events\n┌─────────┬───────────┬───────┬─────────┬──────────────┬─────────────┐\n│ (index) │   type    │ count │ percent │ mean_latency │ std_latency │\n├─────────┼───────────┼───────┼─────────┼──────────────┼─────────────┤\n│    0    │ 'success' │   4   │ '0.800' │  '153.500'   │  '10.874'   │\n│    1    │  'fail'   │   1   │ '0.200' │  '144.000'   │   '0.000'   │\n└─────────┴───────────┴───────┴─────────┴──────────────┴─────────────┘\n```\n\nThe simulation also comes bundled with `stageSummary([...stages])` methods, which displays rich output of a set of stages.\n\n```\nOverview of event time spent in stage\n┌─────────┬─────────────┬───────────┬──────────┐\n│ (index) │    stage    │ queueTime │ workTime │\n├─────────┼─────────────┼───────────┼──────────┤\n│    0    │ 'LRUCache'  │     7     │   604    │\n│    1    │ 'TimedLive' │    10     │   592    │\n└─────────┴─────────────┴───────────┴──────────┘\n\nOverview of event behavior in stage\n┌─────────┬─────────────┬─────┬────────┬─────────┬──────┐\n│ (index) │    stage    │ add │ workOn │ success │ fail │\n├─────────┼─────────────┼─────┼────────┼─────────┼──────┤\n│    0    │ 'LRUCache'  │  5  │   5    │    4    │  1   │\n│    1    │ 'TimedLive' │  5  │   5    │    4    │  1   │\n└─────────┴─────────────┴─────┴────────┴─────────┴──────┘\n```\n\n### Prebuilt Techniques\n\nYou don't need to code your entire system up in Quartermaster to use it. Quartermaster comes with a set of prebuilt components and techniques that are easily configured. If they don't cover all of your requirements, we've provided examples to help build whatever you need.\n\n- Caching\n  - Unbounded: An unlimited size cache\n  - LRU: A fixed capacity cache, that evicts the least-recently-used elements.\n  - Background Cache: A cache which serves inbound requests strictly from cached data, and refreshes the requested data in the background.\n- Circuit Breaker Pattern: Don't wait for an operation that will (or is likely to) fail.\n- Retry: Attempt multiple times upon a failure.\n- Timeout: Limit how much time is being spent working on an event.\n\nAdditionally, we've included some prebuilt stages to simulate the actual dependency (such as a database, another remote dependency, or even a 3rd party API) that is being called.\n\n- AvailableDependency: Responds immediately with some availability.\n- TimedDependency: Responds with some availability and latency distributions.\n\nOur [examples](docs/examples.md) show you many of these in action.\n\n### Custom Statistics\n\nWhile the Quartermaster looks at measuring and evaluating degradation, it is possible that you want to measure additional properties or analyze other behavior of the system. The model is flexible enough to support doing this, and we've provided an example which includes a few ways to do so. See [the custom statistics example](docs/examples.md).\n\n## Examples\n\nThe `./examples` directory includes some interesting examples with documentation and descriptions.\n\n[Read more about examples provided with Quartermaster.](docs/examples.md)\n\n## Tests\n\nTests can be run with `npm test`.\n\nAll prebuilt components have been placed under tests, located in the `./tests` directory.\n\n## Contributing\n\nOpen a pull request with your contributions to the Quartermaster, or request a feature by opening an issue.\n\n## Known Issues\n\nNode 10: Some behavioral changes - likely due to changes in the NodeJS task processing. Please use Node 12+\n\n## Publications\n\n**ICSE 2021 Demonstrations Track**: *Quartermaster: A Tool for Modeling and Simulating System Degradation* [Proceedings](https://www.computer.org/csdl/proceedings-article/icse-companion/2021/121900a057/1sET5Q6iyyI) | [arXiv](https://arxiv.org/abs/2103.03956#) \n","readmeFilename":"README.md","homepage":"https://github.com/BYU-SE/quartermaster","repository":{"type":"git","url":"git+https://github.com/BYU-SE/quartermaster.git"},"bugs":{"url":"https://github.com/BYU-SE/quartermaster/issues"}}