diff --git a/CONTRIBUTE.md b/CONTRIBUTE.md index a71780b0da..d9348f142d 100644 --- a/CONTRIBUTE.md +++ b/CONTRIBUTE.md @@ -8,8 +8,8 @@ Here are a few ways you can help make this project better. ## Team members -Stephen "TheCodeAssassin" Hoogendijk -Daniel "danibrutal" Martinez +* Stephen "TheCodeAssassin" Hoogendijk +* Daniel "danibrutal" Martinez ## Helping out @@ -29,9 +29,22 @@ In order for your pull requests to get accepted we hold all the code to the foll * Do not use left hand conditions such as false == $something * New features need to be documented * Breaking changes should be well highlighted and explained in the PR +* Only short-array syntax should be used for arrays +* Use regular string concatenation for single-variable strings, and sprintf for multi-variable strings +* Do not align variable assignments The following is optional but encouraged: * Code should be documented * Code should be unit tested * Do not write conditions like false === $something, rather $something === false. + +## Special thanks + +We would like to thank the following people for helping to make this library possible: + +* InfluxDB Community +* LeaseWeb Technologies +* Paul Dix +* Sean Beckett +* CentaurWarchief \ No newline at end of file diff --git a/README.md b/README.md index d8c0ea9b08..2f57b9eef3 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ Writing data is done by providing an array of points to the writePoints method o ); // we are writing unix timestamps, which have a second precision - $newPoints = $database->writePoints($points, Database::PRECISION_SECONDS); + $result = $database->writePoints($points, Database::PRECISION_SECONDS); ``` @@ -115,6 +115,27 @@ measurements to InfluxDB. The point class allows one to easily write data in bat 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. +#### Writing data using udp + +First, set your InfluxDB host to support incoming UDP sockets: + +```ini +[udp] + enabled = true + bind-address = ":4444" + database = "test_db" +``` + +Then, configure the UDP driver in the client: + +```php + // set the udp driver + $client->setDriver(new \InfluxDB\Driver\UDP($client->getHost(), 4444)); + + // now just write your points like you normally would + $result = $database->writePoints($points, Database::PRECISION_SECONDS); +``` + #### Timestamp precision It's important to provide the correct precision when adding a timestamp to a Point object. This is because @@ -147,7 +168,14 @@ This library makes it easy to provide a retention policy when creating a databas $database = $client->selectDB('influx_test_db'); // create the database with a retention policy - $result = $database->create(new RetentionPolicy('test', '5d', 1, true)); + $result = $database->create(new RetentionPolicy('test', '5d', 1, true)); + + // check if a database exists then create it if it doesn't + $database = $client->selectDB('test_db'); + + if (!$database->exists()) { + $database->create(new RetentionPolicy('test', '1d', 2, true)); + } ``` diff --git a/composer.json b/composer.json index d6f44f7178..7af0fafe8f 100644 --- a/composer.json +++ b/composer.json @@ -22,8 +22,8 @@ } ], "require": { - "php": ">=5.3", - "guzzlehttp/guzzle": "3.*", + "php": ">=5.5", + "guzzlehttp/guzzle": "6.*", "symfony/event-dispatcher": "2.*" }, "require-dev": { diff --git a/composer.lock b/composer.lock index e26469b280..a2fb5ba284 100644 --- a/composer.lock +++ b/composer.lock @@ -1,73 +1,47 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "3db2b5749b72a686e2a905c11e313ae4", + "hash": "ee3f2e2a4eb50f8de36c6efbff37fe71", "packages": [ { "name": "guzzlehttp/guzzle", - "version": "v3.8.1", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba" + "reference": "1879fbe853b0c64d109e369c7aeff09849e62d1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba", - "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1879fbe853b0c64d109e369c7aeff09849e62d1e", + "reference": "1879fbe853b0c64d109e369c7aeff09849e62d1e", "shasum": "" }, "require": { - "ext-curl": "*", - "php": ">=5.3.3", - "symfony/event-dispatcher": ">=2.1" - }, - "replace": { - "guzzle/batch": "self.version", - "guzzle/cache": "self.version", - "guzzle/common": "self.version", - "guzzle/http": "self.version", - "guzzle/inflection": "self.version", - "guzzle/iterator": "self.version", - "guzzle/log": "self.version", - "guzzle/parser": "self.version", - "guzzle/plugin": "self.version", - "guzzle/plugin-async": "self.version", - "guzzle/plugin-backoff": "self.version", - "guzzle/plugin-cache": "self.version", - "guzzle/plugin-cookie": "self.version", - "guzzle/plugin-curlauth": "self.version", - "guzzle/plugin-error-response": "self.version", - "guzzle/plugin-history": "self.version", - "guzzle/plugin-log": "self.version", - "guzzle/plugin-md5": "self.version", - "guzzle/plugin-mock": "self.version", - "guzzle/plugin-oauth": "self.version", - "guzzle/service": "self.version", - "guzzle/stream": "self.version" + "guzzlehttp/promises": "~1.0", + "guzzlehttp/psr7": "~1.1", + "php": ">=5.5.0" }, "require-dev": { - "doctrine/cache": "*", - "monolog/monolog": "1.*", - "phpunit/phpunit": "3.7.*", - "psr/log": "1.0.*", - "symfony/class-loader": "*", - "zendframework/zend-cache": "<2.3", - "zendframework/zend-log": "<2.3" + "ext-curl": "*", + "phpunit/phpunit": "~4.0", + "psr/log": "~1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.8-dev" + "dev-master": "6.0-dev" } }, "autoload": { - "psr-0": { - "Guzzle": "src/", - "Guzzle\\Tests": "tests/" + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -79,13 +53,9 @@ "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" - }, - { - "name": "Guzzle Community", - "homepage": "https://github.com/guzzle/guzzle/contributors" } ], - "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", + "description": "Guzzle is a PHP HTTP client library", "homepage": "http://guzzlephp.org/", "keywords": [ "client", @@ -96,7 +66,165 @@ "rest", "web service" ], - "time": "2014-01-28 22:29:15" + "time": "2015-07-10 20:04:21" + }, + { + "name": "guzzlehttp/promises", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "f596be052ef429a16b2f640812fcf84392dd38f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f596be052ef429a16b2f640812fcf84392dd38f7", + "reference": "f596be052ef429a16b2f640812fcf84392dd38f7", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2015-06-30 16:39:54" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "af0e1758de355eb113917ad79c3c0e3604bce4bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/af0e1758de355eb113917ad79c3c0e3604bce4bd", + "reference": "af0e1758de355eb113917ad79c3c0e3604bce4bd", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "PSR-7 message implementation", + "keywords": [ + "http", + "message", + "stream", + "uri" + ], + "time": "2015-06-24 19:55:15" + }, + { + "name": "psr/http-message", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", + "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2015-05-04 20:22:00" }, { "name": "symfony/event-dispatcher", @@ -423,12 +551,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/Config.git", - "reference": "cceb1141805d401e6f7d2e0b1365bf6a15917778" + "reference": "358ec929e494b6f12d8508d88357cbd7383a10ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Config/zipball/cceb1141805d401e6f7d2e0b1365bf6a15917778", - "reference": "cceb1141805d401e6f7d2e0b1365bf6a15917778", + "url": "https://api.github.com/repos/symfony/Config/zipball/358ec929e494b6f12d8508d88357cbd7383a10ca", + "reference": "358ec929e494b6f12d8508d88357cbd7383a10ca", "shasum": "" }, "require": { @@ -465,7 +593,7 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2015-06-28 18:28:18" + "time": "2015-07-09 16:11:14" }, { "name": "symfony/console", @@ -473,12 +601,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/Console.git", - "reference": "2a909e48c528c7c9b22caff6ff622c6c69032bfc" + "reference": "fd85e7517e79a2bceafcee8f7e8b7bbd0919a90a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Console/zipball/2a909e48c528c7c9b22caff6ff622c6c69032bfc", - "reference": "2a909e48c528c7c9b22caff6ff622c6c69032bfc", + "url": "https://api.github.com/repos/symfony/Console/zipball/fd85e7517e79a2bceafcee8f7e8b7bbd0919a90a", + "reference": "fd85e7517e79a2bceafcee8f7e8b7bbd0919a90a", "shasum": "" }, "require": { @@ -522,7 +650,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2015-06-22 16:34:55" + "time": "2015-07-16 12:22:14" }, { "name": "symfony/filesystem", @@ -530,12 +658,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/Filesystem.git", - "reference": "5db575c1ad5f62363c098114cf482bbd5d15349a" + "reference": "9f70c5625a32b2f1e6fc37222f52b4e0eb437b0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Filesystem/zipball/5db575c1ad5f62363c098114cf482bbd5d15349a", - "reference": "5db575c1ad5f62363c098114cf482bbd5d15349a", + "url": "https://api.github.com/repos/symfony/Filesystem/zipball/9f70c5625a32b2f1e6fc37222f52b4e0eb437b0e", + "reference": "9f70c5625a32b2f1e6fc37222f52b4e0eb437b0e", "shasum": "" }, "require": { @@ -571,7 +699,7 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2015-06-18 16:14:27" + "time": "2015-07-09 16:11:14" }, { "name": "symfony/stopwatch", @@ -579,12 +707,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/Stopwatch.git", - "reference": "a3cf998e50cae3e32e81e401150c7d4b3ecc03d5" + "reference": "cd5f0dc1d3d0e2c83461dad77e20a9186beb6146" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/a3cf998e50cae3e32e81e401150c7d4b3ecc03d5", - "reference": "a3cf998e50cae3e32e81e401150c7d4b3ecc03d5", + "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/cd5f0dc1d3d0e2c83461dad77e20a9186beb6146", + "reference": "cd5f0dc1d3d0e2c83461dad77e20a9186beb6146", "shasum": "" }, "require": { @@ -620,7 +748,7 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2015-06-04 20:21:09" + "time": "2015-07-01 18:24:26" }, { "name": "symfony/yaml", @@ -628,12 +756,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/Yaml.git", - "reference": "f248a72777f3fec2bcafdce3ccd94086250448e1" + "reference": "000e7fc2653335cd42c6d21405dac1c74224a387" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/f248a72777f3fec2bcafdce3ccd94086250448e1", - "reference": "f248a72777f3fec2bcafdce3ccd94086250448e1", + "url": "https://api.github.com/repos/symfony/Yaml/zipball/000e7fc2653335cd42c6d21405dac1c74224a387", + "reference": "000e7fc2653335cd42c6d21405dac1c74224a387", "shasum": "" }, "require": { @@ -669,7 +797,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2015-06-19 15:09:14" + "time": "2015-07-01 14:16:54" } ], "aliases": [], @@ -678,7 +806,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=5.3" + "php": ">=5.5" }, "platform-dev": [] } diff --git a/src/InfluxDB/Client.php b/src/InfluxDB/Client.php index 0f76df243f..8a49d3ecce 100644 --- a/src/InfluxDB/Client.php +++ b/src/InfluxDB/Client.php @@ -3,6 +3,9 @@ namespace InfluxDB; use InfluxDB\Client\Exception as ClientException; +use InfluxDB\Driver\DriverInterface; +use InfluxDB\Driver\Guzzle; +use InfluxDB\Driver\QueryDriverInterface; /** * Class Client @@ -72,6 +75,11 @@ class Client */ protected $options = array(); + /** + * @var DriverInterface + */ + protected $driver; + /** * @param string $host * @param int $port @@ -80,8 +88,6 @@ class Client * @param bool $ssl * @param bool $verifySSL * @param int $timeout - * - * @todo add UDP support */ public function __construct( $host, @@ -101,25 +107,18 @@ class Client if ($ssl) { $this->scheme = 'https'; - $this->options += array('verify' => $verifySSL); + $this->options['verify'] = $verifySSL; } // the the base URI $this->baseURI = sprintf('%s://%s:%d', $this->scheme, $this->host, $this->port); - $this->httpClient = new \Guzzle\Http\Client($this->getBaseURI()); - } - /** - * For testing - * - * @param \Guzzle\Http\Client $client - * @return $this - */ - public function setHttpClient(\Guzzle\Http\Client $client) - { - $this->httpClient = $client; - - return $this; + // set the default driver to guzzle + $this->driver = new Guzzle([ + 'timeout' => $this->timeout, + 'base_uri' => $this->baseURI, + 'verify' => $this->verifySSL + ]); } /** @@ -142,56 +141,34 @@ class Client * @return ResultSet * @throws Exception */ - public function query($database, $query, $params = array()) + public function query($database, $query, $params = []) { + + if (!$this->driver instanceof QueryDriverInterface) { + throw new Exception('The currently configured driver does not support query operations'); + } + if ($database) { $params['db'] = $database; } - $params = '?' . http_build_query(array_merge(array('q' => $query), $params)); - - $options = array_merge($this->options, array('exceptions' => false, 'timeout' => $this->getTimeout())); + $this->driver->setParameters([ + 'url' => 'query?' . http_build_query(array_merge(['q' => $query], $params)), + 'database' => $database, + 'method' => 'get' + ]); try { - $response = $this->httpClient->get('query'.$params, null, $options); + // send the data + $this->driver->send(); - $raw = (string) $response->send()->getBody(); + return $this->driver->getResultSet(); - return new ResultSet($raw); } catch (\Exception $e) { throw new Exception(sprintf('Query has failed, exception: %s', $e->getMessage())); } } - /** - * Write points to the database - * - * @param string $database - * @param string $data - * @param string $precision The timestamp precision - * @return bool - * @throws Exception - * - * @internal Internal method, do not use directly - */ - public function write($database, $data, $precision) - { - try { - $result = $this->httpClient->post( - $this->getBaseURI() . - '/write?db=' . $database . - '&precision=' . $precision, - null, - $data, - array('timeout' => $this->getTimeout()) - )->send(); - - return $result->getStatusCode() === 204; - } catch (\Exception $e) { - throw new Exception(sprintf('Writing has failed, exception: %s', $e->getMessage())); - } - } - /** * List all the databases */ @@ -275,12 +252,12 @@ class Client } /** - * @param array $points + * @param Point[] $points * @return array */ protected function pointsToArray(array $points) { - $names = array(); + $names = []; foreach ($points as $item) { $names[] = $item['name']; @@ -288,4 +265,36 @@ class Client return $names; } + + /** + * @param Driver\DriverInterface $driver + */ + public function setDriver(DriverInterface $driver) + { + $this->driver = $driver; + } + + /** + * @return DriverInterface + */ + public function getDriver() + { + return $this->driver; + } + + /** + * @return string + */ + public function getHost() + { + return $this->host; + } + + /** + * @return DriverInterface + */ + public function getDefaultDriver() + { + return $this->defaultDriver; + } } diff --git a/src/InfluxDB/Database.php b/src/InfluxDB/Database.php index 922155672b..4cc56cf5f5 100644 --- a/src/InfluxDB/Database.php +++ b/src/InfluxDB/Database.php @@ -70,7 +70,7 @@ class Database * @return ResultSet * @throws Exception */ - public function query($query, $params = array()) + public function query($query, $params = []) { return $this->client->query($this->name, $query, $params); } @@ -124,7 +124,22 @@ class Database $points ); - return $this->client->write($this->name, implode(PHP_EOL, $payload), $precision); + try { + $driver = $this->client->getDriver(); + $driver->setParameters([ + 'url' => sprintf('write?db=%s&precision=%s', $this->name, $precision), + 'database' => $this->name, + 'method' => 'post' + ]); + + // send the points to influxDB + $driver->send(implode(PHP_EOL, $payload)); + + return $driver->isSuccess(); + + } catch (\Exception $e) { + throw new Exception(sprintf('Writing has failed, exception: %s', $e->getMessage())); + } } /** @@ -187,7 +202,7 @@ class Database */ protected function getRetentionPolicyQuery($method, RetentionPolicy $retentionPolicy) { - if (!in_array($method, array('CREATE', 'ALTER'))) { + if (!in_array($method, ['CREATE', 'ALTER'])) { throw new \InvalidArgumentException(sprintf('%s is not a valid method')); } diff --git a/src/InfluxDB/Driver/DriverInterface.php b/src/InfluxDB/Driver/DriverInterface.php new file mode 100644 index 0000000000..cb1eddfbd5 --- /dev/null +++ b/src/InfluxDB/Driver/DriverInterface.php @@ -0,0 +1,50 @@ + 'name of the database', + * 'url' => 'URL to the resource', + * 'method' => 'HTTP method used' + * ] + * + * @param array $parameters + * + * @return mixed + */ + public function setParameters(array $parameters); + + /** + * Send the data + * + * @param $data + * + * @return mixed + */ + public function send($data = null); + + /** + * Should return if sending the data was successful + * + * @return bool + */ + public function isSuccess(); + +} diff --git a/src/InfluxDB/Driver/Exception.php b/src/InfluxDB/Driver/Exception.php new file mode 100644 index 0000000000..237766eeef --- /dev/null +++ b/src/InfluxDB/Driver/Exception.php @@ -0,0 +1,16 @@ +httpClient = new Client([ + 'timeout' => $config['timeout'], + 'verify' => $config['verify'], + 'base_uri' => $config['base_uri'] + ]); + + $this->config = $config; + } + + /** + * Called by the client write() method, will pass an array of required parameters such as db name + * + * will contain the following parameters: + * + * [ + * 'database' => 'name of the database', + * 'url' => 'URL to the resource', + * 'method' => 'HTTP method used' + * ] + * + * @param array $parameters + * + * @return mixed + */ + public function setParameters(array $parameters) + { + $this->parameters = $parameters; + } + + /** + * Send the data + * + * @param $data + * + * @throws Exception + * @return mixed + */ + public function send($data = null) + { + $requestObject = new Request($this->parameters['method'], $this->parameters['url'], [], $data); + + $this->response = $this->httpClient->send($requestObject); + } + + /** + * Should return if sending the data was successful + * + * @return bool + */ + public function isSuccess() + { + return in_array($this->response->getStatusCode(), ['200', '204']); + } + + /** + * @return ResultSet + */ + public function getResultSet() + { + $raw = (string) $this->response->getBody(true); + + return new ResultSet($raw); + } +} diff --git a/src/InfluxDB/Driver/QueryDriverInterface.php b/src/InfluxDB/Driver/QueryDriverInterface.php new file mode 100644 index 0000000000..13830e83a2 --- /dev/null +++ b/src/InfluxDB/Driver/QueryDriverInterface.php @@ -0,0 +1,22 @@ +config['host'] = $host; + $this->config['port'] = $port; + + // create a socket connection to check if InfluxDB is alive + $socket = fsockopen('udp://' .$host, $port); + if (!$socket) { + throw new Exception('There is no InfluxDB UDP service running on port '. $port); + } + + fclose($socket); + } + + /** + * Called by the client write() method, will pass an array of required parameters such as db name + * + * will contain the following parameters: + * + * [ + * 'database' => 'name of the database', + * 'url' => 'URL to the resource', + * 'method' => 'HTTP method used' + * ] + * + * @param array $parameters + * + * @return mixed + */ + public function setParameters(array $parameters) + { + $this->parameters = $parameters; + } + + /** + * Send the data + * + * @param $data + * + * @return mixed + */ + public function send($data = null) + { + $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + socket_sendto($socket, $data, strlen($data), 0, $this->config['host'], $this->config['port']); + socket_close($socket); + + return true; + } + + /** + * Should return if sending the data was successful + * + * @return bool + */ + public function isSuccess() + { + return true; + } +} \ No newline at end of file diff --git a/src/InfluxDB/Point.php b/src/InfluxDB/Point.php index 12cd119c4e..17c3f72e5e 100644 --- a/src/InfluxDB/Point.php +++ b/src/InfluxDB/Point.php @@ -19,12 +19,12 @@ class Point /** * @var array */ - private $tags = array(); + private $tags = []; /** * @var array */ - private $fields = array(); + private $fields = []; /** * @var string @@ -96,7 +96,7 @@ class Point */ private function arrayToString(array $arr) { - $strParts = array(); + $strParts = []; foreach ($arr as $key => $value) { $strParts[] = sprintf('%s=%s', $key, $value); diff --git a/src/InfluxDB/ResultSet.php b/src/InfluxDB/ResultSet.php index 7c8e0c5bc4..66330ab42d 100644 --- a/src/InfluxDB/ResultSet.php +++ b/src/InfluxDB/ResultSet.php @@ -15,7 +15,7 @@ class ResultSet /** * @var array|mixed */ - protected $parsedResults = array(); + protected $parsedResults = []; /** * @param string $raw @@ -48,7 +48,7 @@ class ResultSet */ public function getPoints($metricName = '', array $tags = array()) { - $points = array(); + $points = []; $series = $this->getSeries(); foreach ($series as $serie) { @@ -81,7 +81,7 @@ class ResultSet throw new ClientException($object['error']); } - return isset($object['series']) ? $object['series'] : array(); + return isset($object['series']) ? $object['series'] : []; }, $this->parsedResults['results'] ); @@ -95,7 +95,7 @@ class ResultSet */ private function getPointsFromSerie(array $serie) { - $points = array(); + $points = []; foreach ($serie['values'] as $point) { $points[] = array_combine($serie['columns'], $point); diff --git a/tests/unit/DatabaseTest.php b/tests/unit/DatabaseTest.php index 1b16f598f5..d6da46be8d 100644 --- a/tests/unit/DatabaseTest.php +++ b/tests/unit/DatabaseTest.php @@ -2,7 +2,6 @@ namespace InfluxDB\Test; - use InfluxDB\Client; use InfluxDB\Database; use InfluxDB\Point;