bundlewrap/bundles/minecraft/metadata.py
2023-09-24 21:01:51 +02:00

163 lines
5.3 KiB
Python

from bundlewrap.metadata import atomic
defaults = {
'apt': {
'packages': {
'openjdk-17-jre': {},
},
},
'backups': {
'paths': {
'/home/minecraft',
},
},
'icinga2_api': {
'minecraft': {
'services': {
'MINECRAFT SERVER': {
'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_systemd_unit minecraft',
},
},
},
},
'minecraft': {
'java_opts': {
# https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/
'-Daikars.new.flags': 'true',
'-Dusing.aikars.flags': 'https://mcflags.emc.gs',
'-XX:+AlwaysPreTouch': None,
'-XX:+DisableExplicitGC': None,
'-XX:+ParallelRefProcEnabled': None,
'-XX:+PerfDisableSharedMem': None,
'-XX:+UnlockExperimentalVMOptions': None,
'-XX:G1HeapRegionSize': '16M',
'-XX:G1HeapWastePercent': 5,
'-XX:G1MaxNewSizePercent': 50,
'-XX:G1MixedGCCountTarget': 4,
'-XX:G1MixedGCLiveThresholdPercent': 90,
'-XX:G1NewSizePercent': 40,
'-XX:G1RSetUpdatingPauseTimePercent': 5,
'-XX:G1ReservePercent': 15,
'-XX:InitiatingHeapOccupancyPercent': 20,
'-XX:MaxGCPauseMillis': 200,
'-XX:MaxTenuringThreshold': 1,
'-XX:SurvivorRatio': 32,
'-javaagent:/home/minecraft/jolokia.jar=port=25576,host=localhost': None,
},
},
'telegraf': {
'input_plugins': {
'builtin': {
'jolokia2_agent': [{
'urls': ['http://localhost:25576/jolokia'],
'interval': '10s',
'metric': [
{
'name': 'minecraft_tick',
'mbean': 'net.minecraft.server:type=Server',
'paths': [
'averageTickTime',
],
},
{
'name': 'minecraft_memory',
'mbean': 'java.lang:type=Memory',
'paths': [
'HeapMemoryUsage',
'NonHeapMemoryUsage',
'ObjectPendingFinalizationCount',
],
},
{
'name': 'minecraft_gc',
'mbean': 'java.lang:name=*,type=GarbageCollector',
'paths': [
'CollectionTime',
'CollectionCount',
],
'tag_keys': ['name'],
},
{
'name': 'minecraft_mempool',
'mbean': 'java.lang:name=*,type=MemoryPool',
'paths': [
'CollectionUsage',
'PeakUsage',
'Usage',
],
'tag_keys': ['name'],
},
{
'name': 'minecraft_os',
'mbean': 'java.lang:type=OperatingSystem',
'paths': [
'OpenFileDescriptorCount',
'ProcessCpuLoad',
'ProcessCpuTime',
],
},
],
}],
},
},
},
'users': {
'minecraft': {},
},
'zfs': {
'datasets': {
'tank/minecraft': {},
'tank/minecraft/overworld': {
'mountpoint': '/home/minecraft/world',
'compression': 'on',
'needed_by': {
'directory:/home/minecraft/world',
},
},
'tank/minecraft/nether': {
'mountpoint': '/home/minecraft/world_nether',
'compression': 'on',
'needed_by': {
'directory:/home/minecraft/world_nether',
},
},
'tank/minecraft/end': {
'mountpoint': '/home/minecraft/world_the_end',
'compression': 'on',
'needed_by': {
'directory:/home/minecraft/world_the_end',
},
},
},
},
}
@metadata_reactor.provides(
'minecraft/java_opts',
)
def heap_to_java_opts(metadata):
heap_mb = metadata.get('minecraft/heap_mb')
return {
'minecraft': {
'java_opts': {
f'-Xms{heap_mb}M': None,
f'-Xmx{heap_mb}M': None,
},
},
}
@metadata_reactor.provides(
'firewall/port_rules',
)
def firewall(metadata):
return {
'firewall': {
'port_rules': {
'25565/tcp': atomic(metadata.get('minecraft/restrict-to', set())),
},
},
}