create(); } catch (\Throwable $t) { self::logWarning(sprintf('Unable to create %s meter provider: %s', $exporterName, $t->getMessage())); $exporter = new NoopMetricExporter(); } // @todo "The exporter MUST be paired with a periodic exporting MetricReader" $reader = new ExportingReader($exporter); $resource = ResourceInfoFactory::defaultResource(); $exemplarFilter = $this->createExemplarFilter(Configuration::getEnum(Variables::OTEL_METRICS_EXEMPLAR_FILTER)); return MeterProvider::builder() ->setResource($resource) ->addReader($reader) ->setExemplarFilter($exemplarFilter) ->build(); } private function createExemplarFilter(string $name): ExemplarFilterInterface { switch ($name) { case KnownValues::VALUE_WITH_SAMPLED_TRACE: return new WithSampledTraceExemplarFilter(); case KnownValues::VALUE_ALL: return new AllExemplarFilter(); case KnownValues::VALUE_NONE: return new NoneExemplarFilter(); default: self::logWarning('Unknown exemplar filter: ' . $name); return new NoneExemplarFilter(); } } }