Stats: lazy initialization
Ask the DatabasePlugin for stats when the first client requests them, not at startup.
This commit is contained in:
parent
e9ba5fcaf3
commit
348d0c944e
@ -137,8 +137,6 @@ DatabaseGlobalOpen(Error &error)
|
||||
|
||||
db_is_open = true;
|
||||
|
||||
stats_update();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -39,6 +39,12 @@ static unsigned start_time;
|
||||
|
||||
static DatabaseStats stats;
|
||||
|
||||
enum class StatsValidity : uint8_t {
|
||||
INVALID, VALID, FAILED,
|
||||
};
|
||||
|
||||
static StatsValidity stats_validity = StatsValidity::INVALID;
|
||||
|
||||
void stats_global_init(void)
|
||||
{
|
||||
#ifndef WIN32
|
||||
@ -46,21 +52,39 @@ void stats_global_init(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
void stats_update(void)
|
||||
void
|
||||
stats_invalidate()
|
||||
{
|
||||
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;
|
||||
|
||||
DatabaseStats stats2;
|
||||
|
||||
const DatabaseSelection selection("", true);
|
||||
if (GetDatabase()->GetStats(selection, stats2, error)) {
|
||||
stats = stats2;
|
||||
if (GetDatabase()->GetStats(selection, stats, error)) {
|
||||
stats_validity = StatsValidity::VALID;
|
||||
return true;
|
||||
} else {
|
||||
LogError(error);
|
||||
|
||||
stats.Clear();
|
||||
stats_validity = StatsValidity::FAILED;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -74,7 +98,10 @@ db_stats_print(Client &client)
|
||||
database plugin */
|
||||
/* TODO: move this into the "proxy" database plugin as
|
||||
an "idle" handler */
|
||||
stats_update();
|
||||
stats_invalidate();
|
||||
|
||||
if (!stats_update())
|
||||
return;
|
||||
|
||||
client_printf(client,
|
||||
"artists: %u\n"
|
||||
|
@ -24,7 +24,8 @@ class Client;
|
||||
|
||||
void stats_global_init(void);
|
||||
|
||||
void stats_update(void);
|
||||
void
|
||||
stats_invalidate();
|
||||
|
||||
void
|
||||
stats_print(Client &client);
|
||||
|
@ -163,7 +163,7 @@ static void update_finished_event(void)
|
||||
} else {
|
||||
progress = UPDATE_PROGRESS_IDLE;
|
||||
|
||||
stats_update();
|
||||
stats_invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user