Skip to content
A Fastify plugin for injecting an InfluxDB driver on the framework
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
.gitignore
.npmignore
LICENSE
README.md
index.js
package-lock.json
package.json
test.js

README.md

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.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.