aboutsummaryrefslogtreecommitdiff
path: root/settings.lua
blob: f877572d99a4fb61ba69778c06ae39871003aa26 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
mesecons_debug.settings = {
    -- in seconds
    hud_refresh_interval = tonumber(minetest.settings:get("mesecons_debug.hud_refresh_interval")) or 1,

    -- max penalty in seconds
    max_penalty = tonumber(minetest.settings:get("mesecons_debug.max_penalty")) or 120,

    -- everything above this threshold will disable the mesecons in that mapblock entirely
    penalty_mapblock_disabled = tonumber(minetest.settings:get("mesecons_debug.penalty_mapblock_disabled")) or 110,

    -- time between /mesecons_clear_penalty commands, in seconds
    penalty_clear_cooldown = tonumber(minetest.settings:get("mesecons_debug.penalty_clear_cooldown")) or 120,

    -- remove unmodified penalty data for a mapblock from memory after this many seconds
    gc_interval = tonumber(minetest.settings:get("mesecons_debug.gc_interval")) or 61,

    -- steps between updating penalties
    penalty_check_steps = tonumber(minetest.settings:get("mesecons_debug.penalty_check_steps")) or 50,

    -- ratio of actual to expected duration of server steps
    moderate_lag_ratio = tonumber(minetest.settings:get("mesecons_debug.moderate_lag_ratio")) or 3,

    -- ratio of actual to expected duration of server steps
    high_lag_ratio = tonumber(minetest.settings:get("mesecons_debug.high_lag_ratio")) or 10,

    -- percentage of total server load due to mesecons
    high_load_threshold = tonumber(minetest.settings:get("mesecons_debug.high_load_threshold")) or 0.33,

    -- scale of penalty during high load
    high_penalty_scale = tonumber(minetest.settings:get("mesecons_debug.high_penalty_scale")) or 0.05,

    -- offset of penalty during high load
    high_penalty_offset = tonumber(minetest.settings:get("mesecons_debug.high_penalty_offset")) or -0.05,

    -- scale of penalty during medium load
    medium_penalty_scale = tonumber(minetest.settings:get("mesecons_debug.medium_penalty_scale")) or 0.05,

    -- offset of penalty during medium load
    medium_penalty_offset = tonumber(minetest.settings:get("mesecons_debug.medium_penalty_offset")) or -0.1,

    -- scale of penalty during low load
    low_penalty_scale = tonumber(minetest.settings:get("mesecons_debug.low_penalty_scale")) or 0.05,

    -- offset of penalty during low load
    low_penalty_offset = tonumber(minetest.settings:get("mesecons_debug.low_penalty_offset")) or -0.5,

    -- forces (1 / clamp) <= relative load <= clamp
    relative_load_clamp = tonumber(minetest.settings:get("mesecons_debug.relative_load_clamp")) or 10,

    -- coefficient used in calculating an exponential moving average of values across penalty checks
    averaging_coefficient = tonumber(minetest.settings:get("mesecons_debug.averaging_coefficient")) or 0.2,

    _listeners = {},
    _subscribe_for_modification = function(name, func)
        local listeners = mesecons_debug.settings._listeners[name] or {}
        table.insert(listeners, func)
        mesecons_debug.settings._listeners[name] = listeners
    end,

    modify_setting = function(name, value)
        value = tonumber(value)
        mesecons_debug.settings[name] = value
        for _, func in ipairs(mesecons_debug.settings._listeners[name] or {}) do
            func(value)
        end
    end,
}