add more usefull metrics

This commit is contained in:
alexcrea 2024-02-12 19:23:44 +01:00
parent b36c1827a4
commit 944e4b025c
3 changed files with 143 additions and 18 deletions

View file

@ -8,7 +8,7 @@ import xyz.alexcrea.command.ReloadExecutor
import xyz.alexcrea.group.EnchantConflictManager import xyz.alexcrea.group.EnchantConflictManager
import xyz.alexcrea.group.ItemGroupManager import xyz.alexcrea.group.ItemGroupManager
import xyz.alexcrea.util.Metrics import xyz.alexcrea.util.Metrics
import xyz.alexcrea.util.Metrics.SimplePie import xyz.alexcrea.util.MetricsUtil
import java.io.File import java.io.File
import java.io.FileReader import java.io.FileReader
@ -64,11 +64,11 @@ class UnsafeEnchants : JavaPlugin() {
*/ */
override fun onEnable() { override fun onEnable() {
instance = this instance = this
// Load bstats
val metric = Metrics(this, bstatsPluginId)
reloadAllConfigs() reloadAllConfigs()
addCustomMetric(metric) // Load metrics
val metric = Metrics(this, bstatsPluginId)
MetricsUtil.addCustomMetric(metric)
// Add command to reload the plugin // Add command to reload the plugin
val command = getCommand(commandReloadName) val command = getCommand(commandReloadName)
@ -102,19 +102,9 @@ class UnsafeEnchants : JavaPlugin() {
// Set the global variable // Set the global variable
UnsafeEnchants.conflictManager = conflictManager UnsafeEnchants.conflictManager = conflictManager
UnsafeEnchants.unitRepairConfig = unitRepairConfig UnsafeEnchants.unitRepairConfig = unitRepairConfig
}
private fun addCustomMetric(metric: Metrics) {
metric.addCustomChart(SimplePie("item_rename_cost") {
ConfigOptions.itemRenameCost.toString()
})
metric.addCustomChart(SimplePie("item_repair_cost") {
ConfigOptions.itemRepairCost.toString()
})
metric.addCustomChart(SimplePie("sacrifice_illegal_enchant_cost") {
ConfigOptions.sacrificeIllegalCost.toString()
})
// Test if default config
MetricsUtil.testIfConfigIsDefault(config, itemGroupConfig, conflictConfig, unitRepairConfig)
} }
private fun reloadResource(resourceName: String, private fun reloadResource(resourceName: String,

View file

@ -26,9 +26,9 @@ object ConfigOptions {
// Path for removing repair cost limits // Path for removing repair cost limits
private const val REMOVE_REPAIR_LIMIT = "remove_repair_limit" private const val REMOVE_REPAIR_LIMIT = "remove_repair_limit"
// Root path for enchantment limits // Root path for enchantment limits
private const val ENCHANT_LIMIT_ROOT = "enchant_limits" const val ENCHANT_LIMIT_ROOT = "enchant_limits"
// Root path for enchantment values // Root path for enchantment values
private const val ENCHANT_VALUES_ROOT = "enchant_values" const val ENCHANT_VALUES_ROOT = "enchant_values"
// Keys for specific enchantment values // Keys for specific enchantment values
private const val KEY_BOOK = "book" private const val KEY_BOOK = "book"
private const val KEY_ITEM = "item" private const val KEY_ITEM = "item"
@ -194,4 +194,20 @@ object ConfigOptions {
?: DEFAULT_ENCHANT_VALUE ?: DEFAULT_ENCHANT_VALUE
} }
/**
* Get an array of key of basic config options
*/
fun getBasicConfigKeys(): Array<String>{
return arrayOf(DEFAULT_LIMIT_PATH,
LIMIT_REPAIR_COST,
LIMIT_REPAIR_VALUE,
ITEM_REPAIR_COST,
UNIT_REPAIR_COST,
ITEM_RENAME_COST,
SACRIFICE_ILLEGAL_COST,
REMOVE_REPAIR_LIMIT
)
}
} }

View file

@ -0,0 +1,119 @@
package xyz.alexcrea.util
import io.delilaheve.UnsafeEnchants
import io.delilaheve.util.ConfigOptions
import org.bukkit.configuration.ConfigurationSection
object MetricsUtil {
private const val baseConfigHash = -1527723485
private const val enchantLimitsConfigHash = 781312397
private const val enchantValuesConfigHash = 1072574774
private const val enchantConflictConfigHash = 1406650190
private const val itemGroupsConfigHash = -1014133828
private const val unitRepairItemConfigHash = 536871958
private const val baseConfigPieName = "isDefaultBaseConfig"
private const val enchantLimitsConfigPieName = "isDefaultEnchantLimitsConfig"
private const val enchantValuesConfigPieName = "isDefaultEnchantValuesConfig"
private const val enchantConflictConfigPieName = "isDefaultEnchantConflictConfig"
private const val itemGroupsConfigPieName = "isDefaultItemGroupsConfig"
private const val unitRepairItemConfigPieName = "isDefaultUnitRepairItemConfig"
private var isDefaultBaseConfig = true
private var isDefaultEnchantLimitsConfig = true
private var isDefaultEnchantValuesConfig = true
private var isDefaultEnchantConflictConfig = true
private var isDefaultItemGroupsConfig = true
private var isDefaultUnitRepairItemConfig = true
/**
* Get hash of a key, value a pair of a configuration section
*/
private fun getHashFromKey(section: ConfigurationSection, key: String): Int {
// Key is assumend to exist
val resultHash: Int
if(section.isConfigurationSection(key)){
val sectionResult = getConfigurationHash(section.getConfigurationSection(key)!!)
resultHash = key.hashCode() xor sectionResult
}else{
resultHash = key.hashCode() xor section.getString(key).hashCode()
}
return resultHash.hashCode()
}
/**
* Get hash of a configuration section
*/
private fun getConfigurationHash(section: ConfigurationSection): Int {
var resultHash = 0
for (key in section.getKeys(false)) {
resultHash = resultHash xor getHashFromKey(section,key)
}
return resultHash
}
/**
* Get hash value of the default config
*/
private fun testBaseConfig(defaultConfig: ConfigurationSection): Int{
var result = 0
for (key in ConfigOptions.getBasicConfigKeys()) {
result = result xor getHashFromKey(defaultConfig,key)
}
return result
}
/**
* Test if the used configuration is the default config
*/
fun testIfConfigIsDefault(defaultConfig: ConfigurationSection,
enchantConflictConfig: ConfigurationSection,
itemGroupsConfig: ConfigurationSection,
unitRepairItemConfig: ConfigurationSection){
// Calculate hash of config
val baseConfig = testBaseConfig(defaultConfig)
val limitEnchantConfig = getHashFromKey(defaultConfig, ConfigOptions.ENCHANT_LIMIT_ROOT)
val enchantValueConfig =getHashFromKey(defaultConfig, ConfigOptions.ENCHANT_VALUES_ROOT)
val enchantConflictConfig2 = getConfigurationHash(enchantConflictConfig)
val itemGroupConfig = getConfigurationHash(itemGroupsConfig)
val unitRepairConfig = getConfigurationHash(unitRepairItemConfig)
// Test if default
isDefaultBaseConfig = baseConfigHash == baseConfig
isDefaultEnchantLimitsConfig = enchantLimitsConfigHash == limitEnchantConfig
isDefaultEnchantValuesConfig = enchantValuesConfigHash == enchantValueConfig
isDefaultEnchantConflictConfig = enchantConflictConfigHash == enchantConflictConfig2
isDefaultItemGroupsConfig = itemGroupsConfigHash == itemGroupConfig
isDefaultUnitRepairItemConfig = unitRepairItemConfigHash == unitRepairConfig
// If not default and debug flag active, print the hash.
if(ConfigOptions.debugLog){
if(!isDefaultBaseConfig){UnsafeEnchants.log("baseConfig: $baseConfig")}
if(!isDefaultEnchantLimitsConfig){UnsafeEnchants.log("limitEnchantConfig: $limitEnchantConfig")}
if(!isDefaultEnchantValuesConfig){UnsafeEnchants.log("enchantValueConfig: $enchantValueConfig")}
if(!isDefaultEnchantConflictConfig){UnsafeEnchants.log("enchantConflictConfig: $enchantConflictConfig")}
if(!isDefaultItemGroupsConfig){UnsafeEnchants.log("itemGroupConfig: $itemGroupConfig")}
if(!isDefaultUnitRepairItemConfig){UnsafeEnchants.log("unitRepairConfig: $unitRepairConfig")}
}
}
fun addCustomMetric(metric: Metrics) {
metric.addCustomChart(Metrics.SimplePie(baseConfigPieName) {
isDefaultBaseConfig.toString()
})
metric.addCustomChart(Metrics.SimplePie(enchantLimitsConfigPieName) {
isDefaultEnchantLimitsConfig.toString()
})
metric.addCustomChart(Metrics.SimplePie(enchantValuesConfigPieName) {
isDefaultEnchantValuesConfig.toString()
})
metric.addCustomChart(Metrics.SimplePie(enchantConflictConfigPieName) {
isDefaultEnchantConflictConfig.toString()
})
metric.addCustomChart(Metrics.SimplePie(itemGroupsConfigPieName) {
isDefaultItemGroupsConfig.toString()
})
metric.addCustomChart(Metrics.SimplePie(unitRepairItemConfigPieName) {
isDefaultUnitRepairItemConfig.toString()
})
}
}