|
19 | 19 | #include "coordinator/CoordinatorProcess.h" |
20 | 20 | #include "coordinator/CoordinatorMessagesDispatcher.h" |
21 | 21 | #include "coordinator/CoordinatorConfigurationProvider.h" |
| 22 | +#include "coordinator/CoordinatorSharedDataQueue.h" |
| 23 | +#include "coordinator/CoordinatorTelemetrySignalsSender.h" |
| 24 | +#include "coordinator/WorkerRegistrar.h" |
22 | 25 | #include "transport/HttpTransportAsync.h" |
23 | 26 | #include "transport/OpAmp.h" |
24 | 27 | #include "DependencyAutoLoaderGuard.h" |
25 | 28 | #include "VendorCustomizationsInterface.h" |
| 29 | +#include <memory> |
26 | 30 | #include <signal.h> |
27 | 31 |
|
28 | 32 | namespace opentelemetry::php { |
29 | 33 | // clang-format off |
30 | 34 |
|
31 | 35 | AgentGlobals::AgentGlobals(std::shared_ptr<LoggerInterface> logger, |
32 | | - std::shared_ptr<LoggerSinkInterface> logSinkStdErr, |
33 | | - std::shared_ptr<LoggerSinkInterface> logSinkSysLog, |
34 | | - std::shared_ptr<LoggerSinkFile> logSinkFile, |
| 36 | + std::function<void(opentelemetry::php::ConfigurationSnapshot const &)> loggerConfigUpdateFunc, |
35 | 37 | std::shared_ptr<PhpBridgeInterface> bridge, |
36 | 38 | std::shared_ptr<InstrumentedFunctionHooksStorageInterface> hooksStorage, |
37 | 39 | std::shared_ptr<InferredSpans> inferredSpans, |
| 40 | + std::shared_ptr<coordinator::CoordinatorSharedDataQueue> sharedDataQueue, |
| 41 | + std::shared_ptr<coordinator::CoordinatorConfigurationProvider> sharedCoordinatorConfigProvider, |
38 | 42 | std::shared_ptr<config::OptionValueProviderInterface> defaultOptionValueProvider) : |
39 | 43 | vendorCustomizations_(::getVendorCustomizations ? ::getVendorCustomizations() : nullptr), |
40 | 44 | forkableRegistry_(std::make_shared<ForkableRegistry>()), |
41 | | - configManager_(std::make_shared<ConfigurationManager>( |
| 45 | + configManager_(std::make_shared<ConfigurationManager>(logger, |
42 | 46 | std::make_shared<config::PrioritizedOptionValueProviderChain>(std::initializer_list<std::pair<int, std::shared_ptr<config::OptionValueProviderInterface>>>{ |
43 | 47 | {0, defaultOptionValueProvider}, |
44 | 48 | vendorCustomizations_ ? vendorCustomizations_->getOptionValueProvider() : std::pair<int, std::shared_ptr<opentelemetry::php::config::OptionValueProviderInterface>>{0, nullptr} // create dummy pair if vendor customizations or its option provider is not available, to avoid checks in PrioritizedOptionValueProviderChain |
45 | 49 | }))), |
46 | 50 | config_(std::make_shared<opentelemetry::php::ConfigurationStorage>([this](ConfigurationSnapshot &cfg) { return configManager_->updateIfChanged(cfg); })), |
47 | 51 | logger_(std::move(logger)), |
48 | | - logSinkStdErr_(std::move(logSinkStdErr)), |
49 | | - logSinkSysLog_(std::move(logSinkSysLog)), |
50 | | - logSinkFile_(std::move(logSinkFile)), |
51 | 52 | bridge_(std::move(bridge)), |
| 53 | + sharedMemory_(std::make_shared<opentelemetry::php::SharedMemoryState>()), |
| 54 | + coordinatorConfigProvider_(std::move(sharedCoordinatorConfigProvider)), |
| 55 | + processor_(std::make_shared<opentelemetry::php::coordinator::ChunkedMessageProcessor>(logger_, sharedDataQueue, [](const std::span<const std::byte> data) { })), |
| 56 | + httpTransportAsync_(std::make_shared<opentelemetry::php::coordinator::CoordinatorTelemetrySignalsSender>(logger_, [this](std::string const &payload) { return processor_->sendPayload(payload); })), |
52 | 57 | dependencyAutoLoaderGuard_(std::make_shared<DependencyAutoLoaderGuard>(bridge_, logger_)), |
53 | 58 | hooksStorage_(std::move(hooksStorage)), |
54 | 59 | sapi_(std::make_shared<opentelemetry::php::PhpSapi>(bridge_->getPhpSapiName())), |
55 | 60 | inferredSpans_(std::move(inferredSpans)), |
56 | 61 | periodicTaskExecutor_(), |
57 | | - httpTransportAsync_(std::make_shared<opentelemetry::php::transport::HttpTransportAsync<>>(logger_, config_)), |
58 | | - resourceDetector_(std::make_shared<opentelemetry::php::ResourceDetector>(bridge_)), |
59 | | - opAmp_(std::make_shared<opentelemetry::php::transport::OpAmp>(logger_, config_, httpTransportAsync_, resourceDetector_)), |
60 | | - sharedMemory_(std::make_shared<opentelemetry::php::SharedMemoryState>()), |
61 | 62 | requestScope_(std::make_shared<opentelemetry::php::RequestScope>(logger_, bridge_, sapi_, sharedMemory_, dependencyAutoLoaderGuard_, inferredSpans_, config_, [hs = hooksStorage_]() { hs->clear(); }, [this]() { return getPeriodicTaskExecutor();}, [this]() { return coordinatorConfigProvider_->triggerUpdateIfChanged(); })), |
62 | | - workerRegistry_(std::make_shared<opentelemetry::php::coordinator::WorkerRegistry>(logger_)), |
63 | | - messagesDispatcher_(std::make_shared<opentelemetry::php::coordinator::CoordinatorMessagesDispatcher>(logger_, httpTransportAsync_, workerRegistry_)), |
64 | | - coordinatorConfigProvider_(std::make_shared<opentelemetry::php::coordinator::CoordinatorConfigurationProvider>(logger_, opAmp_)), |
65 | | - coordinatorProcess_(std::make_shared<opentelemetry::php::coordinator::CoordinatorProcess>(logger_, messagesDispatcher_, coordinatorConfigProvider_, workerRegistry_)) |
| 63 | + workerRegistrar_(std::make_shared<opentelemetry::php::coordinator::WorkerRegistrar>(logger_, [this](const std::string &payload) { return processor_->sendPayload(payload); })) |
66 | 64 | { |
67 | | - // forkableRegistry_->registerForkable(httpTransportAsync_); |
68 | | - // forkableRegistry_->registerForkable(opAmp_); |
| 65 | + forkableRegistry_->registerForkable(workerRegistrar_); |
69 | 66 |
|
70 | | - configManager_->attachLogger(logger_); |
71 | | - |
72 | | - config_->addConfigUpdateWatcher([logger = logger_, stderrsink = logSinkStdErr_, syslogsink = logSinkSysLog_, filesink = logSinkFile_](ConfigurationSnapshot const &cfg) { |
73 | | - stderrsink->setLevel(cfg.log_level_stderr); |
74 | | - syslogsink->setLevel(cfg.log_level_syslog); |
75 | | - if (filesink) { |
76 | | - if (cfg.log_file.empty()) { |
77 | | - filesink->setLevel(LogLevel::logLevel_off); |
78 | | - } else { |
79 | | - filesink->setLevel(cfg.log_level_file); |
80 | | - filesink->reopen(utils::getParameterizedString(cfg.log_file)); |
81 | | - } |
82 | | - } |
83 | | - |
84 | | - logger->setLogFeatures(utils::parseLogFeatures(logger, cfg.log_features)); |
85 | | - }); |
86 | | - } |
| 67 | + config_->addConfigUpdateWatcher(loggerConfigUpdateFunc); |
| 68 | +} |
87 | 69 |
|
88 | 70 |
|
89 | 71 | AgentGlobals::~AgentGlobals() { |
90 | 72 | ELOG_DEBUG(logger_, MODULE, "AgentGlobals shutdown"); |
91 | 73 | config_->removeAllConfigUpdateWatchers(); |
92 | | - opAmp_->removeAllConfigUpdateWatchers(); |
| 74 | + forkableRegistry_->clear(); |
93 | 75 | } |
94 | 76 |
|
95 | 77 | std::shared_ptr<PeriodicTaskExecutor> AgentGlobals::getPeriodicTaskExecutor() { |
|
0 commit comments