aboutsummaryrefslogtreecommitdiff
path: root/src/database
ModeNameSize
-rw-r--r--CMakeLists.txt373logplain
-rw-r--r--database-dummy.cpp2115logplain
-rw-r--r--database-dummy.h1491logplain
-rw-r--r--database-files.cpp10017logplain
-rw-r--r--database-files.h2275logplain
-rw-r--r--database-leveldb.cpp7763logplain
-rw-r--r--database-leveldb.h2185logplain
-rw-r--r--database-postgresql.cpp21701logplain
-rw-r--r--database-postgresql.h4841logplain
-rw-r--r--database-redis.cpp6098logplain
-rw-r--r--database-redis.h1351logplain
-rw-r--r--database-sqlite3.cpp25543logplain
-rw-r--r--database-sqlite3.h6690logplain
-rw-r--r--database.cpp1736logplain
-rw-r--r--database.h2369logplain
c">--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. local setmetatable = setmetatable local pairs, format = pairs, string.format local min, max, huge = math.min, math.max, math.huge local core = core local profiler = ... -- Split sampler and profile up, to possibly allow for rotation later. local sampler = {} local profile local stats_total local logged_time, logged_data local _stat_mt = { get_time_avg = function(self) return self.time_all/self.samples end, get_part_avg = function(self) if not self.part_all then return 100 -- Extra handling for "total" end return self.part_all/self.samples end, } _stat_mt.__index = _stat_mt function sampler.reset() -- Accumulated logged time since last sample. -- This helps determining, the relative time a mod used up. logged_time = 0 -- The measurements taken through instrumentation since last sample. logged_data = {} profile = { -- Current mod statistics (max/min over the entire mod lifespan) -- Mod specific instrumentation statistics are nested within. stats = {}, -- Current stats over all mods. stats_total = setmetatable({ samples = 0, time_min = huge, time_max = 0, time_all = 0, part_min = 100, part_max = 100 }, _stat_mt) } stats_total = profile.stats_total -- Provide access to the most recent profile. sampler.profile = profile end --- -- Log a measurement for the sampler to pick up later. -- Keep `log` and its often called functions lean. -- It will directly add to the instrumentation overhead. -- function sampler.log(modname, instrument_name, time_diff) if time_diff <= 0 then if time_diff < 0 then -- This **might** have happened on a semi-regular basis with huge mods, -- resulting in negative statistics (perhaps midnight time jumps or ntp corrections?). core.log("warning", format( "Time travel of %s::%s by %dµs.", modname, instrument_name, time_diff )) end -- Throwing these away is better, than having them mess with the overall result. return end local mod_data = logged_data[modname] if mod_data == nil then mod_data = {} logged_data[modname] = mod_data end mod_data[instrument_name] = (mod_data[instrument_name] or 0) + time_diff -- Update logged time since last sample. logged_time = logged_time + time_diff end --- -- Return a requested statistic. -- Initialize if necessary. -- local function get_statistic(stats_table, name) local statistic = stats_table[name] if statistic == nil then statistic = setmetatable({ samples = 0, time_min = huge, time_max = 0, time_all = 0, part_min = 100, part_max = 0, part_all = 0, }, _stat_mt) stats_table[name] = statistic end return statistic end --- -- Update a statistic table -- local function update_statistic(stats_table, time) stats_table.samples = stats_table.samples + 1 -- Update absolute time (µs) spend by the subject stats_table.time_min = min(stats_table.time_min, time) stats_table.time_max = max(stats_table.time_max, time) stats_table.time_all = stats_table.time_all + time -- Update relative time (%) of this sample spend by the subject local current_part = (time/logged_time) * 100