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