mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-22 07:42:16 +00:00
Prepare API in audit for auditing Alternator. The API provides an externally-callable functions `inspect()`, for both CQL and Alternator. Both variants of the function would unpack parameters and merge into calling a common `maybe_log()`, which can then call `log()` when conditions are met. Also, while I was at it, (const) references were favoured over raw pointers. The Alternator audit_info subclass (audit_info_alternator) carries an optional consistency level — only data read/write operations have a meaningful CL, while DDL and metadata queries store an empty string in the audit table and syslog (matching the existing write_login behavior). The storage helpers are updated accordingly. Add a will_log(category, keyspace, table) method that checks whether an operation should be audited (category check AND keyspace/table filtering) without requiring a constructed audit_info object. should_log() delegates to will_log().
69 lines
2.2 KiB
C++
69 lines
2.2 KiB
C++
/*
|
|
* Copyright (C) 2025 ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.1
|
|
*/
|
|
|
|
#include <seastar/core/loop.hh>
|
|
#include <seastar/core/future-util.hh>
|
|
|
|
#include "audit/audit_composite_storage_helper.hh"
|
|
|
|
#include "utils/class_registrator.hh"
|
|
|
|
namespace audit {
|
|
|
|
audit_composite_storage_helper::audit_composite_storage_helper(std::vector<std::unique_ptr<storage_helper>>&& storage_helpers)
|
|
: _storage_helpers(std::move(storage_helpers))
|
|
{}
|
|
|
|
future<> audit_composite_storage_helper::start(const db::config& cfg) {
|
|
auto res = seastar::parallel_for_each(
|
|
_storage_helpers,
|
|
[&cfg] (std::unique_ptr<storage_helper>& h) {
|
|
return h->start(cfg);
|
|
}
|
|
);
|
|
return res;
|
|
}
|
|
|
|
future<> audit_composite_storage_helper::stop() {
|
|
auto res = seastar::parallel_for_each(
|
|
_storage_helpers,
|
|
[] (std::unique_ptr<storage_helper>& h) {
|
|
return h->stop();
|
|
}
|
|
);
|
|
return res;
|
|
}
|
|
|
|
future<> audit_composite_storage_helper::write(const audit_info* audit_info,
|
|
socket_address node_ip,
|
|
socket_address client_ip,
|
|
std::optional<db::consistency_level> cl,
|
|
const sstring& username,
|
|
bool error) {
|
|
return seastar::parallel_for_each(
|
|
_storage_helpers,
|
|
[audit_info, node_ip, client_ip, cl, &username, error](std::unique_ptr<storage_helper>& h) {
|
|
return h->write(audit_info, node_ip, client_ip, cl, username, error);
|
|
}
|
|
);
|
|
}
|
|
|
|
future<> audit_composite_storage_helper::write_login(const sstring& username,
|
|
socket_address node_ip,
|
|
socket_address client_ip,
|
|
bool error) {
|
|
return seastar::parallel_for_each(
|
|
_storage_helpers,
|
|
[&username, node_ip, client_ip, error](std::unique_ptr<storage_helper>& h) {
|
|
return h->write_login(username, node_ip, client_ip, error);
|
|
}
|
|
);
|
|
}
|
|
|
|
} // namespace audit
|