'aws', 'region' => 'us'), array('level' => 5, 'saturation' => '99%'), 123 ); $this->assertEquals( 'h2o,host=aws,region=us level=5i,saturation="99%" 123', $pointArgs->toLineProtocol() ); $pointArray = Point::fromArray(array('name' => 'h2o', 'tags' => array('host' => 'aws', 'region' => 'us'), 'fields' => array('level' => 5, 'saturation' => '99%'), 'time' => 123)); $this->assertEquals( 'h2o,host=aws,region=us level=5i,saturation="99%" 123', $pointArray->toLineProtocol() ); } public function testMeasurementEscape() { $point = new Point('h2 o 2', array('location' => 'europe'), array('level' => 2)); $this->assertEquals('h2\\ o\\ 2,location=europe level=2i', $point->toLineProtocol()); $point = new Point('h2,o', array('location' => 'europe'), array('level' => 2)); $this->assertEquals('h2\\,o,location=europe level=2i', $point->toLineProtocol()); } public function testEmptyKey() { $point = Point::measurement('h2o') ->addField('level', 2) ->addTag('location', 'europe') ->addTag('', 'warn'); $this->assertEquals('h2o,location=europe level=2i', $point->toLineProtocol()); } public function testEmptyValue() { $point = Point::measurement('h2o') ->addField('level', 2) ->addTag('location', 'europe') ->addTag('log', ''); $this->assertEquals('h2o,location=europe level=2i', $point->toLineProtocol()); } public function testTagEscapingKeyAndValue() { $point = Point::measurement("h\n2\ro\t_data") ->addTag("new\nline", "new\nline") ->addTag("carriage\rreturn", "carriage\nreturn") ->addTag("t\tab", "t\tab") ->addField("level", 2); $this->assertEquals( "h\\n2\\ro\\t_data,carriage\\rreturn=carriage\\nreturn,new\\nline=new\\nline,t\\tab=t\\tab level=2i", $point->toLineProtocol() ); } public function testEqualSignEscaping() { $point = Point::measurement("h=2o") ->addTag("l=ocation", "e=urope") ->addField("l=evel", 2); $this->assertEquals("h=2o,l\\=ocation=e\\=urope l\\=evel=2i", $point->toLineProtocol()); } public function testOverrideTagAndField() { $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addTag('location', 'europe2') ->addField('level', 1) ->addField('level', 2) ->addField('level', 3); $this->assertEquals('h2o,location=europe2 level=3i', $point->toLineProtocol()); } public function testFieldTypes() { $point = Point::measurement('h2o') ->addTag('tag_b', 'b') ->addTag('tag_a', 'a') ->addField('n1', -2) ->addField('n2', 10) ->addField('n3', 9223372036854775807) ->addField('n4', 5.5) ->addField('bool', true) ->addField('string', 'string value'); $expected = 'h2o,tag_a=a,tag_b=b bool=true,n1=-2i,n2=10i,n3=9223372036854775807i,n4=5.5,string="string value"'; $this->assertEquals($expected, $point->toLineProtocol()); } public function testFieldNullValue() { $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addField('level', 2) ->addField('warning', null); $this->assertEquals('h2o,location=europe level=2i', $point->toLineProtocol()); } public function testFieldEscape() { $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addField('level', 'string esc"ape value'); $this->assertEquals('h2o,location=europe level="string esc\"ape value"', $point->toLineProtocol()); $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addField('level', 'string esc\\ape value'); $this->assertEquals('h2o,location=europe level="string esc\\\\ape value"', $point->toLineProtocol()); } public function testTime() { $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addField('level', 2) ->time(123, WritePrecision::NS); $this->assertEquals('h2o,location=europe level=2i 123', $point->toLineProtocol()); } /** * @dataProvider providerDateTime */ public function testTimeFormatting($time) { $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addField('level', 2) ->time($time, WritePrecision::MS); $this->assertEquals('h2o,location=europe level=2i 1444897215000', $point->toLineProtocol()); $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addField('level', 2) ->time($time, WritePrecision::S); $this->assertEquals('h2o,location=europe level=2i 1444897215', $point->toLineProtocol()); $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addField('level', 2) ->time($time, WritePrecision::US); $this->assertEquals('h2o,location=europe level=2i 1444897215000000', $point->toLineProtocol()); $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addField('level', 2) ->time($time, WritePrecision::NS); $this->assertEquals('h2o,location=europe level=2i 1444897215000000000', $point->toLineProtocol()); } public function providerDateTime() { return [ [ (new DateTime()) ->setDate(2015, 10, 15) ->setTime(8, 20, 15) ], [ (new DateTimeImmutable()) ->setDate(2015, 10, 15) ->setTime(8, 20, 15) ], ]; } public function testTimeFormattingDefault() { $time = new DateTime(); $time->setDate(2015, 10, 15); $time->setTime(8, 20, 15); $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addField('level', 2) ->time($time); $this->assertEquals('h2o,location=europe level=2i 1444897215000000000', $point->toLineProtocol()); $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addField('level', 2) ->time($time, null); $this->assertEquals('h2o,location=europe level=2i 1444897215000000000', $point->toLineProtocol()); } public function testTimeString() { $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addField('level', 2) ->time('123'); $this->assertEquals('h2o,location=europe level=2i 123', $point->toLineProtocol()); } public function testTimeFloat() { $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addField('level', 2) ->time(102030405060.24); $this->assertEquals('h2o,location=europe level=2i 102030405060', $point->toLineProtocol()); } public function testUtf8() { $point = Point::measurement('h2o') ->addTag('location', 'Přerov') ->addField('level', 2) ->time(123); $this->assertEquals('h2o,location=Přerov level=2i 123', $point->toLineProtocol()); } public function testWithoutTags() { $point = Point::measurement('h2o') ->addField('level', 2) ->time(123); $this->assertEquals('h2o level=2i 123', $point->toLineProtocol()); } public function testWithoutFields() { $point = Point::measurement('h2o') ->addTag('location', 'europe') ->time(123); $this->assertNull($point->toLineProtocol()); } public function testFromArrayWithoutName() { $pointArray = Point::fromArray(array( 'tags' => array('host' => 'aws', 'region' => 'us'), 'fields' => array('level' => 5, 'saturation' => '99%'), 'time' => 123)); $this->assertNull($pointArray); } public function testTagNotString() { $point = Point::measurement('h2o') ->addTag('location', 'europe') ->addTag('tag_not_string', []) ->addTag('tag_not_null', null) ->addField('level', 2); $this->assertEquals('h2o,location=europe level=2i', $point->toLineProtocol()); } }