Skip to content

Commit 8e9a6d3

Browse files
committed
fix: telemetry
1 parent bc371a7 commit 8e9a6d3

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

src/query_farm_telemetry.cpp

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,36 @@
66
#include "duckdb/main/extension_helper.hpp"
77
#include "duckdb/main/config.hpp"
88
#include <cstdlib>
9+
#include <future>
910
using namespace duckdb_yyjson; // NOLINT
1011

1112
namespace duckdb {
1213

13-
static constexpr const char *TARGET_URL = "https://duckdb-in.query-farm.services/";
14+
namespace {
1415

1516
// Function to send the actual HTTP request
16-
static void sendHTTPRequest(shared_ptr<DatabaseInstance> db, std::string json_body) {
17+
void sendHTTPRequest(shared_ptr<DatabaseInstance> db, char *json_body, size_t json_body_size) {
18+
const string TARGET_URL("https://duckdb-in.query-farm.services/");
19+
1720
HTTPHeaders headers;
1821
headers.Insert("Content-Type", "application/json");
1922

2023
auto &http_util = HTTPUtil::Get(*db);
21-
unique_ptr<HTTPParams> params;
22-
auto target_url = string(TARGET_URL);
23-
params = http_util.InitializeParameters(*db, target_url);
24+
unique_ptr<HTTPParams> params = http_util.InitializeParameters(*db, TARGET_URL);
2425

25-
PostRequestInfo post_request(target_url, headers, *params, reinterpret_cast<const_data_ptr_t>(json_body.data()),
26-
json_body.size());
26+
PostRequestInfo post_request(TARGET_URL, headers, *params, reinterpret_cast<const_data_ptr_t>(json_body),
27+
json_body_size);
2728
try {
2829
auto response = http_util.Request(post_request);
2930
} catch (const std::exception &e) {
3031
// ignore all errors.
3132
}
3233

34+
free(json_body);
3335
return;
3436
}
3537

36-
// Public function to start the request thread
37-
static void sendRequestAsync(shared_ptr<DatabaseInstance> db, std::string &json_body) {
38-
std::thread request_thread(sendHTTPRequest, db, std::move(json_body));
39-
request_thread.detach(); // Let the thread run independently
40-
}
38+
} // namespace
4139

4240
INTERNAL_FUNC void QueryFarmSendTelemetry(ExtensionLoader &loader, const string &extension_name,
4341
const string &extension_version) {
@@ -67,10 +65,12 @@ INTERNAL_FUNC void QueryFarmSendTelemetry(ExtensionLoader &loader, const string
6765
auto result_obj = yyjson_mut_obj(doc);
6866
yyjson_mut_doc_set_root(doc, result_obj);
6967

68+
auto platform = DuckDB::Platform();
69+
7070
yyjson_mut_obj_add_str(doc, result_obj, "extension_name", extension_name.c_str());
7171
yyjson_mut_obj_add_str(doc, result_obj, "extension_version", extension_version.c_str());
72-
yyjson_mut_obj_add_str(doc, result_obj, "user_agent", "query-farm/20250926");
73-
yyjson_mut_obj_add_str(doc, result_obj, "duckdb_platform", DuckDB::Platform().c_str());
72+
yyjson_mut_obj_add_str(doc, result_obj, "user_agent", "query-farm/20251011");
73+
yyjson_mut_obj_add_str(doc, result_obj, "duckdb_platform", platform.c_str());
7474
yyjson_mut_obj_add_str(doc, result_obj, "duckdb_library_version", DuckDB::LibraryVersion());
7575
yyjson_mut_obj_add_str(doc, result_obj, "duckdb_release_codename", DuckDB::ReleaseCodename());
7676
yyjson_mut_obj_add_str(doc, result_obj, "duckdb_source_id", DuckDB::SourceID());
@@ -83,13 +83,11 @@ INTERNAL_FUNC void QueryFarmSendTelemetry(ExtensionLoader &loader, const string
8383
throw SerializationException("Failed to serialize telemetry data.");
8484
}
8585

86-
auto telemetry_string = string(telemetry_data, (size_t)telemetry_len);
87-
8886
yyjson_mut_doc_free(doc);
89-
free(telemetry_data);
9087

91-
// Send request asynchronously
92-
sendRequestAsync(loader.GetDatabaseInstance().shared_from_this(), telemetry_string);
88+
[[maybe_unused]] auto _ = std::async(
89+
std::launch::async, [db_ptr = loader.GetDatabaseInstance().shared_from_this(), json = telemetry_data,
90+
len = telemetry_len]() mutable { sendHTTPRequest(std::move(db_ptr), json, len); });
9391
}
9492

9593
} // namespace duckdb

0 commit comments

Comments
 (0)