Stats: lazy initialization

Ask the DatabasePlugin for stats when the first client requests them,
not at startup.
This commit is contained in:
Max Kellermann 2014-01-10 23:40:05 +01:00
parent e9ba5fcaf3
commit 348d0c944e
4 changed files with 37 additions and 11 deletions

View File

@ -137,8 +137,6 @@ DatabaseGlobalOpen(Error &error)
db_is_open = true; db_is_open = true;
stats_update();
return true; return true;
} }

View File

@ -39,6 +39,12 @@ static unsigned start_time;
static DatabaseStats stats; static DatabaseStats stats;
enum class StatsValidity : uint8_t {
INVALID, VALID, FAILED,
};
static StatsValidity stats_validity = StatsValidity::INVALID;
void stats_global_init(void) void stats_global_init(void)
{ {
#ifndef WIN32 #ifndef WIN32
@ -46,21 +52,39 @@ void stats_global_init(void)
#endif #endif
} }
void stats_update(void) void
stats_invalidate()
{ {
assert(GetDatabase() != nullptr); assert(GetDatabase() != nullptr);
stats_validity = StatsValidity::INVALID;
}
static bool
stats_update()
{
switch (stats_validity) {
case StatsValidity::INVALID:
break;
case StatsValidity::VALID:
return true;
case StatsValidity::FAILED:
return false;
}
Error error; Error error;
DatabaseStats stats2;
const DatabaseSelection selection("", true); const DatabaseSelection selection("", true);
if (GetDatabase()->GetStats(selection, stats2, error)) { if (GetDatabase()->GetStats(selection, stats, error)) {
stats = stats2; stats_validity = StatsValidity::VALID;
return true;
} else { } else {
LogError(error); LogError(error);
stats.Clear(); stats_validity = StatsValidity::FAILED;
return true;
} }
} }
@ -74,7 +98,10 @@ db_stats_print(Client &client)
database plugin */ database plugin */
/* TODO: move this into the "proxy" database plugin as /* TODO: move this into the "proxy" database plugin as
an "idle" handler */ an "idle" handler */
stats_update(); stats_invalidate();
if (!stats_update())
return;
client_printf(client, client_printf(client,
"artists: %u\n" "artists: %u\n"

View File

@ -24,7 +24,8 @@ class Client;
void stats_global_init(void); void stats_global_init(void);
void stats_update(void); void
stats_invalidate();
void void
stats_print(Client &client); stats_print(Client &client);

View File

@ -163,7 +163,7 @@ static void update_finished_event(void)
} else { } else {
progress = UPDATE_PROGRESS_IDLE; progress = UPDATE_PROGRESS_IDLE;
stats_update(); stats_invalidate();
} }
} }