npm i fastify-influxdb -s
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
`)
});
});
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.
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
.
Licensed under GPLv3.