mirror of
https://github.com/stylersnico/librenms.git
synced 2026-07-28 00:24:21 +02:00
Merge branch 'develop'
This commit is contained in:
+1
-3
@@ -10,6 +10,4 @@ We are always thrilled to receive pull requests. We do our best to process them
|
||||
quickly. If your pull request is not accepted on the first try, don't get
|
||||
discouraged!
|
||||
|
||||
We follows the *vincent driessen's branching model*
|
||||
[http://nvie.com/posts/a-successful-git-branching-model/](http://nvie.com/posts/a-successful-git-branching-model/)
|
||||
|
||||
Just branch on master and prepare your PR.
|
||||
|
||||
+2
-1
@@ -38,7 +38,8 @@
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"InfluxDB\\": ["./tests/"]
|
||||
"InfluxDB\\": ["./tests/unit"],
|
||||
"InfluxDB\\Integration\\": ["./tests/integration"]
|
||||
}
|
||||
},
|
||||
"suggest": {
|
||||
|
||||
Generated
+43
-49
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"hash": "61a6988d1b757bb9d3a074d156d73f9d",
|
||||
"hash": "4a2caee24e54a12ad907d21ddda10e87",
|
||||
"packages": [
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
@@ -429,16 +429,16 @@
|
||||
},
|
||||
{
|
||||
"name": "doctrine/instantiator",
|
||||
"version": "1.0.4",
|
||||
"version": "1.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/instantiator.git",
|
||||
"reference": "f976e5de371104877ebc89bd8fecb0019ed9c119"
|
||||
"reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119",
|
||||
"reference": "f976e5de371104877ebc89bd8fecb0019ed9c119",
|
||||
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
|
||||
"reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -449,7 +449,7 @@
|
||||
"ext-pdo": "*",
|
||||
"ext-phar": "*",
|
||||
"phpunit/phpunit": "~4.0",
|
||||
"squizlabs/php_codesniffer": "2.0.*@ALPHA"
|
||||
"squizlabs/php_codesniffer": "~2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -458,8 +458,8 @@
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Doctrine\\Instantiator\\": "src"
|
||||
"psr-4": {
|
||||
"Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
@@ -479,7 +479,7 @@
|
||||
"constructor",
|
||||
"instantiate"
|
||||
],
|
||||
"time": "2014-10-13 12:58:55"
|
||||
"time": "2015-06-14 21:17:01"
|
||||
},
|
||||
{
|
||||
"name": "kevinlebrun/colors.php",
|
||||
@@ -685,16 +685,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
"version": "2.1.5",
|
||||
"version": "2.1.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
||||
"reference": "be2286cb8c7e1773eded49d9719219e6f74f9e3e"
|
||||
"reference": "631e365cf26bb2c078683e8d9bcf8bc631ac4d44"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/be2286cb8c7e1773eded49d9719219e6f74f9e3e",
|
||||
"reference": "be2286cb8c7e1773eded49d9719219e6f74f9e3e",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/631e365cf26bb2c078683e8d9bcf8bc631ac4d44",
|
||||
"reference": "631e365cf26bb2c078683e8d9bcf8bc631ac4d44",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -743,7 +743,7 @@
|
||||
"testing",
|
||||
"xunit"
|
||||
],
|
||||
"time": "2015-06-09 13:05:42"
|
||||
"time": "2015-06-19 07:11:55"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-file-iterator",
|
||||
@@ -794,16 +794,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-text-template",
|
||||
"version": "1.2.0",
|
||||
"version": "1.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-text-template.git",
|
||||
"reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a"
|
||||
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
|
||||
"reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
|
||||
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -812,20 +812,17 @@
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"Text/"
|
||||
"src/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"include-path": [
|
||||
""
|
||||
],
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Sebastian Bergmann",
|
||||
"email": "sb@sebastian-bergmann.de",
|
||||
"email": "sebastian@phpunit.de",
|
||||
"role": "lead"
|
||||
}
|
||||
],
|
||||
@@ -834,20 +831,20 @@
|
||||
"keywords": [
|
||||
"template"
|
||||
],
|
||||
"time": "2014-01-30 17:20:04"
|
||||
"time": "2015-06-21 13:50:34"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-timer",
|
||||
"version": "1.0.5",
|
||||
"version": "1.0.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-timer.git",
|
||||
"reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c"
|
||||
"reference": "83fe1bdc5d47658b727595c14da140da92b3d66d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
|
||||
"reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/83fe1bdc5d47658b727595c14da140da92b3d66d",
|
||||
"reference": "83fe1bdc5d47658b727595c14da140da92b3d66d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -856,13 +853,10 @@
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"PHP/"
|
||||
"src/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"include-path": [
|
||||
""
|
||||
],
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
@@ -878,20 +872,20 @@
|
||||
"keywords": [
|
||||
"timer"
|
||||
],
|
||||
"time": "2013-08-02 07:42:54"
|
||||
"time": "2015-06-13 07:35:30"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-token-stream",
|
||||
"version": "1.4.1",
|
||||
"version": "1.4.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
|
||||
"reference": "eab81d02569310739373308137284e0158424330"
|
||||
"reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/eab81d02569310739373308137284e0158424330",
|
||||
"reference": "eab81d02569310739373308137284e0158424330",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
|
||||
"reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -927,20 +921,20 @@
|
||||
"keywords": [
|
||||
"tokenizer"
|
||||
],
|
||||
"time": "2015-04-08 04:46:07"
|
||||
"time": "2015-06-19 03:43:16"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "4.7.3",
|
||||
"version": "4.7.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "41fea1e84ed84d373f5ac099a1276c4358c90708"
|
||||
"reference": "f6701ef3faea759acd1910a7751d8d102a7fd5bc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/41fea1e84ed84d373f5ac099a1276c4358c90708",
|
||||
"reference": "41fea1e84ed84d373f5ac099a1276c4358c90708",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f6701ef3faea759acd1910a7751d8d102a7fd5bc",
|
||||
"reference": "f6701ef3faea759acd1910a7751d8d102a7fd5bc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -954,7 +948,7 @@
|
||||
"phpunit/php-code-coverage": "~2.1",
|
||||
"phpunit/php-file-iterator": "~1.4",
|
||||
"phpunit/php-text-template": "~1.2",
|
||||
"phpunit/php-timer": "~1.0",
|
||||
"phpunit/php-timer": ">=1.0.6",
|
||||
"phpunit/phpunit-mock-objects": "~2.3",
|
||||
"sebastian/comparator": "~1.1",
|
||||
"sebastian/diff": "~1.2",
|
||||
@@ -999,7 +993,7 @@
|
||||
"testing",
|
||||
"xunit"
|
||||
],
|
||||
"time": "2015-06-11 16:20:25"
|
||||
"time": "2015-06-21 07:23:36"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/phpunit-mock-objects",
|
||||
@@ -1440,16 +1434,16 @@
|
||||
},
|
||||
{
|
||||
"name": "sebastian/version",
|
||||
"version": "1.0.5",
|
||||
"version": "1.0.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/version.git",
|
||||
"reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4"
|
||||
"reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ab931d46cd0d3204a91e1b9a40c4bc13032b58e4",
|
||||
"reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
|
||||
"reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
|
||||
"shasum": ""
|
||||
},
|
||||
"type": "library",
|
||||
@@ -1471,7 +1465,7 @@
|
||||
],
|
||||
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
|
||||
"homepage": "https://github.com/sebastianbergmann/version",
|
||||
"time": "2015-02-24 06:35:25"
|
||||
"time": "2015-06-21 13:59:46"
|
||||
},
|
||||
{
|
||||
"name": "symfony/yaml",
|
||||
|
||||
+5
-14
@@ -5,24 +5,15 @@
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
verbose="false">
|
||||
verbose="true">
|
||||
<testsuites>
|
||||
<testsuite name="InfluxDB SDK Integration Tests">
|
||||
<directory>tests</directory>
|
||||
<directory>tests/integration</directory>
|
||||
</testsuite>
|
||||
<testsuite name="InfluxDB SDK Unit Tests">
|
||||
<directory>tests/unit</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<php>
|
||||
<env name="UDP_PORT" value="4444"/>
|
||||
<env name="UDP_DB" value="udp.test"/>
|
||||
|
||||
<env name="TCP_PORT" value="8086"/>
|
||||
<env name="TCP_DB" value="tcp.test"/>
|
||||
<env name="TCP_PROTOCOL" value="http"/>
|
||||
|
||||
<env name="HOST" value="localhost"/>
|
||||
<env name="USERNAME" value="root"/>
|
||||
<env name="PASSWORD" value="root"/>
|
||||
</php>
|
||||
<filter>
|
||||
<whitelist processUncoveredFilesFromWhitelist="true">
|
||||
<directory suffix=".php">src</directory>
|
||||
|
||||
@@ -3,7 +3,7 @@ namespace InfluxDB\Adapter;
|
||||
|
||||
use DateTime;
|
||||
|
||||
final class UdpAdapter extends AdapterAbstract
|
||||
class UdpAdapter extends AdapterAbstract
|
||||
{
|
||||
public function send(array $message)
|
||||
{
|
||||
@@ -37,7 +37,7 @@ final class UdpAdapter extends AdapterAbstract
|
||||
$tags = array_replace_recursive($tags, $message["tags"]);
|
||||
}
|
||||
|
||||
$unixepoch = (int)(microtime(true) * 1e9);
|
||||
$unixepoch = $this->generateTimeInNanoSeconds();
|
||||
if (array_key_exists("time", $message)) {
|
||||
$dt = new DateTime($message["time"]);
|
||||
$unixepoch = (int)($dt->format("U") * 1e9);
|
||||
@@ -68,7 +68,12 @@ final class UdpAdapter extends AdapterAbstract
|
||||
return implode("\n", $lines);
|
||||
}
|
||||
|
||||
private function toKeyValue(array $elems, $escape=false)
|
||||
protected function generateTimeInNanoSeconds()
|
||||
{
|
||||
return (int)(microtime(true) * 1e9);
|
||||
}
|
||||
|
||||
protected function toKeyValue(array $elems, $escape=false)
|
||||
{
|
||||
$list = [];
|
||||
foreach ($elems as $key => $value) {
|
||||
|
||||
@@ -1,439 +0,0 @@
|
||||
<?php
|
||||
namespace InfluxDB;
|
||||
|
||||
use DateTime;
|
||||
use DateTimeZone;
|
||||
use InfluxDB\Adapter\GuzzleAdapter as InfluxHttpAdapter;
|
||||
use InfluxDB\Options;
|
||||
use InfluxDB\Adapter\UdpAdapter;
|
||||
use GuzzleHttp\Client as GuzzleHttpClient;
|
||||
|
||||
class ClientTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
private $rawOptions;
|
||||
private $object;
|
||||
private $options;
|
||||
|
||||
private $anotherClient;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$options = include __DIR__ . '/bootstrap.php';
|
||||
$this->rawOptions = $options;
|
||||
|
||||
$tcpOptions = $options["tcp"];
|
||||
|
||||
$options = new Options();
|
||||
$options->setHost($tcpOptions["host"]);
|
||||
$options->setPort($tcpOptions["port"]);
|
||||
$options->setUsername($tcpOptions["username"]);
|
||||
$options->setPassword($tcpOptions["password"]);
|
||||
$options->setDatabase($tcpOptions["database"]);
|
||||
|
||||
$this->options = $options;
|
||||
|
||||
$guzzleHttp = new GuzzleHttpClient();
|
||||
$adapter = new InfluxHttpAdapter($guzzleHttp, $options);
|
||||
|
||||
$influx = new Client($adapter);
|
||||
$this->object = $influx;
|
||||
|
||||
$databases = $this->object->getDatabases();
|
||||
if (array_key_exists("values", $databases["results"][0]["series"][0])) {
|
||||
foreach ($databases["results"][0]["series"][0]["values"] as $database) {
|
||||
$this->object->deleteDatabase($database[0]);
|
||||
}
|
||||
}
|
||||
|
||||
$this->object->createDatabase($this->rawOptions["udp"]["database"]);
|
||||
$this->object->createDatabase($this->rawOptions["tcp"]["database"]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group tcp
|
||||
*/
|
||||
public function testGuzzleHttpApiWorksCorrectly()
|
||||
{
|
||||
$this->object->mark("tcp.test", ["mark" => "element"]);
|
||||
|
||||
sleep(1);
|
||||
|
||||
$body = $this->object->query("select * from \"tcp.test\"");
|
||||
$this->assertCount(1, $body["results"][0]["series"][0]["values"]);
|
||||
$this->assertEquals("mark", $body["results"][0]["series"][0]["columns"][1]);
|
||||
$this->assertEquals("element", $body["results"][0]["series"][0]["values"][0][1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group tcp
|
||||
* @group proxy
|
||||
*/
|
||||
public function testGuzzleHttpApiWorksCorrectlyWithProxies()
|
||||
{
|
||||
$this->options->setHost("localhost");
|
||||
$this->options->setPort(9000);
|
||||
$this->options->setPrefix("/influxdb");
|
||||
$this->object->mark("tcp.test", ["mark" => "element"]);
|
||||
|
||||
sleep(2);
|
||||
|
||||
$body = $this->object->query("select * from \"tcp.test\"");
|
||||
$this->assertCount(1, $body["results"][0]["series"][0]["values"]);
|
||||
$this->assertEquals("mark", $body["results"][0]["series"][0]["columns"][1]);
|
||||
$this->assertEquals("element", $body["results"][0]["series"][0]["values"][0][1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group tcp
|
||||
*/
|
||||
public function testGuzzleHttpQueryApiWorksCorrectly()
|
||||
{
|
||||
$this->object->mark("tcp.test", ["mark" => "element"]);
|
||||
|
||||
sleep(1);
|
||||
|
||||
$body = $this->object->query("select * from \"tcp.test\"");
|
||||
|
||||
$this->assertCount(1, $body["results"][0]["series"][0]["values"]);
|
||||
$this->assertEquals("mark", $body["results"][0]["series"][0]["columns"][1]);
|
||||
$this->assertEquals("element", $body["results"][0]["series"][0]["values"][0][1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group tcp
|
||||
*/
|
||||
public function testGuzzleHttpQueryApiWithMultipleData()
|
||||
{
|
||||
$this->object->mark("tcp.test", ["mark" => "element"]);
|
||||
$this->object->mark("tcp.test", ["mark" => "element2"]);
|
||||
$this->object->mark("tcp.test", ["mark" => "element3"]);
|
||||
|
||||
sleep(1);
|
||||
|
||||
$body = $this->object->query("select mark from \"tcp.test\"", "s");
|
||||
|
||||
$this->assertCount(3, $body["results"][0]["series"][0]["values"]);
|
||||
$this->assertEquals("mark", $body["results"][0]["series"][0]["columns"][1]);
|
||||
$this->assertEquals("element", $body["results"][0]["series"][0]["values"][0][1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group tcp
|
||||
*/
|
||||
public function testWriteDirectMessages()
|
||||
{
|
||||
$this->object->mark([
|
||||
"tags" => [
|
||||
"dc" => "eu-west-1",
|
||||
],
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "vm-serie",
|
||||
"fields" => [
|
||||
"cpu" => 18.12,
|
||||
"free" => 712423,
|
||||
],
|
||||
],
|
||||
]
|
||||
]);
|
||||
|
||||
sleep(1);
|
||||
|
||||
$body = $this->object->query("select * from \"vm-serie\"");
|
||||
|
||||
$this->assertCount(1, $body["results"][0]["series"][0]["values"]);
|
||||
$this->assertEquals("cpu", $body["results"][0]["series"][0]["columns"][1]);
|
||||
$this->assertEquals(18.12, $body["results"][0]["series"][0]["values"][0][1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group tcp
|
||||
*/
|
||||
public function testOverrideDatabaseNameViaMessage()
|
||||
{
|
||||
$this->options->setDatabase("a-wrong-database");
|
||||
|
||||
$this->object->mark([
|
||||
"database" => "tcp.test",
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "vm-serie",
|
||||
"fields" => [
|
||||
"cpu" => 18.12,
|
||||
"free" => 712423,
|
||||
],
|
||||
],
|
||||
]
|
||||
]);
|
||||
|
||||
sleep(1);
|
||||
|
||||
$this->options->setDatabase("tcp.test");
|
||||
$body = $this->object->query("select * from \"vm-serie\"");
|
||||
|
||||
$this->assertCount(1, $body["results"][0]["series"][0]["values"]);
|
||||
$this->assertEquals("cpu", $body["results"][0]["series"][0]["columns"][1]);
|
||||
$this->assertEquals(18.12, $body["results"][0]["series"][0]["values"][0][1]);
|
||||
$this->assertEquals(712423, $body["results"][0]["series"][0]["values"][0][2]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group udp
|
||||
*/
|
||||
public function testUdpIpWriteData()
|
||||
{
|
||||
$object = $this->createClientWithUdpAdapter();
|
||||
|
||||
$object->mark("udp.test", ["mark" => "element"]);
|
||||
$object->mark("udp.test", ["mark" => "element1"]);
|
||||
$object->mark("udp.test", ["mark" => "element2"]);
|
||||
$object->mark("udp.test", ["mark" => "element3"]);
|
||||
|
||||
// Wait UDP/IP message arrives
|
||||
sleep(2);
|
||||
|
||||
$this->options->setDatabase("udp.test");
|
||||
$body = $this->object->query("select * from \"udp.test\"");
|
||||
|
||||
$this->assertCount(4, $body["results"][0]["series"][0]["values"]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group udp
|
||||
*/
|
||||
public function testSendMultipleMeasurementWithUdpIp()
|
||||
{
|
||||
$object = $this->createClientWithUdpAdapter();
|
||||
|
||||
$object->mark([
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "mem",
|
||||
"fields" => [
|
||||
"free" => 712423,
|
||||
],
|
||||
],
|
||||
[
|
||||
"measurement" => "cpu",
|
||||
"fields" => [
|
||||
"cpu" => 18.12,
|
||||
],
|
||||
],
|
||||
]
|
||||
]);
|
||||
|
||||
sleep(2);
|
||||
|
||||
$this->options->setDatabase("udp.test");
|
||||
$body = $this->object->query("select * from \"cpu\"");
|
||||
|
||||
$this->assertCount(1, $body["results"][0]["series"][0]["values"]);
|
||||
$this->assertEquals("cpu", $body["results"][0]["series"][0]["columns"][1]);
|
||||
$this->assertEquals(18.12, $body["results"][0]["series"][0]["values"][0][1]);
|
||||
|
||||
$body = $this->object->query("select * from \"mem\"");
|
||||
|
||||
$this->assertCount(1, $body["results"][0]["series"][0]["values"]);
|
||||
$this->assertEquals("free", $body["results"][0]["series"][0]["columns"][1]);
|
||||
$this->assertEquals(712423, $body["results"][0]["series"][0]["values"][0][1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group udp
|
||||
*/
|
||||
public function testWriteDirectMessageWithUdpIp()
|
||||
{
|
||||
$object = $this->createClientWithUdpAdapter();
|
||||
|
||||
$object->mark([
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "vm-serie",
|
||||
"fields" => [
|
||||
"cpu" => 18.12,
|
||||
"free" => 712423,
|
||||
],
|
||||
],
|
||||
]
|
||||
]);
|
||||
|
||||
sleep(2);
|
||||
|
||||
$this->options->setDatabase("udp.test");
|
||||
$body = $this->object->query("select * from \"vm-serie\"");
|
||||
|
||||
$this->assertCount(1, $body["results"][0]["series"][0]["values"]);
|
||||
$this->assertEquals("cpu", $body["results"][0]["series"][0]["columns"][1]);
|
||||
$this->assertEquals(18.12, $body["results"][0]["series"][0]["values"][0][1]);
|
||||
$this->assertEquals(712423, $body["results"][0]["series"][0]["values"][0][2]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group udp
|
||||
* @group date
|
||||
*/
|
||||
public function testWriteDirectMessageWillPreserveActualTime()
|
||||
{
|
||||
$object = $this->createClientWithUdpAdapter();
|
||||
|
||||
$object->mark([
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "vm-serie",
|
||||
"fields" => [
|
||||
"cpu" => 18.12,
|
||||
"free" => 712423,
|
||||
],
|
||||
],
|
||||
]
|
||||
]);
|
||||
|
||||
sleep(2);
|
||||
|
||||
$this->options->setDatabase("udp.test");
|
||||
$body = $this->object->query("select * from \"vm-serie\"");
|
||||
|
||||
$this->assertCount(1, $body["results"][0]["series"][0]["values"]);
|
||||
$this->assertEquals("time", $body["results"][0]["series"][0]["columns"][0]);
|
||||
$saved = $body["results"][0]["series"][0]["values"][0][0];
|
||||
$this->assertRegExp("/".date("Y-m-d")."/i", $saved);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group udp
|
||||
* @group date
|
||||
*/
|
||||
public function testWriteDirectMessageWillPreserveDatetime()
|
||||
{
|
||||
$object = $this->createClientWithUdpAdapter();
|
||||
|
||||
$object->mark([
|
||||
"time" => "2009-11-10T23:00:00Z",
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "vm-serie",
|
||||
"fields" => [
|
||||
"cpu" => 18.12,
|
||||
"free" => 712423,
|
||||
],
|
||||
],
|
||||
]
|
||||
]);
|
||||
|
||||
sleep(2);
|
||||
|
||||
$this->options->setDatabase("udp.test");
|
||||
$body = $this->object->query("select * from \"vm-serie\"");
|
||||
|
||||
$this->assertCount(1, $body["results"][0]["series"][0]["values"]);
|
||||
$this->assertEquals("time", $body["results"][0]["series"][0]["columns"][0]);
|
||||
$this->assertEquals("2009-11-10T23:00:00Z", $body["results"][0]["series"][0]["values"][0][0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group udp
|
||||
* @group tags
|
||||
*/
|
||||
public function testTagsAreWrittenCorrectly()
|
||||
{
|
||||
$object = $this->createClientWithUdpAdapter();
|
||||
|
||||
$object->mark([
|
||||
"tags" => [
|
||||
"region" => "eu",
|
||||
],
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "vm-serie",
|
||||
"tags" => [
|
||||
"dc" => "eu-west-1",
|
||||
"one" => "two",
|
||||
],
|
||||
"fields" => [
|
||||
"cpu" => 18.12,
|
||||
"free" => 712423,
|
||||
],
|
||||
],
|
||||
[
|
||||
"measurement" => "vm-serie",
|
||||
"tags" => [
|
||||
"dc" => "us-east-1",
|
||||
],
|
||||
"fields" => [
|
||||
"cpu" => 28.12,
|
||||
"free" => 412923,
|
||||
],
|
||||
],
|
||||
]
|
||||
]);
|
||||
|
||||
sleep(2);
|
||||
|
||||
$this->options->setDatabase("udp.test");
|
||||
$body = $this->object->query("select * from \"vm-serie\" where dc='eu-west-1'");
|
||||
|
||||
$this->assertCount(1, $body["results"][0]["series"][0]["values"]);
|
||||
$this->assertEquals("cpu", $body["results"][0]["series"][0]["columns"][1]);
|
||||
$this->assertEquals(18.12, $body["results"][0]["series"][0]["values"][0][1]);
|
||||
$this->assertEquals(712423, $body["results"][0]["series"][0]["values"][0][2]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that we handle socket problems correctly in the UDP
|
||||
* adapter, and that they don't inturrupt the user's application.
|
||||
*
|
||||
* @group udp
|
||||
*/
|
||||
public function testReplicateIssue27()
|
||||
{
|
||||
$options = new \InfluxDB\Options();
|
||||
|
||||
// Configure options
|
||||
$options->setHost('172.16.1.182');
|
||||
$options->setPort(4444);
|
||||
$options->setDatabase('...');
|
||||
$options->setUsername('root');
|
||||
$options->setPassword('root');
|
||||
|
||||
$httpAdapter = new \InfluxDB\Adapter\UdpAdapter($options);
|
||||
|
||||
$client = new \InfluxDB\Client($httpAdapter);
|
||||
$client->mark("udp.test", ["mark" => "element"]);
|
||||
}
|
||||
|
||||
public function testListActiveDatabses()
|
||||
{
|
||||
$databases = $this->object->getDatabases();
|
||||
|
||||
$this->assertCount(2, $databases["results"][0]["series"][0]["values"]);
|
||||
}
|
||||
|
||||
public function testCreateANewDatabase()
|
||||
{
|
||||
$this->object->createDatabase("walter");
|
||||
|
||||
sleep(1);
|
||||
|
||||
$databases = $this->object->getDatabases();
|
||||
|
||||
$this->assertCount(3, $databases["results"][0]["series"][0]["values"]);
|
||||
|
||||
$this->object->deleteDatabase("walter");
|
||||
}
|
||||
|
||||
private function createClientWithUdpAdapter()
|
||||
{
|
||||
$rawOptions = $this->rawOptions;
|
||||
$options = new Options();
|
||||
$options->setHost($rawOptions["udp"]["host"]);
|
||||
$options->setUsername($rawOptions["udp"]["username"]);
|
||||
$options->setPassword($rawOptions["udp"]["password"]);
|
||||
$options->setPort($rawOptions["udp"]["port"]);
|
||||
$options->setDatabase($rawOptions["udp"]["database"]);
|
||||
|
||||
$adapter = new UdpAdapter($options);
|
||||
$object = new Client($adapter);
|
||||
|
||||
return $object;
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
<?php
|
||||
return [
|
||||
"tcp" => [
|
||||
"host" => getenv('HOST'),
|
||||
"port" => getenv('TCP_PORT'),
|
||||
"protocol" => getenv('TCP_PROTOCOL'),
|
||||
"database" => getenv('TCP_DB'),
|
||||
"username" => getenv('USERNAME'),
|
||||
"password" => getenv('PASSWORD'),
|
||||
],
|
||||
"udp" => [
|
||||
"host" => getenv('HOST'),
|
||||
"port" => getenv('UDP_PORT'),
|
||||
"database" => getenv('UDP_DB'),
|
||||
"username" => getenv('USERNAME'),
|
||||
"password" => getenv('PASSWORD'),
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
namespace InfluxDB\Integration\Adapter;
|
||||
|
||||
use DateTime;
|
||||
use DateTimeZone;
|
||||
use InfluxDB\Options;
|
||||
use InfluxDB\Client;
|
||||
use InfluxDB\Adapter\GuzzleAdapter;
|
||||
use GuzzleHttp\Client as GuzzleHttpClient;
|
||||
use InfluxDB\Integration\Framework\TestCase as InfluxDBTestCase;
|
||||
|
||||
class GuzzleAdapterTest extends InfluxDBTestCase
|
||||
{
|
||||
public function testAdapterWriteDataCorrectly()
|
||||
{
|
||||
$this->getClient()->createDatabase("tcp.test");
|
||||
|
||||
$options = new Options();
|
||||
$options->setPort(8086);
|
||||
$options->setDatabase("tcp.test");
|
||||
|
||||
$http = new GuzzleHttpClient();
|
||||
$adapter = new GuzzleAdapter($http, $options);
|
||||
|
||||
$adapter->send([
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "vm-serie",
|
||||
"fields" => [
|
||||
"cpu" => 18.12,
|
||||
"free" => 712423,
|
||||
],
|
||||
],
|
||||
]
|
||||
]);
|
||||
|
||||
$this->assertSerieExists("tcp.test", "vm-serie");
|
||||
$this->assertSerieCount("tcp.test", "vm-serie", 1);
|
||||
$this->assertValueExistsInSerie("tcp.test", "vm-serie", "cpu", 18.12);
|
||||
$this->assertValueExistsInSerie("tcp.test", "vm-serie", "free", 712423);
|
||||
}
|
||||
|
||||
public function testWorksWithProxies()
|
||||
{
|
||||
$this->getClient()->createDatabase("proxy.test");
|
||||
|
||||
$options = new Options();
|
||||
$options->setPort(9000);
|
||||
$options->setDatabase("proxy.test");
|
||||
$options->setPrefix("/influxdb");
|
||||
|
||||
$http = new GuzzleHttpClient();
|
||||
$adapter = new GuzzleAdapter($http, $options);
|
||||
|
||||
$adapter->send([
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "vm-serie",
|
||||
"fields" => [
|
||||
"cpu" => 18.12,
|
||||
"free" => 712423,
|
||||
],
|
||||
],
|
||||
]
|
||||
]);
|
||||
|
||||
$this->assertSerieExists("proxy.test", "vm-serie");
|
||||
$this->assertSerieCount("proxy.test", "vm-serie", 1);
|
||||
$this->assertValueExistsInSerie("proxy.test", "vm-serie", "cpu", 18.12);
|
||||
$this->assertValueExistsInSerie("proxy.test", "vm-serie", "free", 712423);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
namespace InfluxDB\Integration\Adapter;
|
||||
|
||||
use InfluxDB\Integration\Framework\TestCase as InfluxDBTestCase;
|
||||
use InfluxDB\Adapter\UdpAdapter;
|
||||
use InfluxDB\Options;
|
||||
|
||||
class UdpAdapterTest extends InfluxDBTestCase
|
||||
{
|
||||
public function testWriteSimplePointsUsingDirectWrite()
|
||||
{
|
||||
$options = (new Options())
|
||||
->setPort(4444);
|
||||
$adapter = new UdpAdapter($options);
|
||||
|
||||
$this->getClient()->createDatabase("udp.test");
|
||||
|
||||
$adapter->write("cpu value=12.33 " . (int)(microtime(true)*1e9));
|
||||
|
||||
sleep(2);
|
||||
|
||||
$this->assertSerieExists("udp.test", "cpu");
|
||||
$this->assertSerieCount("udp.test", "cpu", 1);
|
||||
$this->assertValueExistsInSerie("udp.test", "cpu", "value", 12.33);
|
||||
}
|
||||
|
||||
public function testWriteSimplePointsUsingSendMethod()
|
||||
{
|
||||
$options = (new Options())
|
||||
->setPort(4444);
|
||||
$adapter = new UdpAdapter($options);
|
||||
|
||||
$this->getClient()->createDatabase("udp.test");
|
||||
|
||||
$adapter->send([
|
||||
"retentionPolicy" => "default",
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "mem",
|
||||
"fields" => [
|
||||
"value" => 1233,
|
||||
],
|
||||
],
|
||||
],
|
||||
]);
|
||||
|
||||
sleep(2);
|
||||
|
||||
$this->assertSerieExists("udp.test", "mem");
|
||||
$this->assertSerieCount("udp.test", "mem", 1);
|
||||
$this->assertValueExistsInSerie("udp.test", "mem", "value", 1233);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,166 @@
|
||||
<?php
|
||||
namespace InfluxDB\Integration;
|
||||
|
||||
use DateTime;
|
||||
use DateTimeZone;
|
||||
use InfluxDB\Options;
|
||||
use InfluxDB\Adapter\UdpAdapter;
|
||||
use InfluxDB\Adapter\GuzzleAdapter as InfluxHttpAdapter;
|
||||
use GuzzleHttp\Client as GuzzleHttpClient;
|
||||
use InfluxDB\Client;
|
||||
use InfluxDB\Integration\Framework\TestCase;
|
||||
|
||||
class ClientTest extends TestCase
|
||||
{
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->getClient()->createDatabase("tcp.test");
|
||||
$this->getClient()->createDatabase("udp.test");
|
||||
}
|
||||
|
||||
public function testSimpleMarkPublicSignature()
|
||||
{
|
||||
$options = new Options();
|
||||
$options->setDatabase("tcp.test");
|
||||
|
||||
$guzzleHttp = new GuzzleHttpClient();
|
||||
$adapter = new InfluxHttpAdapter($guzzleHttp, $options);
|
||||
$client = new Client($adapter);
|
||||
|
||||
$client->mark("vm", ["mark" => "element"]);
|
||||
|
||||
$this->assertSerieExists("tcp.test", "vm");
|
||||
$this->assertSerieCount("tcp.test", "vm", 1);
|
||||
$this->assertValueExistsInSerie("tcp.test", "vm", "mark", "element");
|
||||
}
|
||||
|
||||
public function testDirectMessagesMarkPublicSignature()
|
||||
{
|
||||
$options = new Options();
|
||||
$options->setDatabase("tcp.test");
|
||||
|
||||
$guzzleHttp = new GuzzleHttpClient();
|
||||
$adapter = new InfluxHttpAdapter($guzzleHttp, $options);
|
||||
$client = new Client($adapter);
|
||||
|
||||
$client->mark([
|
||||
"database" => "tcp.test",
|
||||
"retentionPolicy" => "default",
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "tt",
|
||||
"fields" => [
|
||||
"cpu" => 1,
|
||||
"mem" => 2,
|
||||
],
|
||||
]
|
||||
],
|
||||
]);
|
||||
|
||||
$this->assertSerieExists("tcp.test", "tt");
|
||||
$this->assertSerieCount("tcp.test", "tt", 1);
|
||||
$this->assertValueExistsInSerie("tcp.test", "tt", "cpu", 1);
|
||||
$this->assertValueExistsInSerie("tcp.test", "tt", "mem", 2);
|
||||
}
|
||||
|
||||
public function testListActiveDatabases()
|
||||
{
|
||||
$options = new Options();
|
||||
$guzzleHttp = new GuzzleHttpClient();
|
||||
$adapter = new InfluxHttpAdapter($guzzleHttp, $options);
|
||||
$client = new Client($adapter);
|
||||
|
||||
$databases = $client->getDatabases();
|
||||
|
||||
$this->assertCount(2, $databases["results"][0]["series"][0]["values"]);
|
||||
}
|
||||
|
||||
public function testCreateANewDatabase()
|
||||
{
|
||||
$options = new Options();
|
||||
$guzzleHttp = new GuzzleHttpClient();
|
||||
$adapter = new InfluxHttpAdapter($guzzleHttp, $options);
|
||||
|
||||
$client = new Client($adapter);
|
||||
|
||||
$client->createDatabase("walter");
|
||||
|
||||
$databases = $client->getDatabases();
|
||||
|
||||
$this->assertCount(3, $databases["results"][0]["series"][0]["values"]);
|
||||
}
|
||||
|
||||
public function testDropExistingDatabase()
|
||||
{
|
||||
$options = new Options();
|
||||
$guzzleHttp = new GuzzleHttpClient();
|
||||
$adapter = new InfluxHttpAdapter($guzzleHttp, $options);
|
||||
|
||||
$client = new Client($adapter);
|
||||
|
||||
$client->createDatabase("walter");
|
||||
$this->assertDatabasesCount(3);
|
||||
|
||||
$client->deleteDatabase("walter");
|
||||
$this->assertDatabasesCount(2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that we handle socket problems correctly in the UDP
|
||||
* adapter, and that they don't inturrupt the user's application.
|
||||
*
|
||||
* @group udp
|
||||
*/
|
||||
public function testReplicateIssue27()
|
||||
{
|
||||
$options = new \InfluxDB\Options();
|
||||
|
||||
// Configure options
|
||||
$options->setHost('172.16.1.182');
|
||||
$options->setPort(4444);
|
||||
$options->setDatabase('...');
|
||||
$options->setUsername('root');
|
||||
$options->setPassword('root');
|
||||
|
||||
$httpAdapter = new \InfluxDB\Adapter\UdpAdapter($options);
|
||||
|
||||
$client = new \InfluxDB\Client($httpAdapter);
|
||||
$client->mark("udp.test", ["mark" => "element"]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group udp
|
||||
*/
|
||||
public function testWriteUDPPackagesToNoOne()
|
||||
{
|
||||
$options = new Options();
|
||||
$options->setHost("127.0.0.1");
|
||||
$options->setUsername("nothing");
|
||||
$options->setPassword("nothing");
|
||||
$options->setPort(64071); //This is a wrong port
|
||||
|
||||
$adapter = new UdpAdapter($options);
|
||||
$object = new Client($adapter);
|
||||
|
||||
$object->mark("udp.test", ["mark" => "element"]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group udp
|
||||
*/
|
||||
public function testWriteUDPPackagesToInvalidHostname()
|
||||
{
|
||||
$options = new Options();
|
||||
$options->setHost("www.test-invalid.this-is-not-a-tld");
|
||||
$options->setUsername("nothing");
|
||||
$options->setPassword("nothing");
|
||||
$options->setPort(15984);
|
||||
|
||||
$adapter = new UdpAdapter($options);
|
||||
$object = new Client($adapter);
|
||||
|
||||
$object->mark("udp.test", ["mark" => "element"]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
namespace InfluxDB\Integration\Framework;
|
||||
|
||||
use InfluxDB\Options;
|
||||
use InfluxDB\Adapter\GuzzleAdapter as InfluxHttpAdapter;
|
||||
use GuzzleHttp\Client as GuzzleHttpClient;
|
||||
use InfluxDB\Client;
|
||||
|
||||
class TestCase extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
private $client;
|
||||
private $options;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$options = $this->options = new Options();
|
||||
$guzzleHttp = new GuzzleHttpClient();
|
||||
$adapter = new InfluxHttpAdapter($guzzleHttp, $options);
|
||||
|
||||
$client = $this->client = new Client($adapter);
|
||||
|
||||
$this->dropAll();
|
||||
}
|
||||
|
||||
public function tearDown()
|
||||
{
|
||||
$this->dropAll();
|
||||
}
|
||||
|
||||
private function dropAll()
|
||||
{
|
||||
$databases = $this->getClient()->getDatabases();
|
||||
if (array_key_exists("values", $databases["results"][0]["series"][0])) {
|
||||
foreach ($databases["results"][0]["series"][0]["values"] as $database) {
|
||||
$this->getClient()->deleteDatabase($database[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function assertValueExistsInSerie($database, $serieName, $column, $value)
|
||||
{
|
||||
$this->getOptions()->setDatabase($database);
|
||||
$body = $this->getClient()->query("select {$column} from \"{$serieName}\"");
|
||||
|
||||
foreach ($body["results"][0]["series"][0]["values"] as $result) {
|
||||
if ($result[1] == $value) {
|
||||
return $this->assertTrue(true);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->fail("Missing value '{$value}'");
|
||||
}
|
||||
|
||||
public function assertSerieCount($database, $serieName, $count)
|
||||
{
|
||||
$this->getOptions()->setDatabase($database);
|
||||
$body = $this->getClient()->query("select * from \"{$serieName}\"");
|
||||
|
||||
$this->assertCount(1, $body["results"][0]["series"][0]["values"]);
|
||||
}
|
||||
|
||||
public function assertSerieExists($database, $serieName)
|
||||
{
|
||||
$this->getOptions()->setDatabase($database);
|
||||
$body = $this->getClient()->query("show measurements");
|
||||
|
||||
foreach ($body["results"][0]["series"][0]["values"] as $result) {
|
||||
if ($result[0] == $serieName) {
|
||||
return $this->assertTrue(true);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->fail("Missing serie with name '{$serieName}' in database '{$database}'");
|
||||
}
|
||||
|
||||
public function assertDatabasesCount($count)
|
||||
{
|
||||
$databases = $this->client->getDatabases();
|
||||
$this->assertCount($count, $databases["results"][0]["series"][0]["values"]);
|
||||
}
|
||||
|
||||
public function getOptions()
|
||||
{
|
||||
return $this->options;
|
||||
}
|
||||
|
||||
public function getClient()
|
||||
{
|
||||
return $this->client;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,180 @@
|
||||
<?php
|
||||
namespace InfluxDB\Adater;
|
||||
|
||||
use DateTime;
|
||||
use DateTimeZone;
|
||||
use InfluxDB\Options;
|
||||
use GuzzleHttp\Client as GuzzleHttpClient;
|
||||
use InfluxDB\Adapter\GuzzleAdapter as InfluxHttpAdapter;
|
||||
use InfluxDB\Client;
|
||||
use Prophecy\Argument;
|
||||
|
||||
class GuzzleAdapterTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @group tcp
|
||||
* @group proxy
|
||||
* @dataProvider getWriteEndpoints
|
||||
*/
|
||||
public function testWriteEndpointGeneration($final, $options)
|
||||
{
|
||||
$guzzleHttp = new GuzzleHttpClient();
|
||||
$adapter = new InfluxHttpAdapter($guzzleHttp, $options);
|
||||
|
||||
$reflection = new \ReflectionClass(get_class($adapter));
|
||||
$method = $reflection->getMethod("getHttpSeriesEndpoint");
|
||||
$method->setAccessible(true);
|
||||
|
||||
$endpoint = $method->invokeArgs($adapter, []);
|
||||
$this->assertEquals($final, $endpoint);
|
||||
}
|
||||
|
||||
public function getWriteEndpoints()
|
||||
{
|
||||
return [
|
||||
["http://localhost:9000/write", (new Options())->setHost("localhost")->setPort(9000)],
|
||||
["https://localhost:9000/write", (new Options())->setHost("localhost")->setPort(9000)->setProtocol("https")],
|
||||
["http://localhost:9000/influxdb/write", (new Options())->setHost("localhost")->setPort(9000)->setPrefix("/influxdb")],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @group tcp
|
||||
* @group proxy
|
||||
* @dataProvider getQueryEndpoints
|
||||
*/
|
||||
public function testQueryEndpointGeneration($final, $options)
|
||||
{
|
||||
$guzzleHttp = new GuzzleHttpClient();
|
||||
$adapter = new InfluxHttpAdapter($guzzleHttp, $options);
|
||||
|
||||
$reflection = new \ReflectionClass(get_class($adapter));
|
||||
$method = $reflection->getMethod("getHttpQueryEndpoint");
|
||||
$method->setAccessible(true);
|
||||
|
||||
$endpoint = $method->invokeArgs($adapter, []);
|
||||
$this->assertEquals($final, $endpoint);
|
||||
}
|
||||
|
||||
public function getQueryEndpoints()
|
||||
{
|
||||
return [
|
||||
["http://localhost:9000/query", (new Options())->setHost("localhost")->setPort(9000)],
|
||||
["https://localhost:9000/query", (new Options())->setHost("localhost")->setPort(9000)->setProtocol("https")],
|
||||
["http://localhost:9000/influxdb/query", (new Options())->setHost("localhost")->setPort(9000)->setPrefix("/influxdb")],
|
||||
];
|
||||
}
|
||||
|
||||
public function testMergeWithDefaultOptions()
|
||||
{
|
||||
$options = new Options();
|
||||
$options->setDatabase("db");
|
||||
$httpClient = $this->prophesize("GuzzleHttp\\Client");
|
||||
$httpClient->post(Argument::Any(), [
|
||||
"auth" => ["root", "root"],
|
||||
"body" => '{"database":"db","retentionPolicy":"default"}',
|
||||
])->shouldBeCalledTimes(1);
|
||||
|
||||
$adapter = new InfluxHttpAdapter($httpClient->reveal(), $options);
|
||||
$adapter->send([]);
|
||||
}
|
||||
|
||||
public function testAdapterPrepareJsonDataCorrectly()
|
||||
{
|
||||
$guzzleHttp = $this->prophesize("GuzzleHttp\Client");
|
||||
$guzzleHttp->post("http://localhost:8086/write", [
|
||||
"auth" => ["root", "root"],
|
||||
"body" => '{"database":"db","retentionPolicy":"default","points":[{"measurement":"tcp.test","fields":{"mark":"element"}}]}',
|
||||
])->shouldBeCalledTimes(1);
|
||||
$options = (new Options())->setDatabase("db");
|
||||
$adapter = new InfluxHttpAdapter($guzzleHttp->reveal(), $options);
|
||||
|
||||
$adapter->send([
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "tcp.test",
|
||||
"fields" => [
|
||||
"mark" => "element"
|
||||
]
|
||||
]
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
public function testDefaultOptionOverwrite()
|
||||
{
|
||||
$options = new Options();
|
||||
$options->setDatabase("db");
|
||||
$httpClient = $this->prophesize("GuzzleHttp\\Client");
|
||||
$httpClient->post(Argument::Any(), [
|
||||
"auth" => ["root", "root"],
|
||||
"body" => '{"database":"mydb","retentionPolicy":"myPolicy"}',
|
||||
])->shouldBeCalledTimes(1);
|
||||
|
||||
$adapter = new InfluxHttpAdapter($httpClient->reveal(), $options);
|
||||
$adapter->send([
|
||||
"database" => "mydb",
|
||||
"retentionPolicy" => "myPolicy"
|
||||
]);
|
||||
}
|
||||
|
||||
public function testEmptyTagsFieldIsRemoved()
|
||||
{
|
||||
$options = new Options();
|
||||
$options->setDatabase("db");
|
||||
$httpClient = $this->prophesize("GuzzleHttp\\Client");
|
||||
$httpClient->post(Argument::Any(), [
|
||||
"auth" => ["root", "root"],
|
||||
"body" => '{"database":"mydb","retentionPolicy":"myPolicy"}',
|
||||
])->shouldBeCalledTimes(1);
|
||||
|
||||
$adapter = new InfluxHttpAdapter($httpClient->reveal(), $options);
|
||||
$adapter->send([
|
||||
"database" => "mydb",
|
||||
"retentionPolicy" => "myPolicy",
|
||||
"tags" => [],
|
||||
]);
|
||||
}
|
||||
|
||||
public function testGlobalTagsAreInPlace()
|
||||
{
|
||||
$options = new Options();
|
||||
$options->setDatabase("db");
|
||||
$options->setTags([
|
||||
"dc" => "us-west",
|
||||
]);
|
||||
$httpClient = $this->prophesize("GuzzleHttp\\Client");
|
||||
$httpClient->post(Argument::Any(), [
|
||||
"auth" => ["root", "root"],
|
||||
"body" => '{"database":"mydb","retentionPolicy":"myPolicy","tags":{"dc":"us-west"}}',
|
||||
])->shouldBeCalledTimes(1);
|
||||
|
||||
$adapter = new InfluxHttpAdapter($httpClient->reveal(), $options);
|
||||
$adapter->send([
|
||||
"database" => "mydb",
|
||||
"retentionPolicy" => "myPolicy",
|
||||
]);
|
||||
}
|
||||
|
||||
public function testTagsFieldIsMergedWithGlobalTags()
|
||||
{
|
||||
$options = new Options();
|
||||
$options->setDatabase("db");
|
||||
$options->setTags([
|
||||
"dc" => "us-west",
|
||||
]);
|
||||
$httpClient = $this->prophesize("GuzzleHttp\\Client");
|
||||
$httpClient->post(Argument::Any(), [
|
||||
"auth" => ["root", "root"],
|
||||
"body" => '{"database":"mydb","retentionPolicy":"myPolicy","tags":{"dc":"us-west","region":"us"}}',
|
||||
])->shouldBeCalledTimes(1);
|
||||
|
||||
$adapter = new InfluxHttpAdapter($httpClient->reveal(), $options);
|
||||
$adapter->send([
|
||||
"database" => "mydb",
|
||||
"retentionPolicy" => "myPolicy",
|
||||
"tags" => ["region" => "us"],
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,13 @@
|
||||
<?php
|
||||
namespace InfluxDB\Adapter;
|
||||
|
||||
use DateTime;
|
||||
use DateTimeZone;
|
||||
use InfluxDB\Options;
|
||||
use GuzzleHttp\Client as GuzzleHttpClient;
|
||||
use InfluxDB\Adapter\GuzzleAdapter as InfluxHttpAdapter;
|
||||
use InfluxDB\Client;
|
||||
use Prophecy\Argument;
|
||||
|
||||
class UdpAdapterTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
@@ -91,4 +97,76 @@ EOF
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @group udp
|
||||
*/
|
||||
public function testUdpIpWriteDataWillBeConvertedAsLineProtocol()
|
||||
{
|
||||
$options = (new Options())->setDatabase("test");
|
||||
$adapter = $this->getMockBuilder("InfluxDB\\Adapter\\UdpAdapter")
|
||||
->setConstructorArgs([$options])
|
||||
->setMethods(["write", "generateTimeInNanoSeconds"])
|
||||
->getMock();
|
||||
|
||||
$adapter->expects($this->any())
|
||||
->method("generateTimeInNanoSeconds")
|
||||
->will($this->returnValue(1245));
|
||||
|
||||
$adapter->expects($this->once())
|
||||
->method("write")
|
||||
->with("udp.test mark=\"element\" 1245");
|
||||
|
||||
$adapter->send([
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "udp.test",
|
||||
"fields" => [
|
||||
"mark" => "element"
|
||||
]
|
||||
]
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group udp
|
||||
*/
|
||||
public function testSendMultipleMeasurementWithUdpIp()
|
||||
{
|
||||
$options = (new Options())->setDatabase("test");
|
||||
$adapter = $this->getMockBuilder("InfluxDB\\Adapter\\UdpAdapter")
|
||||
->setConstructorArgs([$options])
|
||||
->setMethods(["write", "generateTimeInNanoSeconds"])
|
||||
->getMock();
|
||||
|
||||
$adapter->expects($this->any())
|
||||
->method("generateTimeInNanoSeconds")
|
||||
->will($this->onConsecutiveCalls(1245, 1246));
|
||||
|
||||
$adapter->expects($this->once())
|
||||
->method("write")
|
||||
->with(<<<EOF
|
||||
mem free=712423 1245
|
||||
cpu cpu=18.12 1245
|
||||
EOF
|
||||
);
|
||||
|
||||
$adapter->send([
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "mem",
|
||||
"fields" => [
|
||||
"free" => 712423,
|
||||
],
|
||||
],
|
||||
[
|
||||
"measurement" => "cpu",
|
||||
"fields" => [
|
||||
"cpu" => 18.12,
|
||||
],
|
||||
],
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
namespace InfluxDB;
|
||||
|
||||
use DateTime;
|
||||
use DateTimeZone;
|
||||
use InfluxDB\Adapter\GuzzleAdapter as InfluxHttpAdapter;
|
||||
use InfluxDB\Options;
|
||||
use InfluxDB\Adapter\UdpAdapter;
|
||||
use GuzzleHttp\Client as GuzzleHttpClient;
|
||||
|
||||
class ClientTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
public function testMarkNewMeasurementWithShortSyntax()
|
||||
{
|
||||
$mock = $this->prophesize("InfluxDB\\Adapter\\WritableInterface");
|
||||
$mock->send([
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "tcp.test",
|
||||
"fields" => [
|
||||
"mark" => "element"
|
||||
]
|
||||
]
|
||||
]
|
||||
])->shouldBeCalledTimes(1);
|
||||
|
||||
$object = new Client($mock->reveal());
|
||||
$object->mark("tcp.test", ["mark" => "element"]);
|
||||
}
|
||||
|
||||
public function testWriteDirectMessages()
|
||||
{
|
||||
$mock = $this->prophesize("InfluxDB\\Adapter\\WritableInterface");
|
||||
$mock->send([
|
||||
"tags" => [
|
||||
"dc" => "eu-west-1",
|
||||
],
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "vm-serie",
|
||||
"fields" => [
|
||||
"cpu" => 18.12,
|
||||
"free" => 712423,
|
||||
]
|
||||
]
|
||||
]
|
||||
])->shouldBeCalledTimes(1);
|
||||
$object = new Client($mock->reveal());
|
||||
|
||||
$object->mark([
|
||||
"tags" => [
|
||||
"dc" => "eu-west-1",
|
||||
],
|
||||
"points" => [
|
||||
[
|
||||
"measurement" => "vm-serie",
|
||||
"fields" => [
|
||||
"cpu" => 18.12,
|
||||
"free" => 712423,
|
||||
],
|
||||
],
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user