Project 'ds/pb-services' was moved to 'public-entries/pb-services'. Please update any links and bookmarks that may still have the old path.
Commit d523341c authored by Dmitriy Sintsov's avatar Dmitriy Sintsov 🤗

docs(checker): Add documentation

parent 23a5197f
# Service for check availability other services
## Quick Start
```js
// If you need the single service
export { CheckerService } from '@pb/services'
const service = new CheckerService()
```
or
```js
// If you need all services
export { Services } from '@pb/services'
const services = new Services(PromobotAPI)
services.checkerService
```
## API
| method | description |
| ------------------ | ---------------------------------------------------------- |
| on | Allow subscribe to one of known events |
| registerService | Allow register service with name |
| checkServiceByName | Allow check registered service |
| checkService | Allow check any service by instance |
| getAllServices | Returns array with all registered CheckerItem (see below) |
| getServiceByName | Return known CheckerItem (see below) |
## API explanation
### CheckerItem interface
```js
interface CheckerItem {
name: string
instance: Service
state: 'init' | 'pending' | 'resolve'
isActive: boolean
}
```
### `on`
The `on` method allow subscribe to one of known events.
| event | description | payload |
| ------ | ------------------------------- | ----------- |
| START | Emit when check started | CheckerItem |
| FINISH | Emit when check finished | CheckerItem |
| ERROR | Emit when an error has occurred | Reason |
Quick access is also available.
```js
CheckerService.START
CheckerService.FINISH
CheckerService.ERROR
```
Accordingly.
**Syntax**
```js
on (event, callback)
```
**Parameters**
1. `event`: (string) - One of known event.
2. `callback` - Function, given 1 parameter with instance or error.
**Example**
```js
const checker = new CheckerService()
checker.registerService('test', {
async check () {
return Promise.resolve(true)
}
})
checker.on(CheckerService.START, (service) => {
console.log(service)
})
checker.checkServiceByName('test')
// {
// name: 'test',
// instance: { serviceInstance },
// state: 'pending',
// isActive: false
// }
```
### `registerService`
The `registerService` method allow register service with name as key.
**Syntax**
```js
registerService (name, service)
```
**Parameters**
1. `name`: (string) - The service name which he will be registered and you will have access by this name.
2. `service` - A service instance
**Example**
```js
const checker = new CheckerService()
const service = {
async check () {
return Promise.resolve(true)
}
}
checker.registerService('test', service)
```
### `checkServiceByName`
The `checkServiceByName` method allow check registered service by name.
**Syntax**
```js
checkServiceByName (name)
```
**Parameters**
1. `name`: (string) - The service name which you want check.
**Example**
```js
const checker = new CheckerService()
// We believe that you are already was
// register service
// else this will not work ¯\_(ツ)_/¯
checker.checkServiceByName('test')
```
### `checkService`
The `checkService` method allow check any service which have the `check` function.
**Syntax**
```js
checkService (instance)
```
**Parameters**
1. `instance`: - Any object, which have the `check` function.
**Example**
```js
const checker = new CheckerService()
const service = {
async check () {
return Promise.resolve(true)
}
}
checker.checkService(service)
.then(() => console.log('Service available'))
// Service available
```
### `getAllServices`
The `getAllServices` method return an array with `CheckerItem`.
**Syntax**
```js
getAllServices ()
```
**Example**
```js
const checker = new CheckerService()
// Register service
const allServices = checker.getAllServices()
```
### `getServiceByName`
The `getServiceByName` method return a `CheckerItem` by name if exists else `undefined`.
**Parameters**
1. `name`: (string) - The service name which you want get.
**Syntax**
```js
getServiceByName (name)
```
**Example**
```js
const checker = new CheckerService()
const originService = {
async check () {
return Promise.resolve(true)
}
}
checker.registerService('test', originService)
const service = checker.getServiceByName('test')
(originService === service.instance) // true
```
## Example usage
Form more usage examples see `checker.spec.ts`
```js
const checker = new CheckerService()
const workingService = {
async check () {
return Promise.resolve(true)
}
}
const notWorkingService = {
async check () {
return Promise.reject(new Error('Some reason of error'))
}
}
checker.registerService('workingService', workingService)
checker.registerService('notWorkingService', notWorkingService)
const allServices = checker.getAllServices()
const resultsOfCheckServices = allServices.reduce(
async (previousPromise, service) => {
const acc = await previousPromise
const isServiceActive = await checker.checkService(service.instance)
// You can catch error as you need.
// In this example error was ignored and returned false
.catch(() => false)
acc.push(isServiceActive)
return Promise.resolve(acc)
},
Promise.resolve([])
)
resultsOfCheckServices
.then((checkResult) => {
consol.log(checkResult) // [true, false]
})
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment