mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-23 23:23:04 +01:00
Implement improvement CORE-2767 : Add ability to the trace plugin to configure traced services events on per-service name basis
This commit is contained in:
parent
76fc6fbdd0
commit
950bcd8809
@ -411,7 +411,7 @@ void TracePluginImpl::logRecordStmt(const char* action, TraceConnection* connect
|
|||||||
|
|
||||||
void TracePluginImpl::logRecordServ(const char* action, TraceService* service)
|
void TracePluginImpl::logRecordServ(const char* action, TraceService* service)
|
||||||
{
|
{
|
||||||
//const ntrace_service_t svc_id = service->getServiceID(); // Unused
|
const ntrace_service_t svc_id = service->getServiceID();
|
||||||
bool reg = false;
|
bool reg = false;
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
@ -421,7 +421,7 @@ void TracePluginImpl::logRecordServ(const char* action, TraceService* service)
|
|||||||
ReadLockGuard lock(servicesLock);
|
ReadLockGuard lock(servicesLock);
|
||||||
|
|
||||||
ServicesTree::Accessor accessor(&services);
|
ServicesTree::Accessor accessor(&services);
|
||||||
if (accessor.locate(service->getServiceID()))
|
if (accessor.locate(svc_id))
|
||||||
{
|
{
|
||||||
record.insert(0, *accessor.current().description);
|
record.insert(0, *accessor.current().description);
|
||||||
break;
|
break;
|
||||||
@ -431,7 +431,7 @@ void TracePluginImpl::logRecordServ(const char* action, TraceService* service)
|
|||||||
if (reg)
|
if (reg)
|
||||||
{
|
{
|
||||||
string temp;
|
string temp;
|
||||||
temp.printf("\tService %p, <unknown, bug?>" NEWLINE, service->getServiceID());
|
temp.printf("\tService %p, <unknown, bug?>" NEWLINE, svc_id);
|
||||||
record.insert(0, temp);
|
record.insert(0, temp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1622,6 +1622,7 @@ void TracePluginImpl::register_service(TraceService* service)
|
|||||||
serv_data.description->printf("\t%s, (Service %p, %s, %s%s)" NEWLINE,
|
serv_data.description->printf("\t%s, (Service %p, %s, %s%s)" NEWLINE,
|
||||||
service->getServiceMgr(), serv_data.id,
|
service->getServiceMgr(), serv_data.id,
|
||||||
username.c_str(), remote_address.c_str(), remote_process.c_str());
|
username.c_str(), remote_address.c_str(), remote_process.c_str());
|
||||||
|
serv_data.enabled = true;
|
||||||
|
|
||||||
// Adjust the list of services
|
// Adjust the list of services
|
||||||
{
|
{
|
||||||
@ -1630,6 +1631,45 @@ void TracePluginImpl::register_service(TraceService* service)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool TracePluginImpl::checkServiceFilter(TraceService* service, bool started)
|
||||||
|
{
|
||||||
|
ReadLockGuard lock(servicesLock);
|
||||||
|
|
||||||
|
ServiceData *data = NULL;
|
||||||
|
ServicesTree::Accessor accessor(&services);
|
||||||
|
if (accessor.locate(service->getServiceID()))
|
||||||
|
data = &accessor.current();
|
||||||
|
|
||||||
|
if (data && !started)
|
||||||
|
return data->enabled;
|
||||||
|
|
||||||
|
const char* svcName = service->getServiceName();
|
||||||
|
const int svcNameLen = strlen(svcName);
|
||||||
|
bool enabled = true;
|
||||||
|
|
||||||
|
if (config.include_filter.hasData())
|
||||||
|
{
|
||||||
|
include_matcher->reset();
|
||||||
|
include_matcher->process((const UCHAR*) svcName, svcNameLen);
|
||||||
|
enabled = include_matcher->result();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enabled && config.exclude_filter.hasData())
|
||||||
|
{
|
||||||
|
exclude_matcher->reset();
|
||||||
|
exclude_matcher->process((const UCHAR*) svcName, svcNameLen);
|
||||||
|
enabled = !exclude_matcher->result();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data) {
|
||||||
|
data->enabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TracePluginImpl::log_event_service_attach(TraceService* service,
|
void TracePluginImpl::log_event_service_attach(TraceService* service,
|
||||||
ntrace_result_t att_result)
|
ntrace_result_t att_result)
|
||||||
{
|
{
|
||||||
@ -1661,6 +1701,9 @@ void TracePluginImpl::log_event_service_start(TraceService* service,
|
|||||||
{
|
{
|
||||||
if (config.log_services)
|
if (config.log_services)
|
||||||
{
|
{
|
||||||
|
if (!checkServiceFilter(service, true))
|
||||||
|
return;
|
||||||
|
|
||||||
const char* event_type;
|
const char* event_type;
|
||||||
switch (start_result)
|
switch (start_result)
|
||||||
{
|
{
|
||||||
@ -1712,6 +1755,9 @@ void TracePluginImpl::log_event_service_query(TraceService* service,
|
|||||||
{
|
{
|
||||||
if (config.log_services && config.log_service_query)
|
if (config.log_services && config.log_service_query)
|
||||||
{
|
{
|
||||||
|
if (!checkServiceFilter(service, false))
|
||||||
|
return;
|
||||||
|
|
||||||
const char* tmp = service->getServiceName();
|
const char* tmp = service->getServiceName();
|
||||||
if (tmp && *tmp) {
|
if (tmp && *tmp) {
|
||||||
record.printf("\t\"%s\"" NEWLINE, tmp);
|
record.printf("\t\"%s\"" NEWLINE, tmp);
|
||||||
|
@ -118,6 +118,7 @@ public:
|
|||||||
{
|
{
|
||||||
ntrace_service_t id;
|
ntrace_service_t id;
|
||||||
Firebird::string* description;
|
Firebird::string* description;
|
||||||
|
bool enabled;
|
||||||
|
|
||||||
// Deallocate memory used by objects hanging off this structure
|
// Deallocate memory used by objects hanging off this structure
|
||||||
void deallocate_references()
|
void deallocate_references()
|
||||||
@ -185,6 +186,8 @@ private:
|
|||||||
void register_sql_statement(TraceSQLStatement* statement);
|
void register_sql_statement(TraceSQLStatement* statement);
|
||||||
void register_blr_statement(TraceBLRStatement* statement);
|
void register_blr_statement(TraceBLRStatement* statement);
|
||||||
void register_service(TraceService* service);
|
void register_service(TraceService* service);
|
||||||
|
|
||||||
|
bool checkServiceFilter(TraceService* service, bool started);
|
||||||
|
|
||||||
// Write message to text log file
|
// Write message to text log file
|
||||||
void logRecord(const char* action);
|
void logRecord(const char* action);
|
||||||
|
@ -32,10 +32,12 @@
|
|||||||
|
|
||||||
# SQL query filters.
|
# SQL query filters.
|
||||||
#
|
#
|
||||||
# Only SQL statements falling under given regular expression are reported in the log.
|
# Only SQL statements falling under given regular expression are reported
|
||||||
|
# in the log.
|
||||||
#include_filter
|
#include_filter
|
||||||
|
|
||||||
# SQL statements falling under given regular expression are NOT reported in the log.
|
# SQL statements falling under given regular expression are NOT reported
|
||||||
|
# in the log.
|
||||||
#exclude_filter
|
#exclude_filter
|
||||||
|
|
||||||
|
|
||||||
@ -122,6 +124,28 @@
|
|||||||
|
|
||||||
# default services section
|
# default services section
|
||||||
#
|
#
|
||||||
|
# List of names of currently existing Firebirds services (to use with service
|
||||||
|
# filters below) :
|
||||||
|
# Backup Database
|
||||||
|
# Restore Database
|
||||||
|
# Repair Database
|
||||||
|
# Add User
|
||||||
|
# Delete User
|
||||||
|
# Modify User
|
||||||
|
# Display User
|
||||||
|
# Database Properties
|
||||||
|
# Database Stats
|
||||||
|
# Get Log File
|
||||||
|
# Incremental Backup Database
|
||||||
|
# Incremental Restore Database
|
||||||
|
# Start Trace Session
|
||||||
|
# Stop Trace Session
|
||||||
|
# Suspend Trace Session
|
||||||
|
# Resume Trace Session
|
||||||
|
# List Trace Sessions
|
||||||
|
# Set Domain Admins Mapping to RDB$ADMIN
|
||||||
|
# Drop Domain Admins Mapping to RDB$ADMIN
|
||||||
|
#
|
||||||
<services>
|
<services>
|
||||||
# Do we trace services events or not
|
# Do we trace services events or not
|
||||||
enabled false
|
enabled false
|
||||||
@ -133,6 +157,16 @@
|
|||||||
# log's rotation
|
# log's rotation
|
||||||
max_log_size 0
|
max_log_size 0
|
||||||
|
|
||||||
|
# Services filters.
|
||||||
|
#
|
||||||
|
# Only services which names falling under given regular expression are
|
||||||
|
# reported in the log.
|
||||||
|
#include_filter
|
||||||
|
|
||||||
|
# Services which names falling under given regular expression are NOT
|
||||||
|
# reported in the log.
|
||||||
|
#exclude_filter
|
||||||
|
|
||||||
# Put service attach, detach and start records
|
# Put service attach, detach and start records
|
||||||
log_services false
|
log_services false
|
||||||
|
|
||||||
|
@ -32,13 +32,13 @@
|
|||||||
// DATABASE_PARAMS, SERVICE_PARAMS
|
// DATABASE_PARAMS, SERVICE_PARAMS
|
||||||
|
|
||||||
|
|
||||||
|
STR_PARAMETER(include_filter, "")
|
||||||
|
STR_PARAMETER(exclude_filter, "")
|
||||||
PATH_PARAMETER(log_filename, "")
|
PATH_PARAMETER(log_filename, "")
|
||||||
BOOL_PARAMETER(enabled, false)
|
BOOL_PARAMETER(enabled, false)
|
||||||
UINT_PARAMETER(max_log_size, 0)
|
UINT_PARAMETER(max_log_size, 0)
|
||||||
|
|
||||||
#ifdef DATABASE_PARAMS
|
#ifdef DATABASE_PARAMS
|
||||||
STR_PARAMETER(include_filter, "")
|
|
||||||
STR_PARAMETER(exclude_filter, "")
|
|
||||||
BOOL_PARAMETER(log_connections, false)
|
BOOL_PARAMETER(log_connections, false)
|
||||||
UINT_PARAMETER(connection_id, 0)
|
UINT_PARAMETER(connection_id, 0)
|
||||||
BOOL_PARAMETER(log_transactions, false)
|
BOOL_PARAMETER(log_transactions, false)
|
||||||
|
Loading…
Reference in New Issue
Block a user