MaxScale/server/core/session_stats.cc
Niclas Antti 5175d2b2d7 MXS-2078 Add support for holding router specific server data.
New class to hold the statistics, part of which is currently in
RWSplitSession. Simple API in Backend to create session
specific data.
2018-11-08 10:44:32 +02:00

56 lines
1.6 KiB
C++

/*
* Copyright (c) 2016 MariaDB Corporation Ab
*
* Use of this software is governed by the Business Source License included
* in the LICENSE.TXT file and at www.mariadb.com/bsl11.
*
* Change Date: 2022-01-01
*
* On the date above, in accordance with the Business Source License, use
* of this software will be governed by version 2 or later of the General
* Public License.
*/
#include <maxscale/session_stats.hh>
#include <iostream>
void maxscale::ServerStats::start_session()
{
// nop for now
}
void maxscale::ServerStats::end_session(maxbase::Duration sess_duration,
maxbase::Duration active_duration,
int64_t num_selects)
{
m_ave_session_dur.add(sess_duration.secs());
m_ave_active_dur.add(active_duration.secs());
m_num_ave_session_selects.add(num_selects);
}
maxscale::ServerStats& maxscale::ServerStats::operator+=(const maxscale::ServerStats& rhs)
{
total += rhs.total;
read += rhs.read;
write += rhs.write;
m_ave_session_dur += rhs.m_ave_session_dur;
m_ave_active_dur += rhs.m_ave_active_dur;
m_num_ave_session_selects += rhs.m_num_ave_session_selects;
return *this;
}
maxscale::ServerStats::CurrentStats maxscale::ServerStats::current_stats() const
{
double sess_secs = m_ave_session_dur.average();
double active_secs = m_ave_active_dur.average();
double active = 100 * active_secs / sess_secs;
return {maxbase::Duration(sess_secs),
active,
static_cast<int64_t>(m_num_ave_session_selects.average()),
total,
read,
write};
}