service-perfmon-node
Version:
Distributed trace counters microservice in Node.js / ES2017
193 lines (152 loc) • 4.86 kB
Markdown
This is a perforamce monitor microservice from Pip.Services library.
It collects performance metrics from distributed microservices, stores
and provides a single entry point to read all of them.
The microservice currently supports the following deployment options:
* Deployment platforms: Standalone Process, Seneca Plugin
* External APIs: HTTP/REST, Seneca
* Persistence: Memory
This microservice has no dependencies on other microservices.
<a name="links"></a> Quick Links:
* [Download Links](doc/Downloads.md)
* [Development Guide](doc/Development.md)
* [Configuration Guide](doc/Configuration.md)
* [Deployment Guide](doc/Deployment.md)
* Client SDKs
- [Node.js SDK](https://github.com/pip-services-infrastructure2/client-perfmon-node)
* Communication Protocols
- [HTTP Version 1](doc/HttpProtocolV1.md)
- [Seneca Version 1](doc/SenecaProtocolV1.md)
Logical contract of the microservice is presented below. For physical implementation (HTTP/REST, Thrift, Seneca, Lambda, etc.),
please, refer to documentation of the specific protocol.
```typescript
enum CounterType {
Interval = 0,
LastValue = 1,
Statistics = 2,
Timestamp = 3,
Increment = 4
}
class CounterV1 {
public constructor(name: string, type: CounterType) {
this.name = name;
this.type = type;
}
public name: string;
public type: CounterType;
public last: number;
public count: number;
public min: number;
public max: number;
public average: number;
public time: Date;
}
interface IPerfMonV1 {
readPerfMon(correlationId: string, filter: FilterParams, paging: PagingParams): Promise<DataPage<CounterV1>>;
writeCounter(correlationId: string, counter: CounterV1): Promise<CounterV1>;
writePerfMon(correlationId: string, counters: CounterV1[]): Promise<void>;
clear(correlationId: string): Promise<void>;
}
```
Right now the only way to get the microservice is to check it out directly from github repository
```bash
git clone git@github.com:pip-services-infrastructure2/service-perfmon-node.git
```
Pip.Service team is working to implement packaging and make stable releases available for your
as zip downloadable archieves.
Add **config.yaml** file to the root of the microservice folder and set configuration parameters.
As the starting point you can use example configuration from **config.example.yaml** file.
Example of microservice configuration
```yaml
- descriptor: "pip-services-container:container-info:default:default:1.0"
name: "service-perfmon"
description: "Performance monitor microservice"
- descriptor: "pip-services-commons:logger:console:default:1.0"
level: "trace"
- descriptor: "service-perfmon:persistence:memory:default:1.0"
- descriptor: "service-perfmon:controller:default:default:1.0"
- descriptor: "service-perfmon:service:http:default:1.0"
connection:
protocol: "http"
host: "0.0.0.0"
port: 8080
```
For more information on the microservice configuration see [Configuration Guide](Configuration.md).
Start the microservice using the command:
```bash
node run
```
The easiest way to work with the microservice is to use client SDK.
The complete list of available client SDKs for different languages is listed in the [Quick Links](
If you use Node.js then you should add dependency to the client SDK into **package.json** file of your project
```javascript
{
dependencies: {
...
"client-perfmon-node": "^1.0.*"
...
}
}
```
Inside your code get the reference to the client SDK
```javascript
var sdk = new require('client-perfmon-node');
```
Define client configuration parameters that match configuration of the microservice external API
```javascript
// Client configuration
var config = {
connection: {
protocol: 'http',
host: 'localhost',
port: 8080
}
};
```
Instantiate the client and open connection to the microservice
```javascript
// Create the client instance
var client = sdk.PerfMonHttpClientV1(config);
// Connect to the microservice\
try {
await client.open(null);
// Work with the microservice
...
} catch(err) {
console.error('Connection to the microservice failed');
console.error(err);
}
```
Now the client is ready to perform operations
```javascript
// Log a counter
let counter = await client.writeCounter(
null,
{
name: "group.counter",
type: 1,
last: '123'
}
);
```
```javascript
var now = new Date();
// Get the list system activities
let page = await client.readPerfMon(
null,
{
group: "test"
},
{
total: true,
skip: 0,
take: 10
}
);
```
This microservice was created and currently maintained by *Sergey Seroukhov*.