31 #include <drizzled/statistics_variables.h>
32 #include "cumulative_stats.h"
37 CumulativeStats::CumulativeStats(uint32_t in_cumulative_stats_by_user_max)
39 cumulative_stats_by_user_max(in_cumulative_stats_by_user_max)
41 cumulative_stats_by_user_vector=
new vector<ScoreboardSlot *>(cumulative_stats_by_user_max);
43 vector<ScoreboardSlot *>::iterator it= cumulative_stats_by_user_vector->begin();
44 for (int32_t j=0; j < cumulative_stats_by_user_max; ++j)
47 it= cumulative_stats_by_user_vector->insert(it, scoreboard_slot);
49 cumulative_stats_by_user_vector->resize(cumulative_stats_by_user_max);
51 last_valid_index= INVALID_INDEX;
52 isOpenUserSlots=
true;
58 size_t userCommandsSize=
sizeof(
UserCommands) +
sizeof(uint64_t) * SQLCOM_END;
60 cumulative_size_bytes= (statusVarsSize + userCommandsSize) * cumulative_stats_by_user_max;
63 CumulativeStats::~CumulativeStats()
65 vector<ScoreboardSlot *>::iterator it= cumulative_stats_by_user_vector->begin();
66 for (; it < cumulative_stats_by_user_vector->end(); ++it)
70 cumulative_stats_by_user_vector->clear();
71 delete cumulative_stats_by_user_vector;
73 delete global_status_vars;
76 void CumulativeStats::logUserStats(
ScoreboardSlot *scoreboard_slot,
bool reserveSlot)
78 vector<ScoreboardSlot *>::iterator cumulative_it= cumulative_stats_by_user_vector->begin();
82 int32_t current_index= last_valid_index;
84 if (cumulative_stats_by_user_max <= current_index)
86 current_index= cumulative_stats_by_user_max;
89 for (int32_t j=0; j <= current_index; ++j)
92 string user= cumulative_scoreboard_slot->getUser();
93 if (user.compare(scoreboard_slot->getUser()) == 0)
96 cumulative_scoreboard_slot->merge(scoreboard_slot);
109 if (hasOpenUserSlots())
111 int32_t our_index= last_valid_index.add_and_fetch(1);
112 if (our_index < cumulative_stats_by_user_max)
115 cumulative_stats_by_user_vector->at(our_index);
116 cumulative_scoreboard_slot->setUser(scoreboard_slot->getUser());
117 cumulative_scoreboard_slot->merge(scoreboard_slot);
118 cumulative_scoreboard_slot->setInUse(
true);
122 last_valid_index= cumulative_stats_by_user_max - 1;
123 isOpenUserSlots=
false;
129 void CumulativeStats::logGlobalStats(
ScoreboardSlot* scoreboard_slot)
131 global_stats->updateUserCommands(scoreboard_slot);
134 void CumulativeStats::logGlobalStatusVars(
ScoreboardSlot* scoreboard_slot)
136 global_status_vars->merge(scoreboard_slot->getStatusVars());
139 int32_t CumulativeStats::getCumulativeStatsLastValidIndex()
const
141 return last_valid_index < cumulative_stats_by_user_max ? last_valid_index : cumulative_stats_by_user_max;
147 vector<vector<ScoreboardSlot* >* > *vector_of_scoreboard_vectors= scoreboard->getVectorOfScoreboardVectors();
151 vector<vector<ScoreboardSlot* >* >::iterator v_of_scoreboard_v_begin_it= vector_of_scoreboard_vectors->begin();
152 vector<vector<ScoreboardSlot* >* >::iterator v_of_scoreboard_v_end_it= vector_of_scoreboard_vectors->end();
154 for (; v_of_scoreboard_v_begin_it != v_of_scoreboard_v_end_it; ++v_of_scoreboard_v_begin_it)
156 vector<ScoreboardSlot* > *scoreboard_vector= *v_of_scoreboard_v_begin_it;
158 vector<ScoreboardSlot* >::iterator scoreboard_vector_it= scoreboard_vector->begin();
159 vector<ScoreboardSlot* >::iterator scoreboard_vector_end= scoreboard_vector->end();
160 for (; scoreboard_vector_it != scoreboard_vector_end; ++scoreboard_vector_it)
163 if (scoreboard_slot->isInUse())
165 if (current_status_vars)
167 current_status_vars->merge(scoreboard_slot->getStatusVars());
170 if (current_user_commands)
172 current_user_commands->merge(scoreboard_slot->getUserCommands());
TODO: Rename this file - func.h is stupid.