summaryrefslogtreecommitdiff
path: root/src/web_service/telemetry_json.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/web_service/telemetry_json.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/web_service/telemetry_json.cpp b/src/web_service/telemetry_json.cpp
new file mode 100644
index 000000000..a0b7f9c4e
--- /dev/null
+++ b/src/web_service/telemetry_json.cpp
@@ -0,0 +1,94 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <thread>
6#include "common/assert.h"
7#include "common/detached_tasks.h"
8#include "web_service/telemetry_json.h"
9#include "web_service/web_backend.h"
10
11namespace WebService {
12
13template <class T>
14void TelemetryJson::Serialize(Telemetry::FieldType type, const std::string& name, T value) {
15 sections[static_cast<u8>(type)][name] = value;
16}
17
18void TelemetryJson::SerializeSection(Telemetry::FieldType type, const std::string& name) {
19 TopSection()[name] = sections[static_cast<unsigned>(type)];
20}
21
22void TelemetryJson::Visit(const Telemetry::Field<bool>& field) {
23 Serialize(field.GetType(), field.GetName(), field.GetValue());
24}
25
26void TelemetryJson::Visit(const Telemetry::Field<double>& field) {
27 Serialize(field.GetType(), field.GetName(), field.GetValue());
28}
29
30void TelemetryJson::Visit(const Telemetry::Field<float>& field) {
31 Serialize(field.GetType(), field.GetName(), field.GetValue());
32}
33
34void TelemetryJson::Visit(const Telemetry::Field<u8>& field) {
35 Serialize(field.GetType(), field.GetName(), field.GetValue());
36}
37
38void TelemetryJson::Visit(const Telemetry::Field<u16>& field) {
39 Serialize(field.GetType(), field.GetName(), field.GetValue());
40}
41
42void TelemetryJson::Visit(const Telemetry::Field<u32>& field) {
43 Serialize(field.GetType(), field.GetName(), field.GetValue());
44}
45
46void TelemetryJson::Visit(const Telemetry::Field<u64>& field) {
47 Serialize(field.GetType(), field.GetName(), field.GetValue());
48}
49
50void TelemetryJson::Visit(const Telemetry::Field<s8>& field) {
51 Serialize(field.GetType(), field.GetName(), field.GetValue());
52}
53
54void TelemetryJson::Visit(const Telemetry::Field<s16>& field) {
55 Serialize(field.GetType(), field.GetName(), field.GetValue());
56}
57
58void TelemetryJson::Visit(const Telemetry::Field<s32>& field) {
59 Serialize(field.GetType(), field.GetName(), field.GetValue());
60}
61
62void TelemetryJson::Visit(const Telemetry::Field<s64>& field) {
63 Serialize(field.GetType(), field.GetName(), field.GetValue());
64}
65
66void TelemetryJson::Visit(const Telemetry::Field<std::string>& field) {
67 Serialize(field.GetType(), field.GetName(), field.GetValue());
68}
69
70void TelemetryJson::Visit(const Telemetry::Field<const char*>& field) {
71 Serialize(field.GetType(), field.GetName(), std::string(field.GetValue()));
72}
73
74void TelemetryJson::Visit(const Telemetry::Field<std::chrono::microseconds>& field) {
75 Serialize(field.GetType(), field.GetName(), field.GetValue().count());
76}
77
78void TelemetryJson::Complete() {
79 SerializeSection(Telemetry::FieldType::App, "App");
80 SerializeSection(Telemetry::FieldType::Session, "Session");
81 SerializeSection(Telemetry::FieldType::Performance, "Performance");
82 SerializeSection(Telemetry::FieldType::UserFeedback, "UserFeedback");
83 SerializeSection(Telemetry::FieldType::UserConfig, "UserConfig");
84 SerializeSection(Telemetry::FieldType::UserSystem, "UserSystem");
85
86 auto content = TopSection().dump();
87 // Send the telemetry async but don't handle the errors since they were written to the log
88 Common::DetachedTasks::AddTask(
89 [host{this->host}, username{this->username}, token{this->token}, content]() {
90 Client{host, username, token}.PostJson("/telemetry", content, true);
91 });
92}
93
94} // namespace WebService