MXS-1220: Add logging priorities to logs resoure

The logging priorities can now be queried and altered.
This commit is contained in:
Markus Mäkelä
2017-05-17 09:37:57 +03:00
parent 05cb49d48a
commit f1c790db52
3 changed files with 100 additions and 60 deletions

View File

@ -248,7 +248,11 @@ GET /maxscale/logs
"count": 10, "count": 10,
"suppress_ms": 10000, "suppress_ms": 10000,
"window_ms": 1000 "window_ms": 1000
} },
"log_warning": true,
"log_notice": true,
"log_info": false,
"log_debug": false
} }
}, },
"id": "logs", "id": "logs",

View File

@ -61,7 +61,7 @@ bool runtime_link_server(SERVER *server, const char *target)
else else
{ {
runtime_errmsg << "Service '" << service->name << "' already uses server '" runtime_errmsg << "Service '" << service->name << "' already uses server '"
<< server->unique_name << "'"; << server->unique_name << "'";
} }
} }
else if (monitor) else if (monitor)
@ -194,7 +194,7 @@ bool runtime_destroy_server(SERVER *server)
if (service_server_in_use(server) || monitor_server_in_use(server)) if (service_server_in_use(server) || monitor_server_in_use(server))
{ {
runtime_errmsg << "Cannot destroy server '" << server->unique_name << runtime_errmsg << "Cannot destroy server '" << server->unique_name <<
"' as it is used by at least one service or monitor"; "' as it is used by at least one service or monitor";
MXS_ERROR("Cannot destroy server '%s' as it is used by at least one " MXS_ERROR("Cannot destroy server '%s' as it is used by at least one "
"service or monitor", server->unique_name); "service or monitor", server->unique_name);
} }
@ -1271,98 +1271,130 @@ bool runtime_alter_service_from_json(SERVICE* service, json_t* new_json)
return rval; return rval;
} }
bool runtime_alter_logs_from_json(json_t* json) static inline bool is_null_or_bool(json_t* params, const char* name)
{
bool rval = true;
json_t* value = mxs_json_pointer(params, name);
if (value && !json_is_boolean(value))
{
runtime_errmsg << "Parameter '" << name << "' is not a boolean";
rval = false;
}
return rval;
}
static inline bool is_null_or_count(json_t* params, const char* name)
{
bool rval = true;
json_t* value = mxs_json_pointer(params, name);
if (value)
{
if (!json_is_integer(value))
{
runtime_errmsg << "Parameter '" << name << "' is not an integer";
rval = false;
}
else if (json_integer_value(value) <= 0)
{
runtime_errmsg << "Parameter '" << name << "' is not a positive integer";
rval = false;
}
}
return rval;
}
bool validate_logs_json(json_t* json)
{ {
bool rval = false;
json_t* param = mxs_json_pointer(json, MXS_JSON_PTR_PARAMETERS); json_t* param = mxs_json_pointer(json, MXS_JSON_PTR_PARAMETERS);
bool rval = false;
if (param && json_is_object(param)) if (param && json_is_object(param))
{ {
rval = is_null_or_bool(param, "highprecision") &&
is_null_or_bool(param, "maxlog") &&
is_null_or_bool(param, "syslog") &&
is_null_or_bool(param, "log_info") &&
is_null_or_bool(param, "log_warning") &&
is_null_or_bool(param, "log_notice") &&
is_null_or_bool(param, "log_debug") &&
is_null_or_count(param, "throttling/count") &&
is_null_or_count(param, "throttling/suppress_ms") &&
is_null_or_count(param, "throttling/window_ms");
}
return rval;
}
bool runtime_alter_logs_from_json(json_t* json)
{
bool rval = false;
if (validate_logs_json(json))
{
json_t* param = mxs_json_pointer(json, MXS_JSON_PTR_PARAMETERS);
json_t* value; json_t* value;
rval = true; rval = true;
if ((value = mxs_json_pointer(param, "highprecision")) && json_is_boolean(value)) if ((value = mxs_json_pointer(param, "highprecision")))
{ {
if (json_is_boolean(value)) mxs_log_set_highprecision_enabled(json_boolean_value(value));
{
mxs_log_set_highprecision_enabled(json_boolean_value(value));
}
else
{
rval = false;
}
} }
if ((value = mxs_json_pointer(param, "maxlog")) && json_is_boolean(value)) if ((value = mxs_json_pointer(param, "maxlog")))
{ {
if (json_is_boolean(value)) mxs_log_set_maxlog_enabled(json_boolean_value(value));
{
mxs_log_set_maxlog_enabled(json_boolean_value(value));
}
else
{
rval = false;
}
} }
if ((value = mxs_json_pointer(param, "syslog"))) if ((value = mxs_json_pointer(param, "syslog")))
{ {
if (json_is_boolean(value)) mxs_log_set_syslog_enabled(json_boolean_value(value));
{ }
mxs_log_set_syslog_enabled(json_boolean_value(value));
} if ((value = mxs_json_pointer(param, "log_info")))
else {
{ mxs_log_set_priority_enabled(LOG_INFO, json_boolean_value(value));
rval = false; }
}
if ((value = mxs_json_pointer(param, "log_warning")))
{
mxs_log_set_priority_enabled(LOG_WARNING, json_boolean_value(value));
}
if ((value = mxs_json_pointer(param, "log_notice")))
{
mxs_log_set_priority_enabled(LOG_NOTICE, json_boolean_value(value));
}
if ((value = mxs_json_pointer(param, "log_debug")))
{
mxs_log_set_priority_enabled(LOG_DEBUG, json_boolean_value(value));
} }
if ((param = mxs_json_pointer(param, "throttling")) && json_is_object(param)) if ((param = mxs_json_pointer(param, "throttling")) && json_is_object(param))
{ {
int intval;
MXS_LOG_THROTTLING throttle; MXS_LOG_THROTTLING throttle;
mxs_log_get_throttling(&throttle); mxs_log_get_throttling(&throttle);
if ((value = mxs_json_pointer(param, "count"))) if ((value = mxs_json_pointer(param, "count")))
{ {
if (json_is_integer(value) && (intval = json_integer_value(value)) > 0) throttle.count = json_integer_value(value);
{
throttle.count = intval;
}
else
{
rval = false;
}
} }
if ((value = mxs_json_pointer(param, "suppress_ms"))) if ((value = mxs_json_pointer(param, "suppress_ms")))
{ {
if (json_is_integer(value) && (intval = json_integer_value(value)) > 0) throttle.suppress_ms = json_integer_value(value);
{
throttle.suppress_ms = intval;
}
else
{
rval = false;
}
} }
if ((value = mxs_json_pointer(param, "window_ms"))) if ((value = mxs_json_pointer(param, "window_ms")))
{ {
if (json_is_integer(value) && (intval = json_integer_value(value)) > 0) throttle.window_ms = json_integer_value(value);
{
throttle.window_ms = intval;
}
else
{
rval = false;
}
} }
if (rval) mxs_log_set_throttling(&throttle);
{
mxs_log_set_throttling(&throttle);
}
} }
} }

View File

@ -3029,6 +3029,10 @@ json_t* mxs_logs_to_json(const char* host)
json_object_set_new(throttling, "suppress_ms", json_integer(log_config.throttling.suppress_ms)); json_object_set_new(throttling, "suppress_ms", json_integer(log_config.throttling.suppress_ms));
json_object_set_new(throttling, "window_ms", json_integer(log_config.throttling.window_ms)); json_object_set_new(throttling, "window_ms", json_integer(log_config.throttling.window_ms));
json_object_set_new(param, "throttling", throttling); json_object_set_new(param, "throttling", throttling);
json_object_set_new(param, "log_warning", json_boolean(mxs_log_priority_is_enabled(LOG_WARNING)));
json_object_set_new(param, "log_notice", json_boolean(mxs_log_priority_is_enabled(LOG_NOTICE)));
json_object_set_new(param, "log_info", json_boolean(mxs_log_priority_is_enabled(LOG_INFO)));
json_object_set_new(param, "log_debug", json_boolean(mxs_log_priority_is_enabled(LOG_DEBUG)));
json_t* attr = json_object(); json_t* attr = json_object();
json_object_set_new(attr, CN_PARAMETERS, param); json_object_set_new(attr, CN_PARAMETERS, param);