Skip to content

Commit 35108ac

Browse files
authored
Merge pull request #106 from scoutapp/elasticsearch-8-support
Elasticsearch 8 support
2 parents bd71f87 + 948b0cd commit 35108ac

File tree

6 files changed

+105
-2
lines changed

6 files changed

+105
-2
lines changed

.github/workflows/ci-build.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,14 @@ jobs:
99
name: "PHPT Tests"
1010
services:
1111
elasticsearch:
12-
image: elasticsearch:7.13.1
12+
image: elasticsearch:8.1.2
1313
env:
1414
discovery.type: single-node
15+
# Disable TLS which is on by default now: https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
16+
xpack.security.enabled: false
17+
xpack.security.enrollment.enabled: false
18+
xpack.security.http.ssl.enabled: false
19+
xpack.security.transport.ssl.enabled: false
1520
ports:
1621
- 9200:9200
1722
memcached:

package.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,12 @@
8484
<file name="014-predis-support.phpt" role="test" />
8585
<file name="015-phpredis-support.phpt" role="test" />
8686
<file name="016-memcached-support.phpt" role="test" />
87-
<file name="017-elastic-support.phpt" role="test" />
87+
<file name="017-elastic-7-support.phpt" role="test" />
8888
<file name="018-do-not-instrument-by-default.phpt" role="test" />
8989
<file name="019-url-method-capture-fgc.phpt" role="test" />
9090
<file name="020-url-method-capture-curl-post.phpt" role="test" />
9191
<file name="021-url-method-capture-curl-customreq.phpt" role="test" />
92+
<file name="022-elastic-8-support.phpt" role="test" />
9293
<file name="bug-47.phpt" role="test" />
9394
<file name="bug-49.phpt" role="test" />
9495
<file name="bug-55.phpt" role="test" />

scout_execute_ex.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ int setup_functions_for_zend_execute_ex()
4242
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elasticsearch\\Client->get");
4343
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elasticsearch\\Client->search");
4444
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elasticsearch\\Client->delete");
45+
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elastic\\Elasticsearch\\Client->index");
46+
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elastic\\Elasticsearch\\Client->get");
47+
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elastic\\Elasticsearch\\Client->search");
48+
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elastic\\Elasticsearch\\Client->delete");
4549
#endif
4650

4751
return SUCCESS;

scout_observer.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ int setup_functions_for_observer_api()
3939
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elasticsearch\\Client->get");
4040
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elasticsearch\\Client->search");
4141
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elasticsearch\\Client->delete");
42+
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elastic\\Elasticsearch\\Client->index");
43+
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elastic\\Elasticsearch\\Client->get");
44+
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elastic\\Elasticsearch\\Client->search");
45+
ADD_FUNCTION_TO_INSTRUMENTATION_SAFE_CATCH("Elastic\\Elasticsearch\\Client->delete");
4246
#endif
4347

4448
return SUCCESS;
File renamed without changes.

tests/022-elastic-8-support.phpt

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
--TEST--
2+
Elasticsearch userland functions are supported
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded("scoutapm")) die("skip scoutapm extension required.");
6+
if (!extension_loaded("curl")) die("skip Elasticsearch needs the curl extension.");
7+
if (shell_exec("which composer") === null) die("skip composer not found in path.");
8+
9+
$out = null;
10+
$result = null;
11+
exec("mkdir -p /tmp/scout_elastic_test && cd /tmp/scout_elastic_test && composer require -n elasticsearch/elasticsearch:^8.0", $out, $result);
12+
13+
if ($result !== 0) {
14+
die("skip composer failed: " . implode(", ", $out));
15+
}
16+
17+
if (!getenv('CI')) {
18+
require "/tmp/scout_elastic_test/vendor/autoload.php";
19+
20+
// Check Elasticsearch is running & can connect to it
21+
/* Run with:
22+
docker run --rm --name elasticsearch \
23+
-p 9200:9200 \
24+
-e discovery.type=single-node \
25+
-e xpack.security.enabled=false \
26+
-e xpack.security.enrollment.enabled=false \
27+
-e xpack.security.http.ssl.enabled=false \
28+
-e xpack.security.transport.ssl.enabled=false \
29+
elasticsearch:8.1.2
30+
*/
31+
$client = \Elastic\Elasticsearch\ClientBuilder::create()
32+
->setHosts(['localhost:9200'])
33+
->build();
34+
try {
35+
$client->search([]);
36+
} catch (\Elastic\Elasticsearch\Common\Exceptions\NoNodesAvailableException $e) {
37+
die("skip " . $e->getMessage());
38+
}
39+
}
40+
?>
41+
--FILE--
42+
<?php
43+
44+
echo implode("\n", array_intersect(
45+
[
46+
'Elastic\Elasticsearch\Client->index',
47+
'Elastic\Elasticsearch\Client->get',
48+
'Elastic\Elasticsearch\Client->search',
49+
'Elastic\Elasticsearch\Client->delete',
50+
],
51+
scoutapm_list_instrumented_functions()
52+
)) . "\n";
53+
scoutapm_enable_instrumentation(true);
54+
55+
require "/tmp/scout_elastic_test/vendor/autoload.php";
56+
57+
$client = \Elastic\Elasticsearch\ClientBuilder::create()
58+
->setHosts(['localhost:9200'])
59+
->build();
60+
61+
$client->index(['index' => 'my_index', 'id' => 'my_id', 'body' => ['testField' => 'abc']]);
62+
$client->get(['index' => 'my_index', 'id' => 'my_id']);
63+
$client->search(['index' => 'my_index', 'body' => ['query' => ['match' => ['testField' => 'abc']]]]);
64+
$client->delete(['index' => 'my_index', 'id' => 'my_id']);
65+
66+
$calls = scoutapm_get_calls();
67+
68+
var_dump(array_column($calls, 'function'));
69+
70+
?>
71+
--CLEAN--
72+
<?php
73+
shell_exec("rm -Rf /tmp/scout_elastic_test");
74+
?>
75+
--EXPECTF--
76+
Elastic\Elasticsearch\Client->index
77+
Elastic\Elasticsearch\Client->get
78+
Elastic\Elasticsearch\Client->search
79+
Elastic\Elasticsearch\Client->delete
80+
array(%d) {
81+
[%d]=>
82+
string(%d) "Elastic\Elasticsearch\Client->index"
83+
[%d]=>
84+
string(%d) "Elastic\Elasticsearch\Client->get"
85+
[%d]=>
86+
string(%d) "Elastic\Elasticsearch\Client->search"
87+
[%d]=>
88+
string(%d) "Elastic\Elasticsearch\Client->delete"
89+
}

0 commit comments

Comments
 (0)