mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Config: Support overwrote by environment variables. (#3197)
* Support overwrite by environment virable. * modify duplicated code * Config: Add stat for envrionment config. * Config: Fix utest fail. Co-authored-by: pengfei.ma <pengfei.ma@ctechm.com> Co-authored-by: winlin <winlin@vip.126.com>
This commit is contained in:
parent
dc20d5ddbc
commit
eb04f92176
8 changed files with 474 additions and 84 deletions
File diff suppressed because it is too large
Load diff
|
@ -27,6 +27,9 @@ using namespace std;
|
|||
// Whether we are in docker, defined in main module.
|
||||
extern bool _srs_in_docker;
|
||||
|
||||
// Whether setup config by environment variables.
|
||||
extern bool _srs_config_by_env;
|
||||
|
||||
// Check the feature by cond
|
||||
#define SRS_CHECK_FEATURE(cond, ss) if (cond) ss << "&" << #cond << "=1"
|
||||
#define SRS_CHECK_FEATURE2(cond, key, ss) if (cond) ss << "&" << key << "=1"
|
||||
|
@ -159,6 +162,7 @@ void srs_build_features(stringstream& ss)
|
|||
SRS_CHECK_FEATURE(exec, ss);
|
||||
SRS_CHECK_FEATURE(transcode, ss);
|
||||
SRS_CHECK_FEATURE(security, ss);
|
||||
SRS_CHECK_FEATURE2(_srs_config_by_env, "env", ss);
|
||||
|
||||
SRS_CHECK_FEATURE2(_srs_cls->enabled(), "cls", ss);
|
||||
SRS_CHECK_FEATURE3(_srs_cls->nn_logs(), "logs", _srs_cls->nn_logs(), ss);
|
||||
|
|
|
@ -1421,7 +1421,7 @@ string srs_string_dumps_hex(const char* str, int length, int limit, char seperat
|
|||
return string(buf, len);
|
||||
}
|
||||
|
||||
string srs_getenv(string key)
|
||||
string srs_getenv(const string& key)
|
||||
{
|
||||
string ekey = key;
|
||||
if (srs_string_starts_with(key, "$")) {
|
||||
|
@ -1432,6 +1432,15 @@ string srs_getenv(string key)
|
|||
return "";
|
||||
}
|
||||
|
||||
std::string::iterator it;
|
||||
for (it = ekey.begin(); it != ekey.end(); ++it) {
|
||||
if (*it >= 'a' && *it <= 'z') {
|
||||
*it += ('A' - 'a');
|
||||
} else if (*it == '.') {
|
||||
*it = '_';
|
||||
}
|
||||
}
|
||||
|
||||
char* value = ::getenv(ekey.c_str());
|
||||
if (value) {
|
||||
return value;
|
||||
|
|
|
@ -685,7 +685,7 @@ extern std::string srs_string_dumps_hex(const char* str, int length, int limit,
|
|||
|
||||
// Get ENV variable, which may starts with $.
|
||||
// srs_getenv("EIP") === srs_getenv("$EIP")
|
||||
extern std::string srs_getenv(std::string key);
|
||||
extern std::string srs_getenv(const std::string& key);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -68,10 +68,13 @@ extern const char* _srs_version;
|
|||
// @global main SRS server, for debugging
|
||||
SrsServer* _srs_server = NULL;
|
||||
|
||||
// Whether setup config by environment variables, see https://github.com/ossrs/srs/issues/2277
|
||||
bool _srs_config_by_env = false;
|
||||
|
||||
/**
|
||||
* main entrance.
|
||||
*/
|
||||
srs_error_t do_main(int argc, char** argv)
|
||||
srs_error_t do_main(int argc, char** argv, char** envp)
|
||||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
|
@ -129,13 +132,22 @@ srs_error_t do_main(int argc, char** argv)
|
|||
if ((err = _srs_log->initialize()) != srs_success) {
|
||||
return srs_error_wrap(err, "log initialize");
|
||||
}
|
||||
|
||||
// Detect whether set SRS config by envrionment variables.
|
||||
for (char** pp = envp; *pp; pp++) {
|
||||
char* p = *pp;
|
||||
if (p[0] == 'S' && p[1] == 'R' && p[2] == 'S' && p[3] == '_') {
|
||||
_srs_config_by_env = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// config already applied to log.
|
||||
srs_trace2(TAG_MAIN, "%s, %s", RTMP_SIG_SRS_SERVER, RTMP_SIG_SRS_LICENSE);
|
||||
srs_trace("%s, %s", RTMP_SIG_SRS_SERVER, RTMP_SIG_SRS_LICENSE);
|
||||
srs_trace("authors: %sand %s", RTMP_SIG_SRS_AUTHORS, SRS_CONSTRIBUTORS);
|
||||
srs_trace("cwd=%s, work_dir=%s, build: %s, configure: %s, uname: %s, osx: %d, pkg: %s, region: %s, source: %s",
|
||||
_srs_config->cwd().c_str(), cwd.c_str(), SRS_BUILD_DATE, SRS_USER_CONFIGURE, SRS_UNAME, SRS_OSX_BOOL, SRS_PACKAGER,
|
||||
srs_getenv("SRS_REGION").c_str(), srs_getenv("SRS_SOURCE").c_str());
|
||||
srs_trace("cwd=%s, work_dir=%s, build: %s, configure: %s, uname: %s, osx: %d, env: %d, pkg: %s",
|
||||
_srs_config->cwd().c_str(), cwd.c_str(), SRS_BUILD_DATE, SRS_USER_CONFIGURE, SRS_UNAME, SRS_OSX_BOOL,
|
||||
_srs_config_by_env, SRS_PACKAGER);
|
||||
srs_trace("configure detail: " SRS_CONFIGURE);
|
||||
#ifdef SRS_EMBEDED_TOOL_CHAIN
|
||||
srs_trace("crossbuild tool chain: " SRS_EMBEDED_TOOL_CHAIN);
|
||||
|
@ -208,9 +220,9 @@ srs_error_t do_main(int argc, char** argv)
|
|||
return err;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
int main(int argc, char** argv, char** envp)
|
||||
{
|
||||
srs_error_t err = do_main(argc, argv);
|
||||
srs_error_t err = do_main(argc, argv, envp);
|
||||
|
||||
if (err != srs_success) {
|
||||
srs_error("Failed, %s", srs_error_desc(err).c_str());
|
||||
|
|
|
@ -35,6 +35,7 @@ ISrsContext* _srs_context = NULL;
|
|||
SrsConfig* _srs_config = NULL;
|
||||
SrsServer* _srs_server = NULL;
|
||||
bool _srs_in_docker = false;
|
||||
bool _srs_config_by_env = false;
|
||||
|
||||
#include <srs_app_st.hpp>
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue