/influxdb-php

Primary LanguagePHPMIT LicenseMIT

influxdb-php

InfluxDB client library for PHP

Build Status Code Climate Test Coverage

Overview

A easy to use library for using InfluxDB with PHP.

The influxdb-php library was created to have php port of the python influxdb client. This way there will be a common abstraction library between different programming languages.

Installation

Installation can be done with composer:

composer require influxdb/influxdb-php:dev-master

Getting started

Initialize a new client object:

$client = new InfluxDB\Client($host, $port);

This will create a new client object which you can use to read and write points to InfluxDB.

It's also possible to create a client from a DSN:

    
    // directly get the database object
    $database = InfluxDB\Client::fromDSN(sprintf('influxdb://user:pass@%s:%s/%s', $host, $port, $dbname));
    
    // get the client to retrieve other databases
    $client = $database->getClient();   
    

Reading

To fetch records from InfluxDB you can do a query directly on a database:

    
    // fetch the database
    $database = $client->selectDB('influx_test_db');
    
    // executing a query will yield a resultset object
    $result = $database->query('select * from test_metric LIMIT 5');
        
    // get the points from the resultset yields an array
    $points = $result->getPoints();     
    

It's also possible to use the QueryBuilder object. This is a class that simplifies the process of building queries.

    // retrieve points with the query builder
    $result = $database->getQueryBuilder()
        ->select('cpucount')
        ->from('test_metric')
        ->limit(2)
        ->getResultSet()
        ->getPoints();
        
        
    // get the query from the QueryBuilder
    $query = $database->getQueryBuilder()
         ->select('cpucount')
         ->from('test_metric')
         ->getQuery();
         

Writing data

Writing data is done by providing an array of points to the writePoints method on a database:

    // create an array of points
    $points = array(
        new Point(
            'test_metric',
            0.64,
            array('host' => 'server01', 'region' => 'us-west'),
            array('cpucount' => 10),
            1435255849 // Time precision has to be set to seconds!
        ),
        new Point(
            'test_metric',
            0.84,
            array('host' => 'server01', 'region' => 'us-west'),
            array('cpucount' => 10),
            1435255850 // Time precision has to be set to seconds!
        )
    );

    // we are writing unix timestamps, which have a second precision
    $newPoints = $database->writePoints($points, Database::PRECISION_SECONDS);
    

It's possible to add multiple fields when writing measurements to InfluxDB. The point class allows one to easily write data in batches to influxDB.

The name of a measurement and the value are mandatory. Additional fields, tags and a timestamp are optional. InfluxDB takes the current time as the default timestamp.

Timestamp precision

It's important to provide the correct precision when adding a timestamp to a Point object. This is because if you specify a timestamp in seconds and the default (nanosecond) precision is set; the entered timestamp will be invalid.

    // Points will require a nanosecond precision (this is default as per influxdb standard)
    $newPoints = $database->writePoints($points);

    // Points will require second precision
    $newPoints = $database->writePoints($points, Database::PRECISION_SECONDS);
    
    // Points will require microsecond precision
    $newPoints = $database->writePoints($points, Database::PRECISION_MICROSECONDS);

Creating databases

When creating a database a default retention policy is added. This retention policy does not have a duration so the data will be flushed with the memory.

This library makes it easy to provide a retention policy when creating a database:

    
    // create the client
    $client = new \InfluxDB\Client($host, $port, '', '');

    // select the database
    $database = $client->selectDB('influx_test_db');

    // create the database with a retention policy
    $result = $database->create(new RetentionPolicy('test', '5d', 1, true));    
    

You can also alter retention policies:

    $database->alterRetentionPolicy(new RetentionPolicy('test', '2d', 5, true));

and list them:

    $result = $database->listRetentionPolicies();

You can add more retention policies to a database:

    $result = $database->createRetentionPolicy(new RetentionPolicy('test2', '30d', 1, true));

Client functions

Some functions are too general for a database. So these are available in the client:

    // list users
    $result = $client->listUsers();
    
    // list databases
    $result = $client->listDatabases();

Todo

  • Add UDP support
  • Add more admin features
  • More unit tests
  • Increase documentation (wiki?)
  • Add more features to the query builder
  • Add validation to RetentionPolicy

Changelog

####0.1.2

  • Added exists method to Database class
  • Added time precision to database class

####0.1.1

  • Merged repository to influxdb/influxdb-php
  • Added unit test for createRetentionPolicy
  • -BREAKING CHANGE- changed $client->db to $client->selectDB