0

init repo

This commit is contained in:
2021-09-12 06:54:23 +03:00
commit c174daacf5
31 changed files with 1334 additions and 0 deletions

49
sponge/build.gradle Normal file
View File

@@ -0,0 +1,49 @@
//file:noinspection GrUnresolvedAccess
plugins {
id 'java'
id 'com.github.johnrengelman.shadow' version '7.0.0'
}
group 'ru.dmitriymx'
version '1.0-SNAPSHOT'
jar.archiveBaseName.set(project.name)
compileJava {
sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8
options.encoding = 'UTF-8'
}
repositories {
mavenCentral()
maven { url 'https://repo.spongepowered.org/maven' }
}
dependencies {
implementation(project(':core'))
annotationProcessor 'org.projectlombok:lombok:1.18.20'
compileOnly 'org.projectlombok:lombok:1.18.20'
compileOnly('org.spongepowered:spongeapi:7.3.0') {
exclude(module: 'asm')
exclude(module: 'caffeine')
exclude(module: 'commons-lang3')
exclude(module: 'configurate-gson')
exclude(module: 'configurate-hocon')
exclude(module: 'configurate-yaml')
exclude(module: 'error_prone_annotations')
exclude(module: 'flow-math')
exclude(module: 'flow-noise')
exclude(module: 'gson')
exclude(module: 'guava')
exclude(module: 'jsr305')
}
}
shadowJar {
archiveBaseName.set('mc-mectics-sponge')
archiveVersion.set(project.version.toString())
archiveClassifier.set('')
relocate('assets', 'assets.minecraft_metrics')
}

View File

@@ -0,0 +1,70 @@
package ru.dmitriymx.minecraft.metrics.sponge;
import com.google.inject.Inject;
import com.typesafe.config.Config;
import lombok.SneakyThrows;
import org.spongepowered.api.config.ConfigDir;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.game.state.GameStartedServerEvent;
import org.spongepowered.api.event.game.state.GameStoppingServerEvent;
import org.spongepowered.api.plugin.Plugin;
import org.spongepowered.api.plugin.PluginContainer;
import ru.dmitriymx.minecraft.config.ConfigProvider;
import ru.dmitriymx.minecraft.metrics.MetricsServer;
import java.nio.file.Files;
import java.nio.file.Path;
@Plugin(id = "minecraft_metrics",
name = "MinecraftMetrics",
description = "Minecraft Prometheus Exporter",
version = "1.0",
authors = { "DmitriyMX" })
@SuppressWarnings("unused")
public class MetricsPlugin {
@Inject
private org.slf4j.Logger slf4jLogger;
@Inject
@ConfigDir(sharedRoot = false)
private Path pluginDataDirPath;
@Inject
private PluginContainer pluginContainer;
private MetricsServer metricsServer;
@Listener
@SneakyThrows
public void onGameStartedServerEvent(GameStartedServerEvent event) {
if (Files.notExists(pluginDataDirPath)) {
slf4jLogger.info("Create data dir: {}", pluginDataDirPath);
Files.createDirectories(pluginDataDirPath);
}
ConfigProvider configProvider = new SpongeConfigProvider(pluginContainer, pluginDataDirPath);
Config config = configProvider.get();
SpongeLogger logger = new SpongeLogger(slf4jLogger);
metricsServer = new MetricsServer(
config.getString("server.host"),
config.getInt("server.port"),
config.getString("server.endpoint"),
logger,
new SpongeInfoProvider()
);
//noinspection HttpUrlsUsage
logger.info("Start metrics server: http://{}:{}{}",
config.getString("server.host"),
config.getInt("server.port"),
config.getString("server.endpoint"));
metricsServer.start();
}
@Listener
public void onGameStoppingServerEvent(GameStoppingServerEvent event) {
metricsServer.stop();
}
}

View File

@@ -0,0 +1,41 @@
package ru.dmitriymx.minecraft.metrics.sponge;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.spongepowered.api.asset.Asset;
import org.spongepowered.api.plugin.PluginContainer;
import ru.dmitriymx.minecraft.config.ConfigProvider;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Optional;
@RequiredArgsConstructor
public class SpongeConfigProvider implements ConfigProvider {
private final PluginContainer plugin;
private final Path pluginDataDirPath;
@Override
@SneakyThrows
public Config get() {
Optional<Asset> optionalAsset = plugin.getAsset("config-default.conf");
if (!optionalAsset.isPresent()) {
throw new RuntimeException("Where is 'config-default.conf'!!??");
}
Config defaultConfig = ConfigFactory.parseString(optionalAsset.get().readString());
Config config;
Path userConfigPath = pluginDataDirPath.resolve("config.conf");
if (Files.exists(userConfigPath)) {
Config userConfig = ConfigFactory.parseFile(userConfigPath.toFile());
config = userConfig.withFallback(defaultConfig).resolve();
} else {
config = defaultConfig.resolve();
}
return config;
}
}

View File

@@ -0,0 +1,17 @@
package ru.dmitriymx.minecraft.metrics.sponge;
import org.spongepowered.api.Sponge;
import ru.dmitriymx.minecraft.metrics.MinecraftInfoProvider;
public class SpongeInfoProvider implements MinecraftInfoProvider {
@Override
public int playersOnline() {
return Sponge.getServer().getOnlinePlayers().size();
}
@Override
public double tps() {
return Sponge.getServer().getTicksPerSecond();
}
}

View File

@@ -0,0 +1,40 @@
package ru.dmitriymx.minecraft.metrics.sponge;
import lombok.RequiredArgsConstructor;
import ru.dmitriymx.minecraft.logger.LoggerAdapter;
@RequiredArgsConstructor
public class SpongeLogger extends LoggerAdapter {
private final org.slf4j.Logger logger;
@Override
public void debug(String message) {
logger.debug(message);
}
@Override
public void debug(String message, Throwable throwable) {
logger.debug(message, throwable);
}
@Override
public void info(String message) {
logger.info(message);
}
@Override
public void warn(String message) {
logger.warn(message);
}
@Override
public void error(String message) {
logger.error(message);
}
@Override
public void error(String message, Throwable throwable) {
logger.error(message, throwable);
}
}

View File

@@ -0,0 +1,17 @@
[
{
"modid": "minecraft_metrics",
"name": "MinecraftMetrics",
"version": "1.0",
"description": "Minecraft Prometheus Exporter",
"authorList": [
"DmitriyMX"
],
"dependencies": [
"spongeapi"
],
"requiredMods": [
"spongeapi"
]
}
]