Implement global label values
This commit is contained in:
parent
a3f39f5e65
commit
3791510ac0
11 changed files with 49 additions and 18 deletions
|
@ -71,6 +71,16 @@ public class MetricRegistry {
|
||||||
return "minecraft_" + name;
|
return "minecraft_" + name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String[] getGlobalLabelNames() {
|
||||||
|
return new String[] { "instance" };
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getGlobalLabelValues() {
|
||||||
|
return new String[] {
|
||||||
|
this.getExporter().getConfig().getInstanceName(), // server
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public List<Metric> getMetrics() {
|
public List<Metric> getMetrics() {
|
||||||
return metrics;
|
return metrics;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ public class MetricUpdater extends TimerTask {
|
||||||
public void run() {
|
public void run() {
|
||||||
for (Metric metric : this.getMetrics()) {
|
for (Metric metric : this.getMetrics()) {
|
||||||
try {
|
try {
|
||||||
metric.update(this.getExporter());
|
metric.onShouldUpdate(this.getExporter());
|
||||||
} catch (Exception exception) {
|
} catch (Exception exception) {
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ public class MainConfig extends Config {
|
||||||
private int port;
|
private int port;
|
||||||
private int updateInterval;
|
private int updateInterval;
|
||||||
private boolean useSpark;
|
private boolean useSpark;
|
||||||
|
private String instanceName;
|
||||||
|
|
||||||
public MainConfig(String name) {
|
public MainConfig(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
|
@ -24,6 +25,7 @@ public class MainConfig extends Config {
|
||||||
this.setUpdateInterval(ConvertUtil.intToStringOrDefault(updateIntervalString, 1000));
|
this.setUpdateInterval(ConvertUtil.intToStringOrDefault(updateIntervalString, 1000));
|
||||||
|
|
||||||
this.setShouldUseSpark(properties.getProperty("use-spark", "true").equalsIgnoreCase("true"));
|
this.setShouldUseSpark(properties.getProperty("use-spark", "true").equalsIgnoreCase("true"));
|
||||||
|
this.setInstanceName(properties.getProperty("instance-name", "default"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPort() {
|
public int getPort() {
|
||||||
|
@ -49,4 +51,12 @@ public class MainConfig extends Config {
|
||||||
public void setShouldUseSpark(boolean useSpark) {
|
public void setShouldUseSpark(boolean useSpark) {
|
||||||
this.useSpark = useSpark;
|
this.useSpark = useSpark;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getInstanceName() {
|
||||||
|
return instanceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstanceName(String instanceName) {
|
||||||
|
this.instanceName = instanceName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ public class Entities extends Metric {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(FabricExporter exporter) {
|
public void onShouldUpdate(FabricExporter exporter) {
|
||||||
for (ServerWorld world : exporter.getServer().getWorlds()) {
|
for (ServerWorld world : exporter.getServer().getWorlds()) {
|
||||||
HashMap<String, Integer> currentWorldEntities = new HashMap<>();
|
HashMap<String, Integer> currentWorldEntities = new HashMap<>();
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ public class Entities extends Metric {
|
||||||
for (String type : currentWorldEntities.keySet()) {
|
for (String type : currentWorldEntities.keySet()) {
|
||||||
Integer count = currentWorldEntities.get(type);
|
Integer count = currentWorldEntities.get(type);
|
||||||
EntityType<?> entityType = Registry.ENTITY_TYPE.get(new Identifier(type));
|
EntityType<?> entityType = Registry.ENTITY_TYPE.get(new Identifier(type));
|
||||||
this.getGauge().labels(TextUtil.getWorldName(world), entityType.getSpawnGroup().getName(), type).set(count);
|
this.update(TextUtil.getWorldName(world), entityType.getSpawnGroup().getName(), type).set(count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,9 +10,9 @@ public class LoadedChunks extends Metric {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(FabricExporter exporter) {
|
public void onShouldUpdate(FabricExporter exporter) {
|
||||||
for (ServerWorld world : exporter.getServer().getWorlds()) {
|
for (ServerWorld world : exporter.getServer().getWorlds()) {
|
||||||
this.getGauge().labels(TextUtil.getWorldName(world)).set(world.getChunkManager().getLoadedChunkCount());
|
this.update(TextUtil.getWorldName(world)).set(world.getChunkManager().getLoadedChunkCount());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package ru.ruscalworld.fabricexporter.metrics;
|
package ru.ruscalworld.fabricexporter.metrics;
|
||||||
|
|
||||||
import io.prometheus.client.Gauge;
|
import io.prometheus.client.Gauge;
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
import ru.ruscalworld.fabricexporter.FabricExporter;
|
import ru.ruscalworld.fabricexporter.FabricExporter;
|
||||||
import ru.ruscalworld.fabricexporter.MetricRegistry;
|
import ru.ruscalworld.fabricexporter.MetricRegistry;
|
||||||
|
|
||||||
|
@ -13,11 +14,11 @@ public abstract class Metric {
|
||||||
this.gauge = new Gauge.Builder()
|
this.gauge = new Gauge.Builder()
|
||||||
.name(MetricRegistry.getMetricName(name))
|
.name(MetricRegistry.getMetricName(name))
|
||||||
.help(help)
|
.help(help)
|
||||||
.labelNames(labels)
|
.labelNames(ArrayUtils.addAll(labels, MetricRegistry.getGlobalLabelNames()))
|
||||||
.create();
|
.create();
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void update(FabricExporter exporter);
|
public abstract void onShouldUpdate(FabricExporter exporter);
|
||||||
|
|
||||||
public Gauge getGauge() {
|
public Gauge getGauge() {
|
||||||
return gauge;
|
return gauge;
|
||||||
|
@ -26,4 +27,9 @@ public abstract class Metric {
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Gauge.Child update(String... labelValues) {
|
||||||
|
MetricRegistry metricRegistry = FabricExporter.getInstance().getMetricRegistry();
|
||||||
|
return this.getGauge().labels(ArrayUtils.addAll(labelValues, metricRegistry.getGlobalLabelValues()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ public class MillisPerTick extends SparkMetric {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(FabricExporter exporter) {
|
public void onShouldUpdate(FabricExporter exporter) {
|
||||||
GenericStatistic<DoubleAverageInfo, StatisticWindow.MillisPerTick> mspt = this.getSpark().mspt();
|
GenericStatistic<DoubleAverageInfo, StatisticWindow.MillisPerTick> mspt = this.getSpark().mspt();
|
||||||
if (mspt == null) this.setValue(0, 0, 0);
|
if (mspt == null) this.setValue(0, 0, 0);
|
||||||
else this.setValue(
|
else this.setValue(
|
||||||
|
@ -22,8 +22,8 @@ public class MillisPerTick extends SparkMetric {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setValue(double min, double mean, double max) {
|
private void setValue(double min, double mean, double max) {
|
||||||
this.getGauge().labels("min").set(min);
|
this.update("min").set(min);
|
||||||
this.getGauge().labels("mean").set(mean);
|
this.update("mean").set(mean);
|
||||||
this.getGauge().labels("max").set(max);
|
this.update("max").set(max);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,9 +10,9 @@ public class OnlinePlayers extends Metric {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(FabricExporter exporter) {
|
public void onShouldUpdate(FabricExporter exporter) {
|
||||||
for (ServerWorld world : exporter.getServer().getWorlds()) {
|
for (ServerWorld world : exporter.getServer().getWorlds()) {
|
||||||
this.getGauge().labels(TextUtil.getWorldName(world)).set(world.getPlayers().size());
|
this.update(TextUtil.getWorldName(world)).set(world.getPlayers().size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,9 +10,9 @@ public class TicksPerSecond extends SparkMetric {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(FabricExporter exporter) {
|
public void onShouldUpdate(FabricExporter exporter) {
|
||||||
DoubleStatistic<StatisticWindow.TicksPerSecond> tps = this.getSpark().tps();
|
DoubleStatistic<StatisticWindow.TicksPerSecond> tps = this.getSpark().tps();
|
||||||
if (tps == null) this.getGauge().set(20);
|
if (tps == null) this.update().set(20);
|
||||||
else this.getGauge().set(tps.poll(StatisticWindow.TicksPerSecond.MINUTES_1));
|
else this.update().set(tps.poll(StatisticWindow.TicksPerSecond.MINUTES_1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,9 +10,9 @@ public class TotalLoadedChunks extends Metric {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(FabricExporter exporter) {
|
public void onShouldUpdate(FabricExporter exporter) {
|
||||||
for (ServerWorld world : exporter.getServer().getWorlds()) {
|
for (ServerWorld world : exporter.getServer().getWorlds()) {
|
||||||
this.getGauge().labels(TextUtil.getWorldName(world)).set(world.getChunkManager().getTotalChunksLoadedCount());
|
this.update(TextUtil.getWorldName(world)).set(world.getChunkManager().getTotalChunksLoadedCount());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,11 @@
|
||||||
# Default: 25585
|
# Default: 25585
|
||||||
server-port=25585
|
server-port=25585
|
||||||
|
|
||||||
|
# Name of this instance used to identify it when running multiple servers
|
||||||
|
# Must be different on all your servers that use FabricExporter
|
||||||
|
# Default: default
|
||||||
|
instance-name=default
|
||||||
|
|
||||||
# FabricExporter updates gauge metrics every N milliseconds
|
# FabricExporter updates gauge metrics every N milliseconds
|
||||||
# You can change this value if you want metrics to be updated more or less frequently
|
# You can change this value if you want metrics to be updated more or less frequently
|
||||||
# Value must be provided in milliseconds, 1 second = 1000 milliseconds
|
# Value must be provided in milliseconds, 1 second = 1000 milliseconds
|
||||||
|
|
Loading…
Reference in a new issue