aboutsummaryrefslogtreecommitdiff
path: root/src/database
Commit message (Collapse)AuthorAge
* Deal with compiler warningssfan52022-04-30
|
* Spacing fixesShadowNinja2022-04-08
|
* Fix the documentation of InvRef:get_lists() and clean up code (#12150)DS2022-03-29
|
* Get rid of legacy workaround in SQLite backendsfan52022-01-28
| | | | tested on Android 11, fixes #11937
* Optimize folder handling in 'files' mod storage backendsfan52022-01-17
| | | | This regressed in bf22569019749e421e8ffe0a73cff988a9a9c846.
* Use a database for mod storage (#11763)Jude Melton-Houghton2022-01-07
|
* Make sure relevant std::stringstreams are set to binarysfan52021-09-11
|
* Provide exact error message if postgres connection string missingsfan52021-05-30
|
* PlayerDatabaseFiles: Fix segfault while saving a playerSmallJoker2021-01-29
| | | | Corrects a typo introduced in 5e9dd166
* Settings: Proper priority hierarchySmallJoker2021-01-29
| | | | | | | | | | | Remove old defaults system Introduce priority-based fallback list Use new functions for map_meta special functions Change groups to use end tags Unittest changes: * Adapt unittest to the new code * Compare Settings objects
* RemotePlayer: Remove Settings writer to Files databaseSmallJoker2021-01-29
|
* (se)SerializeString: Include max length in the nameSmallJoker2020-10-01
| | | | | | | This commit clarifies the maximal length of the serialized strings. It will avoid accidental use of serializeString() when a larger string can be expected. Removes unused Wide String serialization functions
* Record player existence in dymmy database.Lars2020-09-20
|
* Fix build due to revert errorrubenwardy2020-07-07
|
* Revert "Verify database connection on interval (#9665)"rubenwardy2020-07-07
| | | | | | Fixes #10113 This reverts commit 5c588f89e79e02cba392abe3d00688772321f88b.
* Add LevelDB player database (#9982)luk3yx2020-06-12
|
* Add PostgreSQL authentication backend (#9756)Loïc Blot2020-04-27
| | | | * Add PostgreSQL authentication backend
* Add LevelDB auth database. (#9476)luk3yx2020-04-23
| | | | * Add leveldb auth database.
* Verify database connection on interval (#9665)Loïc Blot2020-04-15
|
* PostgreSQL: Fix listAllLoadableBlocks returning the same blockSmallJoker2020-04-14
| | | | Suggested change from https://github.com/minetest/minetest/issues/9670#issuecomment-613563738
* Move PlayerSAO to dedicated filesLoic Blot2020-04-11
|
* Consistent HP and damage types (#8167)SmallJoker2019-02-10
| | | | | Remove deprecated HUDs and chat message handling. Remove unused m_damage variable (compat break). HP: s32 for setter/calculations, u16 for getter.
* Fix on_successful_save -> onSuccessfulSaveLoïc Blot2019-01-04
|
* Fix various player save issues (performance penalty on sql backends + bugs)Loïc Blot2019-01-04
| | | | | | | * PostgreSQL & SQLite3 doesn't setModified(false) on RemotePlayer, then player is saved on each server save call. This results in heavy useless writes. * PostgreSQL & SQLite3 ack engine meta write whereas db commit hasn't been performed. If commit failed write has failed. We mustn't notify engine write is done. * serializing player meta must not setModified(false) because it didn't ensure write has been done * add RemotePlayer::on_successfull_save callback to do the flag update on a successful save
* Player file directory must be only created when using file backend.Loïc Blot2019-01-04
| | | | Also ensure on each player save that the directory exists
* Add Lua methods 'set_rotation()' and 'get_rotation()' (#7395)CoderForTheBetter2018-11-28
| | | | * Adds Lua methods 'set_rotation()' and 'get_rotation'. Also changed some method names to be more clear. Instead of an f32 being sent over network for yaw, now a v3f is sent for rotation on xyz axes. Perserved Lua method set_yaw/setyaw so that old mods still work, other wise to set yaw they would need to switch to set_rotation(0, yaw, 0).
* Replace auth.txt with SQLite auth database (#7279)Ben Deutsch2018-08-05
| | | | * Replace auth.txt with SQLite auth database
* Add player:get_meta(), deprecate player attributes (#7202)rubenwardy2018-04-06
| | | | * Add player:get_meta(), deprecate player attributes
* Move files to subdirectories (#6599)Vitaliy2017-11-08
* Move files around
class="hl opt">.out, LINE_DELIM) self.out = {} return text end } local widths = { 55, 9, 9, 9, 5, 5, 5 } local txt_row_format = sprintf(" %%-%ds | %%%ds | %%%ds | %%%ds | %%%ds | %%%ds | %%%ds", unpack(widths)) local HR = {} for i=1, #widths do HR[i]= rep("-", widths[i]) end -- ' | ' should break less with github than '-+-', when people are pasting there HR = sprintf("-%s-", table.concat(HR, " | ")) local TxtFormatter = Formatter:new { format_row = function(self, modname, instrument_name, statistics) local label if instrument_name then label = shorten(instrument_name, widths[1] - 5) label = sprintf(" - %s %s", label, rep(".", widths[1] - 5 - label:len())) else -- Print mod_stats label = shorten(modname, widths[1] - 2) .. ":" end self:print(txt_row_format, label, format_number(statistics.time_min), format_number(statistics.time_max), format_number(statistics:get_time_avg()), format_number(statistics.part_min, "%.1f"), format_number(statistics.part_max, "%.1f"), format_number(statistics:get_part_avg(), "%.1f") ) end, format = function(self, filter) local profile = self.profile self:print("Values below show absolute/relative times spend per server step by the instrumented function.") self:print("A total of %d samples were taken", profile.stats_total.samples) if filter then self:print("The output is limited to '%s'", filter) end self:print() self:print( txt_row_format, "instrumentation", "min Ms", "max Ms", "avg Ms", "min %", "max %", "avg %" ) self:print(HR) for modname,mod_stats in pairs(profile.stats) do if filter_matches(filter, modname) then self:format_row(modname, nil, mod_stats) if mod_stats.instruments ~= nil then for instrument_name, instrument_stats in pairs(mod_stats.instruments) do self:format_row(nil, instrument_name, instrument_stats) end end end end self:print(HR) if not filter then self:format_row("total", nil, profile.stats_total) end end } local CsvFormatter = Formatter:new { format_row = function(self, modname, instrument_name, statistics) self:print( "%q,%q,%d,%d,%d,%d,%d,%f,%f,%f", modname, instrument_name, statistics.samples, statistics.time_min, statistics.time_max, statistics:get_time_avg(), statistics.time_all, statistics.part_min, statistics.part_max, statistics:get_part_avg() ) end, format = function(self, filter) self:print( "%q,%q,%q,%q,%q,%q,%q,%q,%q,%q", "modname", "instrumentation", "samples", "time min µs", "time max µs", "time avg µs", "time all µs", "part min %", "part max %", "part avg %" ) for modname, mod_stats in pairs(self.profile.stats) do if filter_matches(filter, modname) then self:format_row(modname, "*", mod_stats) if mod_stats.instruments ~= nil then for instrument_name, instrument_stats in pairs(mod_stats.instruments) do self:format_row(modname, instrument_name, instrument_stats) end end end end end } local function format_statistics(profile, format, filter) local formatter if format == "csv" then formatter = CsvFormatter:new { profile = profile } else formatter = TxtFormatter:new { profile = profile } end formatter:format(filter) return formatter:flush() end --- -- Format the profile ready for display and -- @return string to be printed to the console -- function reporter.print(profile, filter) if filter == "" then filter = nil end return format_statistics(profile, "txt", filter) end --- -- Serialize the profile data and -- @return serialized data to be saved to a file -- local function serialize_profile(profile, format, filter) if format == "lua" or format == "json" or format == "json_pretty" then local stats = filter and {} or profile.stats if filter then for modname, mod_stats in pairs(profile.stats) do if filter_matches(filter, modname) then stats[modname] = mod_stats end end end if format == "lua" then return core.serialize(stats) elseif format == "json" then return core.write_json(stats) elseif format == "json_pretty" then return core.write_json(stats, true) end end -- Fall back to textual formats. return format_statistics(profile, format, filter) end local worldpath = core.get_worldpath() local function get_save_path(format, filter) local report_path = setting_get("profiler.report_path") or "" if report_path ~= "" then core.mkdir(sprintf("%s%s%s", worldpath, DIR_DELIM, report_path)) end return (sprintf( "%s/%s/profile-%s%s.%s", worldpath, report_path, os.date("%Y%m%dT%H%M%S"), filter and ("-" .. filter) or "", format ):gsub("[/\\]+", DIR_DELIM))-- Clean up delims end --- -- Save the profile to the world path. -- @return success, log message -- function reporter.save(profile, format, filter) if not format or format == "" then format = setting_get("profiler.default_report_format") or "txt" end if filter == "" then filter = nil end local path = get_save_path(format, filter) local output, io_err = io.open(path, "w") if not output then return false, "Saving of profile failed with: " .. io_err end local content, err = serialize_profile(profile, format, filter) if not content then output:close() return false, "Saving of profile failed with: " .. err end output:write(content) output:close() local logmessage = "Profile saved to " .. path core.log("action", logmessage) return true, logmessage end return reporter