1.0.2 • Published 3 years ago
heroku-addonpool v1.0.2
Manages Addon Pool of an App in Heroku.
# NOTE:
# The app with addons (pool app) must be different from the app
# that uses the addons because heroku resets the pool app each
# time a configuration variable is changed.
# set heroku cli login in environment variables
HEROKU_CLI_LOGIN=youremail@domain.com
HEROKU_CLI_PASSWORD=yourpassword
# also as of now you also need to purge cache before build
heroku repo:purge_cache -a yourpoolapp
var Pool = require('heroku-addonpool');
// Pool(<id>, <app>, <opt>)
/* Assume "ci-herokuaddonpool" has 2 postgresql addons provisioned.
* There are 3 consumers which need access to a postgresql database,
* for a limited amount of time. Since we have only 2 available, we
* create a pool to enable consumers to acquire (remove) and release
* (add) database from the pool. If no database is available in the
* pool, a consumer will have to wait (Promise) until the resource
* is released by some other consumer.
*/
var pg = Pool('heroku-postgresql', 'ci-herokuaddonpool', {
'config': /(HEROKU_POSTGRESQL|DATABASE)\S*URL/g,
'log': true
});
pg.setup().then((ans) => {
var cona = 'consumer-a';
var conb = 'consumer-b';
var conc = 'consumer-c';
console.log(ans); // available addons (Map)
console.log(ans.size); // number of addons
pg.remove(cona).then((ans) => {
console.log(ans.name); // name of the addon
console.log(ans.attachments); // app to addon attachments
console.log(ans.installedAt); // provision date
console.log(ans.owningApp); // owner app of this addon
console.log(ans.plan); // addon service:plan
console.log(ans.price); // addon price
console.log(ans.state); // addon state
console.log(ans.value); // addon access url
console.log(`${cona} has acquired ${ans.name}`);
console.log(`-> connection string: ${ans.value}`);
// consumer-a uses database for 20s
setTimeout(() => {
console.log(`${cona} is releasing ${ans.name}`);
pg.add(cona);
}, 20000);
}).then(() => {
return pg.remove(conb);
}).then((ans) => {
console.log(`${conb} has acquired ${ans.name}`);
console.log(`-> connection string: ${ans.value}`);
// consumer-b uses database for 10s
setTimeout(() => {
console.log(`${conb} is releasing ${ans.name}`);
pg.add(conb);
}, 10000);
}).then(() => {
return pg.remove(conc);
}).then((ans) => {
// consumer-c waits for 10s until consumer-b releases
console.log(`${conc} has acquired ${ans.name}`);
console.log(`-> connection string: ${ans.value}`);
// consumer-c uses database for 10s
setTimeout(() => {
console.log(`${conc} is releasing ${ans.name}`);
pg.add(conc);
}, 10000);
});
});
1.0.2
3 years ago
1.0.1
3 years ago
1.0.0
3 years ago
0.1.20
3 years ago
0.1.21
3 years ago
0.1.19
3 years ago
0.1.17
4 years ago
0.1.16
5 years ago
0.1.15
8 years ago
0.1.14
8 years ago
0.1.13
8 years ago
0.1.12
8 years ago
0.1.11
8 years ago
0.1.10
8 years ago
0.1.9
8 years ago
0.1.8
8 years ago
0.1.7
8 years ago
0.1.6
8 years ago
0.1.5
8 years ago
0.1.4
8 years ago
0.1.3
8 years ago
0.1.2
8 years ago
0.1.1
8 years ago
0.1.0
8 years ago
0.0.34
8 years ago
0.0.33
8 years ago
0.0.32
8 years ago
0.0.31
8 years ago
0.0.30
8 years ago
0.0.29
8 years ago
0.0.28
8 years ago
0.0.27
8 years ago
0.0.26
8 years ago
0.0.25
8 years ago
0.0.24
8 years ago
0.0.23
8 years ago
0.0.22
8 years ago
0.0.21
8 years ago
0.0.20
8 years ago
0.0.19
8 years ago
0.0.18
8 years ago
0.0.17
8 years ago
0.0.16
8 years ago
0.0.15
8 years ago
0.0.14
8 years ago
0.0.13
8 years ago
0.0.12
8 years ago
0.0.11
8 years ago
0.0.10
8 years ago
0.0.9
8 years ago
0.0.8
8 years ago
0.0.7
8 years ago
0.0.6
8 years ago
0.0.4
8 years ago
0.0.3
8 years ago
0.0.2
8 years ago
0.0.1
8 years ago
0.0.0
8 years ago