{"id":18673037,"url":"https://github.com/vicanso/superagent-load-balancer","last_synced_at":"2025-04-12T01:31:22.593Z","repository":{"id":57374646,"uuid":"56062183","full_name":"vicanso/superagent-load-balancer","owner":"vicanso","description":"load balacner plugin for superagent","archived":false,"fork":false,"pushed_at":"2017-03-24T13:32:09.000Z","size":27,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-25T21:36:01.861Z","etag":null,"topics":["balance","superagent"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/vicanso.png","metadata":{"files":{"readme":"README.md","changelog":"History.md","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":"2016-04-12T12:44:34.000Z","updated_at":"2024-08-15T11:10:45.000Z","dependencies_parsed_at":"2022-08-27T10:42:04.228Z","dependency_job_id":null,"html_url":"https://github.com/vicanso/superagent-load-balancer","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/vicanso%2Fsuperagent-load-balancer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vicanso%2Fsuperagent-load-balancer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vicanso%2Fsuperagent-load-balancer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vicanso%2Fsuperagent-load-balancer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vicanso","download_url":"https://codeload.github.com/vicanso/superagent-load-balancer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248504246,"owners_count":21115138,"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":["balance","superagent"],"created_at":"2024-11-07T09:13:49.339Z","updated_at":"2025-04-12T01:31:22.331Z","avatar_url":"https://github.com/vicanso.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# superagent-load-balancer\n\n[![Build Status](https://travis-ci.org/vicanso/superagent-load-balancer.svg?branch=master)](https://travis-ci.org/vicanso/superagent-load-balancer)\n[![Coverage Status](https://img.shields.io/coveralls/vicanso/influxdb-nodejs/master.svg?style=flat)](https://coveralls.io/r/vicanso/superagent-load-balancer?branch=master)\n[![npm](http://img.shields.io/npm/v/superagent-load-balancer.svg?style=flat-square)](https://www.npmjs.org/package/superagent-load-balancer)\n[![Github Releases](https://img.shields.io/npm/dm/superagent-load-balancer.svg?style=flat-square)](https://github.com/vicanso/superagent-load-balancer)\n\nLoad balancer plugin for superagent\n\n## Installation\n\n```bash\n$ npm install superagent-load-balancer\n```\n\n## Examples\n\nView the [./examples](examples) directory for working examples.\n\n\n## API\n\n### get\n\n- `backends` the backend list\n\n  - `name` The name of backend\n\n  - `host` The host of backend\n\n  - `protocol` The protocol, optional, default is 'http'\n\n  - `ip`  The ip of backend, optional\n\n  - `port` The port of backend, optional\n\n  - `weight` The weight of backend, it is for 'round-robin'\n\n  - `backup` Set the backend as backup, optional\n\n- `type` balance algorithm: `url`, `leastconn`, `round-robin`, `first`, `url-path`, default is `round-robin`\n\n\n```js\nconst request = require('superagent');\nconst Balancer = require('superagent-load-balancer');\nconst balancer = new Balancer([\n  {\n    host: 'domain.com',\n    ip: '192.168.1.1',\n    port: 8080,\n    weight: 10,\n  },\n  {\n    host: 'domain.com',\n    ip: '192.168.1.2',\n    port: 8080,\n    weight: 2,\n  },\n]);\nconst plugin = balancer.plugin();\n\nrequest.get('/user')\n  .use(plugin)\n  .then((res) =\u003e {\n    console.info(res.body);\n  })\n  .catch(console.error);\n```\n\n### startHealthCheck\n\n- `options` {ping: function, interval: ms}\n\n  - `ping` ping function, the function will return promise. If resolve, the backend is healthy. If reject, the backend is sick.\n\n  - `ms`  check interval\n\n  - `window` each check the total count of ping\n\n  - `threshold` each check the healthy count is bigger than threshold, the backend is healthy. Otherwise is sick\n\n```js\nconst request = require('superagent');\nconst Balancer = require('superagent-load-balancer');\nconst balancer = new Balancer([\n  {\n    host: 'domain1.com',\n    weight: 10,\n  },\n  {\n    host: 'domain2.com',\n    weight: 2,\n  },\n]);\nconst ping = (backend) =\u003e {\n  const url = `http://${backend.host}/ping`;\n  return request.get(url).timeout(300);\n};\nbalancer.startHealthCheck({\n  ping,\n});\n\nconst plugin = balancer.plugin();\n\nrequest.get('/user')\n  .use(plugin)\n  .then((res) =\u003e {\n    console.info(res.body);\n  }).catch(console.error);\n```\n\n### on\n\nAdd listener function to `healthy`, `sick`, `hit` event\n\n```js\nconst request = require('superagent');\nconst Balancer = require('superagent-load-balancer');\nconst balancer = new Balancer([\n  {\n    host: 'domain1.com',\n    weight: 10,\n  },\n  {\n    host: 'domain2.com',\n    weight: 2,\n  },\n]);\nconst ping = (backend) =\u003e {\n  const url = `http://${backend.host}/ping`;\n  return request.get(url).timeout(300);\n};\nbalancer.startHealthCheck({\n  ping,\n});\n\nbalancer.on('healthy', (server) =\u003e {\n  console.info(server);\n});\nbalancer.on('sick', (server) =\u003e {\n  console.info(server);\n});\nbalancer.on('hit', (server) =\u003e {\n  console.info(server);\n});\n\nconst plugin = balancer.plugin();\n\nrequest.get('/user')\n  .use(plugin)\n  .then((res) =\u003e {\n    console.info(res.body);\n  }).catch(console.error);\n```\n\n\n### getAvailableServers\n\nGet the available server list, which isn't disabled and backup.\n\n```js\nconst request = require('superagent');\nconst Balancer = require('superagent-load-balancer');\nconst balancer = new Balancer([\n  {\n    host: 'domain1.com',\n    weight: 10,\n  },\n  {\n    host: 'domain2.com',\n    weight: 2,\n    backup: true,\n  },\n]);\nconst ping = (backend) =\u003e {\n  const url = `http://${backend.host}/ping`;\n  return request.get(url).timeout(300);\n};\nbalancer.startHealthCheck({\n  ping,\n});\n// [ { id: '51d27b36cb9c34ff', host: 'domain1.com', weight: 10 } ]\nconsole.info(balancer.getAvailableServers());\n```\n\n### addAlgorithm\n\nAdd the custom load balance algorithm\n\n- `name` The algorithm's name\n\n- `fn` The algorithm, it should return an integer.\n\n```js\nconst request = require('superagent');\nconst Balancer = require('superagent-load-balancer');\nconst balancer = new Balancer([\n  {\n    host: 'domain1.com',\n  },\n  {\n    host: 'domain2.com',\n  },\n], 'getByUrl');\nbalancer.addAlgorithm('getByUrl', (request) =\u003e {\n  return request.url.length;\n});\n\nconst plugin = balancer.plugin();\n\nrequest.get('/user')\n  .use(plugin)\n  .then((res) =\u003e {\n    console.info(res.body);\n  })\n  .catch(console.error);\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvicanso%2Fsuperagent-load-balancer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvicanso%2Fsuperagent-load-balancer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvicanso%2Fsuperagent-load-balancer/lists"}