@hapiness/consul

Hapiness module for consul

Usage no npm install needed!

<script type="module">
  import hapinessConsul from 'https://cdn.skypack.dev/@hapiness/consul';
</script>

README

Hapiness

Consul Module

Consul module for the Hapiness framework.

To get started with consul, you can begin with having a look at the consul official documentation

Table of contents

Using your module inside Hapiness application

yarn or npm it in your package.json

$ npm install --save @hapiness/core @hapiness/consul rxjs

or

$ yarn add @hapiness/core @hapiness/consul rxjs
"dependencies": {
    "@hapiness/consul": "^1.0.0",
    "@hapiness/core": "^1.5.1",
    "rxjs": "^5.5.7",
    //...
}
//...

Using Consul inside your hapiness application

Import the module

You need to include ConsulModule in the imports section of your module definition.


@HapinessModule(
    {
        version: '1.0.0',
        declarations: [/* your declarations */],
        providers: [/* your providers */],
        exports: [/* your exports */],
        imports: [ConsulModule /* other modules */]
    }
)
export class MyModule { /* ... */ }

Bootstrap the extension

You need to inject the extension in bootstrap using setConfig to instantiate the module.

The config properties allowed for the extensions are defined like this:


export interface HapinessConsulClientOptions {
    scheme?: string;
    host?: string;
    port?: string;
    defaults?: {
        consistent?: boolean;
        dc?: string;
        stale?: boolean;
        token?: string;
        wait?: string;
        wan?: boolean;
        ctx?: NodeJS.EventEmitter;
        timeout?: number;
    };
    ca?: string;
    baseUrl?: string;
}

Then just do like this:

Hapiness
    .bootstrap(
        MyModule,
        [
            ConsulExt.setConfig({
                /* Put your config here */
            })
        ])
    .catch(err => done(err));

Use the exposed service

This library is in fact a wrapper of the famous consul node library but wrap all its functions to returns rxjs Observable

You can see the doc by clicking here

We provide a wrapper called ConsulService exposing a clientgetter that will allow you to access the consul client.


class FooProvider {

    constructor(private _consul: ConsulService) {}

    bar(): Observable<string> {
        // Getting a key from the KV client of consul
        return this._consul.client.kv.get('hello');
    }


    acquireLock(): void {
        // Create a consul lock
        const lock = this._consul.client.lock({ key: 'test' });

        // Listen to lock events
        lock.on('acquire', () => {
            console.log('lock acquired'));
            lock.release();
        });
        lock.on('release', () => console.log('lock released'));
        lock.on('error', () => console.log('lock error:', err));
        lock.on('end', (err) => console.log('lock released or there was a permanent failure'));

        // Acquire the lock
        lock.acquire();
    }

}

Back to top

Contributing

To set up your development environment:

  1. clone the repo to your workspace,
  2. in the shell cd to the main folder,
  3. hit npm or yarn install,
  4. run npm or yarn run test.
    • It will lint the code and execute all tests.
    • The test coverage report can be viewed from ./coverage/lcov-report/index.html.

Back to top

Maintainers

tadaweb
Julien Fauville Antoine Gomez S├ębastien Ritz Nicolas Jessel

Back to top

License

Copyright (c) 2018 Hapiness Licensed under the MIT license.

Back to top