29 #include <string_view>
30 #include <unordered_map>
32 namespace query_state {
38 , started(
Clock::now().time_since_epoch())
39 , stopped(
Clock::duration::zero()) {}
42 CHECK(
stopped.exchange(Clock::now().time_since_epoch()) == Clock::duration::zero())
43 <<
"stop() called more than once.";
47 std::shared_ptr<Catalog_Namespace::SessionInfo const>
const& session_info)
48 : session_info(session_info)
49 , db_name(session_info->getCatalog().getCurrentDB().dbName)
50 , user_name(session_info->get_currentUser().userLoggable())
51 , public_session_id(session_info->get_public_session_id()) {}
56 std::shared_ptr<Catalog_Namespace::SessionInfo const>
const& session_info,
57 std::string query_str)
59 , session_data_(session_info ? boost::make_optional<
SessionData>(session_info)
61 , query_str_(std::move(query_str))
80 throw std::runtime_error(
"session_info_ was not set for this QueryState.");
86 throw std::runtime_error(
"session_info requested but has expired.");
93 Events::iterator parent) {
94 auto it = parent ==
events_.end() ?
events_.begin() : std::next(parent);
95 for (; it !=
events_.end(); ++it) {
96 if (it->parent == parent) {
97 auto duration = it->duration();
99 << std::setw(depth << 1) <<
' ' << it->name <<
' ' << it->thread_id
100 <<
" - total time " << (duration ? *duration : -1) <<
" ms";
117 Timer::Timer(std::shared_ptr<QueryState>&& query_state, Events::iterator event)
118 : query_state_(std::move(query_state)), event_(event) {}
144 if (quote_formatter.
str.find_first_of(
" \"") == std::string::npos) {
145 return os << quote_formatter.
str;
147 return os << std::quoted(quote_formatter.
str,
'"',
'"');
172 static std::unordered_map<std::string_view, logger::Severity>
const map{
191 auto const itr = map.find(func);
192 return itr == map.cend() ? defaultSeverity : itr->second;
197 std::stringstream ss;
199 << func_ << ' ' << match_ << ' ' << duration<std::chrono::milliseconds>() <<
' ';
212 std::stringstream values;
213 unsigned nvalues = 0;
215 ss << (nvalues ?
',' :
'{') << std::quoted(
"query_str",
'"',
'"');
216 values << (nvalues++ ?
',' :
'{')
221 for (
auto itr = nv.cbegin(); itr != nv.cend(); ++itr) {
222 ss << (nvalues ?
',' :
'{') << std::quoted(*itr,
'"',
'"');
223 values << (nvalues++ ?
',' :
'{') << std::quoted(*++itr,
'"',
'"');
225 ss <<
"} " << values.rdbuf() <<
'}';
227 BOOST_LOG_SEV(logger::gSeverityLogger::get(), severity) << ss.rdbuf();
233 std::stringstream ss;
235 <<
" total time " << duration<std::chrono::milliseconds>() <<
" ms";
237 BOOST_LOG_SEV(logger::gSeverityLogger::get(), severity) << ss.rdbuf();
257 std::shared_ptr<Catalog_Namespace::SessionInfo> session_info) {
boost::optional< SessionData > session_data_
std::shared_ptr< QueryState > query_state_
void logCallStack(std::stringstream &, unsigned const depth, Events::iterator parent)
QueryStateProxy createQueryStateProxy()
std::string const & get_public_session_id() const
Events::iterator const parent_
void setSessionInfo(std::shared_ptr< Catalog_Namespace::SessionInfo >)
Timer createTimer(char const *event_name)
std::ostream & operator<<(std::ostream &os, QuoteFormatter const "e_formatter)
QueryState(std::shared_ptr< Catalog_Namespace::SessionInfo const > const &, std::string query_str)
This file contains the class specification and related data structures for Catalog.
std::atomic< Clock::duration > stopped
std::list< std::string > name_value_pairs_
bool fast_logging_check(Channel)
const DBMetadata & getCurrentDB() const
static logger::Severity stdlogBeginSeverity(char const *func)
void setQueryState(std::shared_ptr< QueryState >)
void logCallStack(logger::Severity, char const *label)
std::shared_ptr< Catalog_Namespace::SessionInfo > getSessionInfo() const
Timer(std::shared_ptr< QueryState > &&, Events::iterator event)
QueryStateProxy createQueryStateProxy()
std::shared_ptr< Catalog_Namespace::SessionInfo > session_info_
Event(char const *const name, Events::iterator parent)
static std::atomic< int64_t > s_match
Catalog & getCatalog() const
QueryState & query_state_
std::shared_ptr< QueryState > query_state_
bool g_enable_watchdog false
std::string public_session_id
void log(logger::Severity, char const *label)
std::shared_ptr< Catalog_Namespace::SessionInfo const > getConstSessionInfo() const
std::shared_ptr< Catalog_Namespace::SessionInfo const > getConstSessionInfo() const
Timer createTimer(char const *event_name, Events::iterator parent)
const UserMetadata & get_currentUser() const
std::chrono::steady_clock Clock
static std::atomic< Id > s_next_id