From da239ecf8ed39b6c8c4c1f6fd759e7e9cc59ce12 Mon Sep 17 00:00:00 2001 From: Walter Dal Mut Date: Sun, 21 Jun 2015 17:33:46 +0200 Subject: [PATCH] Allow URL prefixes This should fixes #34 --- .travis.yml | 4 ++++ scripts/nginx_proxy.conf | 25 +++++++++++++++++++++++++ src/Adapter/GuzzleAdapter.php | 10 ++++++---- src/Options.php | 14 ++++++++++++++ tests/ClientTest.php | 19 +++++++++++++++++++ 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 scripts/nginx_proxy.conf diff --git a/.travis.yml b/.travis.yml index af9b34c6d..72b9027c3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,10 @@ before_install: - sudo cp ./scripts/influxdb_conf.toml /etc/opt/influxdb/influxdb.conf - travis_retry sudo service influxdb restart - sudo service influxdb status + - sudo apt-get update + - sudo apt-get install -y nginx + - sudo cp scripts/nginx_proxy.conf /etc/nginx/conf.d/proxy.conf + - travis_retry sudo service nginx restart before_script: - composer selfupdate diff --git a/scripts/nginx_proxy.conf b/scripts/nginx_proxy.conf new file mode 100644 index 000000000..f92d10a30 --- /dev/null +++ b/scripts/nginx_proxy.conf @@ -0,0 +1,25 @@ +server { + listen 9000 default_server; + listen [::]:9000 default_server ipv6only=on; + + root /usr/share/nginx/html; + index index.html index.htm; + + server_name localhost; + + location / { + try_files $uri $uri/ =404; + } + + location /influxdb { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-NginX-Proxy true; + + rewrite ^/influxdb/?(.*) /$1 break; + + proxy_pass http://localhost:8086; + proxy_redirect off; + } +} diff --git a/src/Adapter/GuzzleAdapter.php b/src/Adapter/GuzzleAdapter.php index d55352101..35a3a6db4 100644 --- a/src/Adapter/GuzzleAdapter.php +++ b/src/Adapter/GuzzleAdapter.php @@ -54,20 +54,22 @@ class GuzzleAdapter extends AdapterAbstract implements QueryableInterface protected function getHttpSeriesEndpoint() { return sprintf( - "%s://%s:%d/write", + "%s://%s:%d%s/write", $this->getOptions()->getProtocol(), $this->getOptions()->getHost(), - $this->getOptions()->getPort() + $this->getOptions()->getPort(), + $this->getOptions()->getPrefix() ); } protected function getHttpQueryEndpoint($name = false) { $url = sprintf( - "%s://%s:%d/query", + "%s://%s:%d%s/query", $this->getOptions()->getProtocol(), $this->getOptions()->getHost(), - $this->getOptions()->getPort() + $this->getOptions()->getPort(), + $this->getOptions()->getPrefix() ); return $url; diff --git a/src/Options.php b/src/Options.php index c472c5235..15b1581f2 100644 --- a/src/Options.php +++ b/src/Options.php @@ -23,6 +23,8 @@ class Options private $tags; + private $prefix; + public function __construct() { $this->setHost("localhost"); @@ -30,11 +32,23 @@ class Options $this->setUsername("root"); $this->setPassword("root"); $this->setProtocol("http"); + $this->setPrefix(""); $this->setRetentionPolicy("default"); $this->setTags([]); } + public function getPrefix() + { + return $this->prefix; + } + + public function setPrefix($prefix) + { + $this->prefix = $prefix; + return $this; + } + public function getTags() { return $this->tags; diff --git a/tests/ClientTest.php b/tests/ClientTest.php index ad5367b2e..cad9201bf 100644 --- a/tests/ClientTest.php +++ b/tests/ClientTest.php @@ -64,6 +64,25 @@ class ClientTest extends \PHPUnit_Framework_TestCase $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 */