aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/stats/statsreporter.cpp
blob: a1926eba447460f7c905347da314f6ee9b01de69 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Copyright Epic Games, Inc. All Rights Reserved.

#include "statsreporter.h"

#include <zencore/logging.h>
#include <zencore/trace.h>
#include <zennet/statsdclient.h>

namespace zen {

StatsReporter::StatsReporter()
{
}

StatsReporter::~StatsReporter()
{
}

void
StatsReporter::Initialize(const ZenStatsConfig& Config)
{
	ZEN_TRACE_CPU("StatsReporter::Initialize");
	RwLock::ExclusiveLockScope _(m_Lock);

	if (Config.Enabled)
	{
		ZEN_INFO("initializing stats reporter: {}:{}", Config.StatsdHost, Config.StatsdPort)
		m_Statsd = CreateStatsDaemonClient(Config.StatsdHost, gsl::narrow<uint16_t>(Config.StatsdPort));
		m_Statsd->SetMessageSize(1500, false);
	}
}

void
StatsReporter::Shutdown()
{
	RwLock::ExclusiveLockScope _(m_Lock);
	m_Statsd.reset();
}

void
StatsReporter::AddProvider(StatsProvider* Provider)
{
	RwLock::ExclusiveLockScope _(m_Lock);
	m_Providers.push_back(Provider);
}

void
StatsReporter::ReportStats()
{
	RwLock::ExclusiveLockScope _(m_Lock);
	if (m_Statsd)
	{
		for (StatsProvider* Provider : m_Providers)
		{
			Provider->ReportMetrics(*m_Statsd);
		}

		m_Statsd->Flush();
	}
}

}  // namespace zen