Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/hapinessjs/consul-module

Consul client integration for Hapiness framework
https://github.com/hapinessjs/consul-module

Last synced: 7 days ago
JSON representation

Consul client integration for Hapiness framework

Awesome Lists containing this project

README

        

Hapiness




build


coveralls


dependencies


devDependencies




Typescript logo


ReactiveX logo


Hapijs logo


# 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](https://www.consul.io/)

## Table of contents

* [Using your module inside Hapiness application](#using-your-module-inside-hapiness-application)
* [`yarn` or `npm` it in your `package.json`](#yarn-or-npm-it-in-your-package.json)
* [Using `Consul` inside your hapiness application](#using-consul-inside-your-hapiness-application)
* [Import the module](#import-the-module)
* [Bootstrap the extension](#bootstrap-the-extension)
* [Use the exposed service](#use-the-exposed-service)
* [Contributing](#contributing)
* [Maintainers](#maintainers)
* [License](#license)

## Using your module inside Hapiness application

### `yarn` or `npm` it in your `package.json`

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

or

$ yarn add @hapiness/core @hapiness/consul rxjs
```

```javascript
"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.

```typescript

@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:

```typescript

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:

```typescript
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](https://www.npmjs.com/package/consul)

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

```typescript

class FooProvider {

constructor(private _consul: ConsulService) {}

bar(): Observable {
// 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](#table-of-contents)

## 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](#table-of-contents)

## Maintainers


tadaweb








Julien Fauville
Antoine Gomez
Sébastien Ritz
Nicolas Jessel

[Back to top](#table-of-contents)

## License

Copyright (c) 2018 **Hapiness** Licensed under the [MIT license](https://github.com/hapinessjs/consul-module/blob/master/LICENSE.md).

[Back to top](#table-of-contents)