Initial package-split setup (#531)

* Rename protobuf make target to "make protobuf"

* Move otel protobuf files to 'otel' subdirectory

* Add composer/package-versions-deprecated as allowed plugin

* Report uncovered files in dependency check

* Move PrometheusExporter to contrib package

* Add missing dependency checks

* Fix API dependency

* Add package specific composer files

* Fix wording

* Add use-statement for PrometheusExporter class
This commit is contained in:
Timo Michna 2021-12-31 03:19:23 +01:00 committed by GitHub
parent 4ace6c1b66
commit 2d365e6443
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
101 changed files with 293 additions and 53 deletions

View File

@ -41,14 +41,14 @@ metrics-prometheus-example:
@docker-compose -f docker-compose.prometheus.yaml -p opentelemetry-php_metrics-prometheus-example run --rm php php examples/prometheus/PrometheusMetricsExample.php
stop-prometheus:
@docker-compose -f docker-compose.prometheus.yaml -p opentelemetry-php_metrics-prometheus-example stop
proto:
protobuf:
@docker-compose -f docker-compose.proto.yaml up proto
bash:
$(DC_RUN_PHP) bash
style:
$(DC_RUN_PHP) env XDEBUG_MODE=off vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php --using-cache=no -vvv
deptrac:
$(DC_RUN_PHP) env XDEBUG_MODE=off vendor/bin/deptrac --formatter=table
$(DC_RUN_PHP) env XDEBUG_MODE=off vendor/bin/deptrac --formatter=table --report-uncovered
w3c-test-service:
@docker-compose -f docker-compose.w3cTraceContext.yaml run --rm php ./tests/TraceContext/W3CTestService/symfony-setup
semconv:

View File

@ -160,14 +160,14 @@ PHP_VERSION=8.1 make all
```
## Proto Generation
Our proto files are committed to the repository into the `/proto` folder. These are used in gRPC connections to the
Our protobuf files are committed to the repository into the `/proto` folder. These are used in gRPC connections to the
upstream. These get updated when the [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-proto)
repo has a meaningful update. The maintainer SIG is discussing a way to make this more automatic in the future.
If you'd like to generate proto files for use with this repository, one can run the following command:
If you'd like to generate protobuf files for use with this repository, one can run the following command:
```bash
make proto
make protobuf
```
From your bash compatible shell in the root of this directory. This wil create a `/proto` folder in the root

View File

@ -19,7 +19,10 @@
"symfony/polyfill-mbstring": "^1.23"
},
"config": {
"sort-packages": true
"sort-packages": true,
"allow-plugins": {
"composer/package-versions-deprecated": true
}
},
"authors": [
{
@ -35,11 +38,19 @@
"email": "levim@php.net"
}
],
"replace": {
"open-telemetry/api": "self.version",
"open-telemetry/context": "self.version",
"open-telemetry/proto-otel": "self.version",
"open-telemetry/sdk": "self.version",
"open-telemetry/sdk-contrib": "self.version",
"open-telemetry/sem-conv": "self.version"
},
"autoload": {
"psr-4": {
"OpenTelemetry\\": "src/",
"Opentelemetry\\Proto\\": "proto/Opentelemetry/Proto/",
"GPBMetadata\\Opentelemetry\\Proto\\": "proto/GPBMetadata/Opentelemetry/Proto/"
"Opentelemetry\\Proto\\": "proto/otel/Opentelemetry/Proto/",
"GPBMetadata\\Opentelemetry\\": "proto/otel/GPBMetadata/Opentelemetry/"
},
"files": [
"src/Context/fiber/initialize_fiber_handler.php"

View File

@ -1,57 +1,96 @@
#baseline: depfile.baseline.yml
paths:
- ./src
- ./proto
exclude_files:
- '#.*test.*#'
layers:
-
name: API
- name: API
collectors:
-
type: className
regex: OpenTelemetry\\API\\*
-
name: SDK
- type: className
regex: ^OpenTelemetry\\API\\*
- name: SDK
collectors:
-
type: className
regex: OpenTelemetry\\SDK\\*
-
name: Context
- type: className
regex: ^OpenTelemetry\\SDK\\*
- name: Context
collectors:
-
type: className
regex: OpenTelemetry\\Context\\*
-
name: SemConv
- type: className
regex: ^OpenTelemetry\\Context\\*
- name: SemConv
collectors:
-
type: className
regex: OpenTelemetry\\SemConv\\*
-
name: Contrib
- type: className
regex: ^OpenTelemetry\\SemConv\\*
- name: Contrib
collectors:
-
type: className
regex: OpenTelemetry\\Contrib\\*
-
name: Proto
- type: className
regex: ^OpenTelemetry\\Contrib\\*
- name: OtelProto
collectors:
-
type: className
regex: OpenTelemetry\\Proto\\*
- type: className
regex: ^OpenTelemetry\\Proto\\*
- type: className
regex: ^GPBMetadata\\Opentelemetry\\*
- name: GoogleProtobuf
collectors:
- type: className
regex: ^Google\\Protobuf\\*
- name: Grpc
collectors:
- type: className
regex: ^Grpc\\
- name: PsrLog
collectors:
- type: className
regex: ^Psr\\Log\\
- name: PsrHttp
collectors:
- type: className
regex: ^Psr\\Http\\
- name: Http
collectors:
- type: className
regex: ^Http\\
- name: NyholmDsn
collectors:
- type: className
regex: ^Nyholm\\Dsn\\
- name: Prometheus
collectors:
- type: className
regex: ^Prometheus\\
- name: FFI
collectors:
- type: className
regex: ^FFI\\
ruleset:
Contrib:
- API
- SDK
- Context
- Proto
- SemConv
Context: ~
Context:
- FFI
SemConv: ~
API:
- Context
- SemConv
SDK:
- API
- Context
- SemConv
API:
- PsrLog
- PsrHttp
- Http
- NyholmDsn
OtelProto:
- GoogleProtobuf
- Grpc
Contrib:
- API
- SDK
- Context
- SemConv
- OtelProto
- Grpc
- PsrLog
- PsrHttp
- Http
- NyholmDsn
- Prometheus

View File

@ -4,8 +4,8 @@ declare(strict_types=1);
require __DIR__ . '/../../vendor/autoload.php';
use OpenTelemetry\Contrib\Prometheus\PrometheusExporter;
use OpenTelemetry\SDK\Metrics\Counter;
use OpenTelemetry\SDK\Metrics\Exporters\PrometheusExporter;
use Prometheus\CollectorRegistry;
use Prometheus\Storage\Redis;

1
proto/otel/VERSION Normal file
View File

@ -0,0 +1 @@
v0.11.0

27
proto/otel/composer.json Normal file
View File

@ -0,0 +1,27 @@
{
"name": "open-telemetry/proto-otel",
"description": "PHP protobuf files for communication with OpenTelemetry OTLP collectors/servers.",
"keywords": ["opentelemetry", "otel", "metrics", "tracing", "logging", "apm", "gRPC", "protobuf", "otlp"],
"type": "library",
"license": "Apache-2.0",
"authors": [
{
"name": "opentelemetry-php contributors",
"homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors"
}
],
"require": {
"php": "^7.4 || ^8.0",
"google/protobuf": "^v3.3.0"
},
"autoload": {
"psr-4": {
"Opentelemetry\\Proto\\": "Opentelemetry/Proto/",
"GPBMetadata\\Opentelemetry\\": "GPBMetadata/Opentelemetry/"
}
},
"suggest": {
"ext-protobuf": "For better performance, when dealing with the protobuf format",
"ext-grpc": "To use the gRPC based exporters"
}
}

View File

@ -1,6 +1,31 @@
apk update && apk add git
mkdir /mnt/proto
git clone https://github.com/open-telemetry/opentelemetry-proto
DESTINATION_DIR=/mnt/proto/otel
REPO_DIR=opentelemetry-proto
protoc --proto_path=opentelemetry-proto/ --php_out=/mnt/proto --grpc_out=/mnt/proto --plugin=protoc-gen-grpc=usr/local/bin/grpc_php_plugin $(find opentelemetry-proto/opentelemetry -iname "*.proto")
mkdir -p $DESTINATION_DIR
rm -R ./$REPO_DIR
git clone https://github.com/open-telemetry/$REPO_DIR
TAG=$(
# shellcheck disable=SC2164
cd ./$REPO_DIR
# shellcheck disable=SC2046
# shellcheck disable=SC2006
TAG=$(git describe --tags `git rev-list --tags --max-count=1`)
git checkout "${TAG}"
echo "$TAG"
)
echo "Generating protobuf files for version $TAG ..."
# shellcheck disable=SC2046
protoc --proto_path=$REPO_DIR/ --php_out=$DESTINATION_DIR --grpc_out=$DESTINATION_DIR \
--plugin=protoc-gen-grpc=usr/local/bin/grpc_php_plugin $(find $REPO_DIR/opentelemetry/proto -iname "*.proto")
echo "$TAG" > $DESTINATION_DIR/VERSION
echo "Done!"

23
src/API/composer.json Normal file
View File

@ -0,0 +1,23 @@
{
"name": "open-telemetry/api",
"description": "API for OpenTelemetry PHP.",
"keywords": ["opentelemetry", "otel", "metrics", "tracing", "logging", "apm", "api"],
"type": "library",
"license": "Apache-2.0",
"authors": [
{
"name": "opentelemetry-php contributors",
"homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors"
}
],
"require": {
"php": "^7.4 || ^8.0",
"open-telemetry/context": "self.version",
"open-telemetry/sem-conv": "self.version"
},
"autoload": {
"psr-4": {
"OpenTelemetry\\API\\": ""
}
}
}

24
src/Context/composer.json Normal file
View File

@ -0,0 +1,24 @@
{
"name": "open-telemetry/context",
"description": "Context implementation for OpenTelemetry PHP.",
"keywords": ["opentelemetry", "otel", "metrics", "tracing", "logging", "apm", "context"],
"type": "library",
"license": "Apache-2.0",
"authors": [
{
"name": "opentelemetry-php contributors",
"homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors"
}
],
"require": {
"php": "^7.4 || ^8.0"
},
"autoload": {
"psr-4": {
"OpenTelemetry\\Context\\": ""
}
},
"suggest": {
"ext-ffi": "To allow context switching in Fibers"
}
}

View File

@ -2,11 +2,12 @@
declare(strict_types=1);
namespace OpenTelemetry\SDK\Metrics\Exporters;
namespace OpenTelemetry\Contrib\Prometheus;
use OpenTelemetry\API\Metrics as API;
use OpenTelemetry\SDK\Metrics\Counter;
use OpenTelemetry\SDK\Metrics\Exceptions\CantBeExported;
use OpenTelemetry\SDK\Metrics\Exporters\AbstractExporter;
use Prometheus\CollectorRegistry;
class PrometheusExporter extends AbstractExporter

34
src/Contrib/composer.json Normal file
View File

@ -0,0 +1,34 @@
{
"name": "open-telemetry/sdk-contrib",
"description": "Vendor specific implementations for OpenTelemetry PHP API/SDK.",
"keywords": ["opentelemetry", "otel", "metrics", "tracing", "logging", "apm", "otlp", "jaeger", "zipkin", "prometheus", "newrelic"],
"type": "library",
"license": "Apache-2.0",
"authors": [
{
"name": "opentelemetry-php contributors",
"homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors"
}
],
"require": {
"php": "^7.4 || ^8.0",
"ext-json": "*",
"nyholm/dsn": "^2.0.0",
"open-telemetry/api": "self.version",
"open-telemetry/context": "self.version",
"open-telemetry/proto-otel": "self.version",
"open-telemetry/sdk": "self.version",
"open-telemetry/sem-conv": "self.version",
"php-http/async-client-implementation": "^1.0",
"php-http/discovery": "^1.14",
"promphp/prometheus_client_php": "^2.2.1",
"psr/http-factory-implementation": "^1.0",
"psr/log": "^1.1",
"symfony/polyfill-mbstring": "^1.23"
},
"autoload": {
"psr-4": {
"OpenTelemetry\\Contrib\\": ""
}
}
}

34
src/SDK/composer.json Normal file
View File

@ -0,0 +1,34 @@
{
"name": "open-telemetry/sdk",
"description": "SDK for OpenTelemetry PHP.",
"keywords": ["opentelemetry", "otel", "metrics", "tracing", "logging", "apm", "sdk"],
"type": "library",
"license": "Apache-2.0",
"authors": [
{
"name": "opentelemetry-php contributors",
"homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors"
}
],
"require": {
"php": "^7.4 || ^8.0",
"ext-json": "*",
"nyholm/dsn": "^2.0.0",
"open-telemetry/api": "self.version",
"open-telemetry/context": "self.version",
"open-telemetry/sem-conv": "self.version",
"php-http/async-client-implementation": "^1.0",
"php-http/discovery": "^1.14",
"psr/http-factory-implementation": "^1.0",
"psr/log": "^1.1",
"symfony/polyfill-mbstring": "^1.23"
},
"autoload": {
"psr-4": {
"OpenTelemetry\\SDK\\": ""
}
},
"suggest": {
"ext-mbstring": "To increase performance of string operations"
}
}

21
src/SemConv/composer.json Normal file
View File

@ -0,0 +1,21 @@
{
"name": "open-telemetry/sem-conv",
"description": "Semantic conventions for OpenTelemetry PHP.",
"keywords": ["opentelemetry", "otel", "metrics", "tracing", "logging", "apm", "semconv", "semantic conventions"],
"type": "library",
"license": "Apache-2.0",
"authors": [
{
"name": "opentelemetry-php contributors",
"homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors"
}
],
"require": {
"php": "^7.4 || ^8.0"
},
"autoload": {
"psr-4": {
"OpenTelemetry\\SemConv\\": ""
}
}
}

Some files were not shown because too many files have changed in this diff Show More