mirror of https://github.com/nextcloud/server
Merge pull request #44884 from nextcloud/query-req-id
feat: add request id as comment to all queries
This commit is contained in:
commit
deac58ab7e
|
@ -159,6 +159,13 @@ $CONFIG = [
|
|||
['user' => 'nextcloud', 'password' => 'password2', 'host' => 'replica2', 'dbname' => ''],
|
||||
],
|
||||
|
||||
/**
|
||||
* Add request id to the database query in a comment.
|
||||
*
|
||||
* This can be enabled to assist in mapping database logs to Nextcloud logs.
|
||||
*/
|
||||
'db.log_request_id' => false,
|
||||
|
||||
/**
|
||||
* Indicates whether the Nextcloud instance was installed successfully; ``true``
|
||||
* indicates a successful installation, and ``false`` indicates an unsuccessful
|
||||
|
@ -1965,7 +1972,7 @@ $CONFIG = [
|
|||
/**
|
||||
* Blacklist characters from being used in filenames. This is useful if you
|
||||
* have a filesystem or OS which does not support certain characters like windows.
|
||||
*
|
||||
*
|
||||
* The '/' and '\' characters are always forbidden.
|
||||
*
|
||||
* Example for windows systems: ``array('?', '<', '>', ':', '*', '|', '"', chr(0), "\n", "\r")``
|
||||
|
@ -2311,7 +2318,7 @@ $CONFIG = [
|
|||
/**
|
||||
* Timeout for the login form, after this time the login form is reset.
|
||||
* This prevents password leaks on public devices if the user forgots to clear the form.
|
||||
*
|
||||
*
|
||||
* Default is 5 minutes (300 seconds), a value of 0 means no timeout.
|
||||
*/
|
||||
'login_form_timeout' => 300,
|
||||
|
|
|
@ -91,6 +91,9 @@ class Connection extends PrimaryReadReplicaConnection {
|
|||
/** @var array<string, int> */
|
||||
protected $tableDirtyWrites = [];
|
||||
|
||||
protected bool $logRequestId;
|
||||
protected string $requestId;
|
||||
|
||||
/**
|
||||
* Initializes a new instance of the Connection class.
|
||||
*
|
||||
|
@ -119,6 +122,9 @@ class Connection extends PrimaryReadReplicaConnection {
|
|||
$this->clock = Server::get(ClockInterface::class);
|
||||
$this->logger = Server::get(LoggerInterface::class);
|
||||
|
||||
$this->logRequestId = $this->systemConfig->getValue('db.log_request_id', false);
|
||||
$this->requestId = Server::get(IRequestId::class)->getId();
|
||||
|
||||
/** @var \OCP\Profiler\IProfiler */
|
||||
$profiler = Server::get(IProfiler::class);
|
||||
if ($profiler->isEnabled()) {
|
||||
|
@ -249,8 +255,7 @@ class Connection extends PrimaryReadReplicaConnection {
|
|||
$platform = $this->getDatabasePlatform();
|
||||
$sql = $platform->modifyLimitQuery($sql, $limit, $offset);
|
||||
}
|
||||
$statement = $this->replaceTablePrefix($sql);
|
||||
$statement = $this->adapter->fixupStatement($statement);
|
||||
$statement = $this->finishQuery($sql);
|
||||
|
||||
return parent::prepare($statement);
|
||||
}
|
||||
|
@ -307,8 +312,7 @@ class Connection extends PrimaryReadReplicaConnection {
|
|||
$this->ensureConnectedToPrimary();
|
||||
}
|
||||
|
||||
$sql = $this->replaceTablePrefix($sql);
|
||||
$sql = $this->adapter->fixupStatement($sql);
|
||||
$sql = $this->finishQuery($sql);
|
||||
$this->queriesExecuted++;
|
||||
$this->logQueryToFile($sql);
|
||||
return parent::executeQuery($sql, $params, $types, $qcp);
|
||||
|
@ -328,8 +332,7 @@ class Connection extends PrimaryReadReplicaConnection {
|
|||
* @throws Exception
|
||||
*/
|
||||
public function executeUpdate(string $sql, array $params = [], array $types = []): int {
|
||||
$sql = $this->replaceTablePrefix($sql);
|
||||
$sql = $this->adapter->fixupStatement($sql);
|
||||
$sql = $this->finishQuery($sql);
|
||||
$this->queriesExecuted++;
|
||||
$this->logQueryToFile($sql);
|
||||
return parent::executeUpdate($sql, $params, $types);
|
||||
|
@ -354,8 +357,7 @@ class Connection extends PrimaryReadReplicaConnection {
|
|||
foreach ($tables as $table) {
|
||||
$this->tableDirtyWrites[$table] = $this->clock->now()->getTimestamp();
|
||||
}
|
||||
$sql = $this->replaceTablePrefix($sql);
|
||||
$sql = $this->adapter->fixupStatement($sql);
|
||||
$sql = $this->finishQuery($sql);
|
||||
$this->queriesExecuted++;
|
||||
$this->logQueryToFile($sql);
|
||||
return (int)parent::executeStatement($sql, $params, $types);
|
||||
|
@ -587,6 +589,16 @@ class Connection extends PrimaryReadReplicaConnection {
|
|||
return $schema->tablesExist([$table]);
|
||||
}
|
||||
|
||||
protected function finishQuery(string $statement): string {
|
||||
$statement = $this->replaceTablePrefix($statement);
|
||||
$statement = $this->adapter->fixupStatement($statement);
|
||||
if ($this->logRequestId) {
|
||||
return $statement . " /* reqid: " . $this->requestId . " */";
|
||||
} else {
|
||||
return $statement;
|
||||
}
|
||||
}
|
||||
|
||||
// internal use
|
||||
/**
|
||||
* @param string $statement
|
||||
|
|
Loading…
Reference in New Issue