/fastify-influxdb

A Fastify plugin for injecting an InfluxDB driver on the framework

Primary LanguageJavaScriptGNU General Public License v3.0GPL-3.0

Fastify InfluxDB Plugin using the Official InfluxDB Driver

NPM

CircleCI

Installation

npm i fastify-influxdb -s

Usage

const fastify = require("fastify")();
// Should be first declaration
fastify.register(require("fastify-influxdb"), {
  host: "localhost",
  database: "NOAA_water_database",
  schema: [
    {
      measurement: "average_temperature",
      fields: {
        "level description": "STRING",
        water_level: "FLOAT"
      },
      tags: ["location"]
    },
    {
      measurement: "h2o_pH",
      fields: {
        "level description": "STRING",
        water_level: "FLOAT"
      },
      tags: ["location"]
    },
    {
      measurement: "h2o_quality",
      fields: {
        "level description": "STRING",
        water_level: "FLOAT"
      },
      tags: ["location"]
    },
    {
      measurement: "h2o_temperature",
      fields: {
        "level description": "STRING",
        water_level: "FLOAT"
      },
      tags: ["location"]
    }
  ]
});

fastify.get("/", async (request, reply) => {
  const { instance } = fastify.influxdb;
  await instance.writePoints([
    {
      measurement: "h2o_temperature",
      tags: { location: "athens" },
      fields: { "level description": "Medium", water_level: 2.4324 }
    }
  ]);
  reply.send({
    rows: await instance.query(`
                  select * from h2o_temperature
                  where location = ${fastify.influxdb.escape.stringLit(
                    "athens"
                  )}
                  order by time desc
                  limit 10
                `)
  });
});

Description

This plugin adds an InfluxDB driver made available to all routes via the decorate function. It should be used whenever an InfluxDB instance needs to communicate with a Fastify API instance.

Options

Option Description
host Optional, the host to connect to. Defaults to localhost
hosts Optional, the multiple hosts to connect to. If specified, multi-cluster setup will be passed on to influx
database Optional, the database to connect to. If the database does not exist, the library will create it.
schema Optional, the schema of the database we are connecting to
username Optional, the username to use for authorization if any
password Optional, the password to use for authorization if any

Any schemas declared should follow the following format:

{
  measurement: "name_of_measurement",
  fields: {
    "level description": "STRING",
    water_level: "FLOAT"
  },
  tags: ["location"]
}

The above schema should be created according to the InfluxDB Node.JS Library Schema Specification.

One should note that instead of Influx.FieldType.TYPE and FieldType.TYPE he/she should specify the TYPE in string format instead. For example, the default schema presented in the above documentation link can be converted as follows:

// Before
{
  measurement: 'perf',
  tags: ['hostname'],
  fields: {
    memory_usage: FieldType.INTEGER,
    cpu_usage: FieldType.FLOAT,
    is_online: FieldType.BOOLEAN,
  }
}

// After
{
  measurement: 'perf',
  tags: ['hostname'],
  fields: {
    memory_usage: 'INTEGER',
    cpu_usage: 'FLOAT',
    is_online: 'BOOLEAN',
  }
}

The Influx object of the influx npm package is also provided by default in the decorator while the InfluxDB instance can be accessed via fastify.influxdb.instance.

Author

Alex Papageorgiou

License

Licensed under GPLv3.