mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-25 14:46:24 +00:00
* Core/Config: Implement config override with env vars Implement overriding of configuration from the .conf file with environment variables. Environment variables keys are autogenerated based on the keys defined in .conf file. Usage example: $ export TC_DATA_DIR=/usr $ AC_WORLD_SERVER_PORT=8080 ./worldserver * Add tests for env vars config
98 lines
3.2 KiB
C++
98 lines
3.2 KiB
C++
/*
|
|
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU Affero General Public License as published by the
|
|
* Free Software Foundation; either version 3 of the License, or (at your
|
|
* option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef CONFIG_H
|
|
#define CONFIG_H
|
|
|
|
#include "Define.h"
|
|
#include <stdexcept>
|
|
#include <string_view>
|
|
#include <vector>
|
|
|
|
class ConfigMgr
|
|
{
|
|
ConfigMgr() = default;
|
|
ConfigMgr(ConfigMgr const&) = delete;
|
|
ConfigMgr& operator=(ConfigMgr const&) = delete;
|
|
~ConfigMgr() = default;
|
|
|
|
public:
|
|
bool LoadAppConfigs(bool isReload = false);
|
|
bool LoadModulesConfigs(bool isReload = false, bool isNeedPrintInfo = true);
|
|
void Configure(std::string const& initFileName, std::vector<std::string> args, std::string_view modulesConfigList = {});
|
|
|
|
static ConfigMgr* instance();
|
|
|
|
bool Reload();
|
|
|
|
/// Overrides configuration with environment variables and returns overridden keys
|
|
std::vector<std::string> OverrideWithEnvVariablesIfAny();
|
|
|
|
std::string const GetFilename();
|
|
std::string const GetConfigPath();
|
|
[[nodiscard]] std::vector<std::string> const& GetArguments() const;
|
|
std::vector<std::string> GetKeysByString(std::string const& name);
|
|
|
|
template<class T>
|
|
T GetOption(std::string const& name, T const& def, bool showLogs = true) const;
|
|
|
|
/*
|
|
* Deprecated geters. This geters will be deleted
|
|
*/
|
|
|
|
[[deprecated("Use GetOption<std::string> instead")]]
|
|
std::string GetStringDefault(std::string const& name, const std::string& def, bool showLogs = true);
|
|
|
|
[[deprecated("Use GetOption<bool> instead")]]
|
|
bool GetBoolDefault(std::string const& name, bool def, bool showLogs = true);
|
|
|
|
[[deprecated("Use GetOption<int32> instead")]]
|
|
int GetIntDefault(std::string const& name, int def, bool showLogs = true);
|
|
|
|
[[deprecated("Use GetOption<float> instead")]]
|
|
float GetFloatDefault(std::string const& name, float def, bool showLogs = true);
|
|
|
|
/*
|
|
* End deprecated geters
|
|
*/
|
|
|
|
bool isDryRun() { return dryRun; }
|
|
void setDryRun(bool mode) { dryRun = mode; }
|
|
|
|
private:
|
|
/// Method used only for loading main configuration files (authserver.conf and worldserver.conf)
|
|
bool LoadInitial(std::string const& file, bool isReload = false);
|
|
bool LoadAdditionalFile(std::string file, bool isOptional = false, bool isReload = false);
|
|
|
|
template<class T>
|
|
T GetValueDefault(std::string const& name, T const& def, bool showLogs = true) const;
|
|
|
|
bool dryRun = false;
|
|
|
|
std::vector<std::string /*config variant*/> _moduleConfigFiles;
|
|
};
|
|
|
|
class ConfigException : public std::length_error
|
|
{
|
|
public:
|
|
explicit ConfigException(std::string const& message) : std::length_error(message) { }
|
|
};
|
|
|
|
#define sConfigMgr ConfigMgr::instance()
|
|
|
|
#endif
|