mirror of https://github.com/hyperledger/besu
Metrics via dagger (#5244)
* dagger component * pushed up MetricsSystemModule * passes around the BesuComponent as an interim application context till more things are managed by Dagger --------- Signed-off-by: Justin Florentine <justin+github@florentine.us>pull/5374/head
parent
681f4a5116
commit
25ab21128e
@ -0,0 +1,71 @@ |
||||
/* |
||||
* Copyright Hyperledger Besu Contributors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
*/ |
||||
|
||||
package org.hyperledger.besu.components; |
||||
|
||||
import org.hyperledger.besu.Besu; |
||||
import org.hyperledger.besu.RunnerBuilder; |
||||
import org.hyperledger.besu.chainexport.RlpBlockExporter; |
||||
import org.hyperledger.besu.chainimport.JsonBlockImporter; |
||||
import org.hyperledger.besu.chainimport.RlpBlockImporter; |
||||
import org.hyperledger.besu.cli.BesuCommand; |
||||
import org.hyperledger.besu.controller.BesuController; |
||||
import org.hyperledger.besu.metrics.prometheus.MetricsConfiguration; |
||||
import org.hyperledger.besu.services.BesuPluginContextImpl; |
||||
|
||||
import javax.inject.Named; |
||||
import javax.inject.Singleton; |
||||
|
||||
import dagger.Module; |
||||
import dagger.Provides; |
||||
import org.slf4j.Logger; |
||||
|
||||
/** |
||||
* A dagger module that know how to create the BesuCommand, which collects all configuration |
||||
* settings. |
||||
*/ |
||||
@Module |
||||
public class BesuCommandModule { |
||||
|
||||
@Provides |
||||
@Singleton |
||||
BesuCommand provideBesuCommand(final BesuComponent besuComponent) { |
||||
final BesuCommand besuCommand = |
||||
new BesuCommand( |
||||
besuComponent, |
||||
RlpBlockImporter::new, |
||||
JsonBlockImporter::new, |
||||
RlpBlockExporter::new, |
||||
new RunnerBuilder(), |
||||
new BesuController.Builder(), |
||||
new BesuPluginContextImpl(), |
||||
System.getenv()); |
||||
besuCommand.toCommandLine(); |
||||
return besuCommand; |
||||
} |
||||
|
||||
@Provides |
||||
@Singleton |
||||
MetricsConfiguration provideMetricsConfiguration(final BesuCommand provideFrom) { |
||||
return provideFrom.metricsConfiguration(); |
||||
} |
||||
|
||||
@Provides |
||||
@Named("besuCommandLogger") |
||||
@Singleton |
||||
Logger provideBesuCommandLogger() { |
||||
return Besu.getFirstLogger(); |
||||
} |
||||
} |
@ -0,0 +1,69 @@ |
||||
/* |
||||
* Copyright Hyperledger Besu Contributors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
* |
||||
*/ |
||||
|
||||
package org.hyperledger.besu.components; |
||||
|
||||
import org.hyperledger.besu.cli.BesuCommand; |
||||
import org.hyperledger.besu.ethereum.bonsai.cache.CachedMerkleTrieLoader; |
||||
import org.hyperledger.besu.ethereum.bonsai.cache.CachedMerkleTrieLoaderModule; |
||||
import org.hyperledger.besu.metrics.MetricsSystemModule; |
||||
import org.hyperledger.besu.metrics.ObservableMetricsSystem; |
||||
|
||||
import javax.inject.Named; |
||||
import javax.inject.Singleton; |
||||
|
||||
import dagger.Component; |
||||
import org.slf4j.Logger; |
||||
|
||||
/** An application context that knows how to provide dependencies based on Dagger setup. */ |
||||
@Singleton |
||||
@Component( |
||||
modules = { |
||||
BesuCommandModule.class, |
||||
MetricsSystemModule.class, |
||||
CachedMerkleTrieLoaderModule.class |
||||
}) |
||||
public interface BesuComponent { |
||||
|
||||
/** |
||||
* the configured and parsed representation of the user issued command to run Besu |
||||
* |
||||
* @return BesuCommand |
||||
*/ |
||||
BesuCommand getBesuCommand(); |
||||
|
||||
/** |
||||
* a cached trie node loader |
||||
* |
||||
* @return CachedMerkleTrieLoader |
||||
*/ |
||||
CachedMerkleTrieLoader getCachedMerkleTrieLoader(); |
||||
|
||||
/** |
||||
* a metrics system that is observable by a Prometheus or OTEL metrics collection subsystem |
||||
* |
||||
* @return ObservableMetricsSystem |
||||
*/ |
||||
ObservableMetricsSystem getObservableMetricsSystem(); |
||||
|
||||
/** |
||||
* a Logger specifically configured to provide configuration feedback to users. |
||||
* |
||||
* @return Logger |
||||
*/ |
||||
@Named("besuCommandLogger") |
||||
Logger getBesuCommandLogger(); |
||||
} |
@ -0,0 +1,31 @@ |
||||
/* |
||||
* Copyright Hyperledger Besu Contributors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
*/ |
||||
|
||||
package org.hyperledger.besu.ethereum.bonsai.cache; |
||||
|
||||
import org.hyperledger.besu.metrics.ObservableMetricsSystem; |
||||
|
||||
import dagger.Module; |
||||
import dagger.Provides; |
||||
|
||||
@Module |
||||
public class CachedMerkleTrieLoaderModule { |
||||
|
||||
@Provides |
||||
CachedMerkleTrieLoader provideCachedMerkleTrieLoaderModule( |
||||
final ObservableMetricsSystem metricsSystem) { |
||||
return new CachedMerkleTrieLoader(metricsSystem); |
||||
} |
||||
} |
@ -0,0 +1,45 @@ |
||||
/* |
||||
* Copyright Hyperledger Besu Contributors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
* |
||||
*/ |
||||
|
||||
package org.hyperledger.besu.metrics; |
||||
|
||||
import org.hyperledger.besu.metrics.prometheus.MetricsConfiguration; |
||||
import org.hyperledger.besu.plugin.services.MetricsSystem; |
||||
|
||||
import javax.inject.Singleton; |
||||
|
||||
import dagger.Module; |
||||
import dagger.Provides; |
||||
|
||||
/** |
||||
* Dagger module for providing the {@link MetricsSystem} and {@link ObservableMetricsSystem} |
||||
* instances. |
||||
*/ |
||||
@Module |
||||
public class MetricsSystemModule { |
||||
|
||||
@Provides |
||||
@Singleton |
||||
MetricsSystem provideMetricsSystem(final MetricsConfiguration metricsConfig) { |
||||
return MetricsSystemFactory.create(metricsConfig); |
||||
} |
||||
|
||||
@Provides |
||||
@Singleton |
||||
ObservableMetricsSystem provideObservableMetricsSystem(final MetricsConfiguration metricsConfig) { |
||||
return MetricsSystemFactory.create(metricsConfig); |
||||
} |
||||
} |
Loading…
Reference in new issue