22
33import carpet .CarpetExtension ;
44import carpet .CarpetServer ;
5- import io .prometheus .metrics .exporter .httpserver .HTTPServer ;
6- import io .prometheus .metrics .instrumentation .jvm .JvmMetrics ;
7- import monkey .info .command .metrics .Mobcaps ;
5+ import carpet .settings .ParsedRule ;
6+ import com .mojang .brigadier .CommandDispatcher ;
87import monkey .info .command .metrics .Tick ;
8+ import monkey .info .command .utils .CarpetExtraTranslations ;
99import net .fabricmc .api .ModInitializer ;
1010import net .fabricmc .fabric .api .event .lifecycle .v1 .ServerLifecycleEvents ;
1111import net .minecraft .server .MinecraftServer ;
12+ import net .minecraft .server .command .ServerCommandSource ;
1213import org .apache .logging .log4j .LogManager ;
1314import org .apache .logging .log4j .Logger ;
15+ import org .apache .logging .log4j .util .TriConsumer ;
1416
15- import java .util .Timer ;
17+ import java .util .Map ;
1618
1719public class InfoCommand implements CarpetExtension , ModInitializer {
1820 public static final Logger LOGGER = LogManager .getLogger ("info-command" );
1921 public static MinecraftServer server ;
20- private final Timer metricUpdateLoop ;
21- private HTTPServer httpServer ;
22+ public final Prometheus prometheus ;
2223
2324 public InfoCommand () {
24- metricUpdateLoop = new Timer ("Metric Update Loop" );
25-
25+ prometheus = new Prometheus ();
2626 }
2727
2828 @ Override
@@ -31,52 +31,49 @@ public void onInitialize() {
3131 ServerLifecycleEvents .SERVER_STARTING .register (server -> InfoCommand .server = server );
3232 }
3333
34- // @Override
35- // public void registerCommands(CommandDispatcher<ServerCommandSource> dispatcher) {
36- // }
37-
3834 @ Override
39- public void onServerLoaded (MinecraftServer server ) {
40- JvmMetrics .builder ().register ();
41-
42- MetricUpdate metricUpdater = new MetricUpdate ();
43- metricUpdater .registerMetric (new Tick ());
44- metricUpdater .registerMetric (new Mobcaps ());
45-
46- this .getMetricUpdateLoop ().schedule (metricUpdater , 0 , InfoCommandSettings .prometheusUpdateInterval );
47-
48- try {
49- HTTPServer httpServer = HTTPServer .builder ()
50- .port (InfoCommandSettings .prometheusPort )
51- .buildAndStart ();
52-
53- this .setHttpServer (httpServer );
54- } catch (Exception e ) {
55- LOGGER .error ("Start HttpServer error:" , e );
56- }
35+ public void registerCommands (CommandDispatcher <ServerCommandSource > dispatcher ) {
36+ Tick .registerCommand (dispatcher );
5737 }
5838
5939 @ Override
60- public void onGameStarted ( ) {
61- CarpetServer . settingsManager . parseSettingsClass ( InfoCommandSettings . class );
40+ public void onServerLoaded ( MinecraftServer server ) {
41+ this . prometheus . start ( );
6242 }
6343
6444 @ Override
6545 public void onServerClosed (MinecraftServer server ) {
66- this .getHttpServer ().close ();
67- this .getMetricUpdateLoop ().cancel ();
46+ this .prometheus .stop ();
6847 }
6948
70-
71- public Timer getMetricUpdateLoop () {
72- return metricUpdateLoop ;
49+ @ Override
50+ public void onGameStarted () {
51+ CarpetServer .settingsManager .parseSettingsClass (InfoCommandSettings .class );
52+ CarpetServer .settingsManager .addRuleObserver (new OnConfigChange (this ));
7353 }
7454
75- public HTTPServer getHttpServer () {
76- return httpServer ;
55+
56+ @ Override
57+ public Map <String , String > canHasTranslations (String lang ) {
58+ return CarpetExtraTranslations .getTranslationFromResourcePath (lang );
7759 }
7860
79- public void setHttpServer (HTTPServer httpServer ) {
80- this .httpServer = httpServer ;
61+ private record OnConfigChange (
62+ InfoCommand infoCommand
63+ ) implements TriConsumer <ServerCommandSource , ParsedRule <?>, String > {
64+
65+ @ Override
66+ public void accept (ServerCommandSource serverCommandSource , ParsedRule <?> parsedRule , String s ) {
67+ if (!parsedRule .categories .contains (InfoCommandSettings .INFO_COMMAND )) {
68+ return ;
69+ }
70+
71+ String name = parsedRule .name ;
72+ if (name .equals ("prometheusEnable" ) && !parsedRule .getBoolValue ()) {
73+ infoCommand .prometheus .stop ();
74+ } else if (name .startsWith ("prometheus" )) {
75+ infoCommand .prometheus .start (); // reload prometheus server
76+ }
77+ }
8178 }
8279}
0 commit comments