How to set up the Automated Performance Testing to send and view results in Horde Performance Trends dashboard, and not having to look through it via the SummaryTable.html locally?

I have been trying to set this up for the past 3 days, the automated testing framework results generate ok locally into a SummaryTable.html, but I cannot send them reliably to Horde. It seems like it was made with P4 in mind, and I am not using that.

My goal: I just want to run the RunLocalTests and see the results in the Horde Performance Trends dashboard, and not look through it via the SummaryTable.html.

I am using the RunLocalTest and then sending it to horde with:

dotnet “C:\Unreal5.8\Engine\Binaries\DotNET\CsvTools/PerfReportTool.dll” -csvdir “C:\Unreal5.8\GameName\Saved\Performance\SequenceTest\Perf\Win64\CSV” -reportType ClientPerf -reportxmlbasedir “C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport” -summaryTable KeyStats -noDetailedReports -csvTable -summaryTableDataToTelemetry -telemetryTestIdentity “GameName”

The horde receives it fine (seemingly), but the resulting performance trends dashboard only shows one datapoint.

root@horde:~# docker logs -f horde-server | grep “Created table”
[10:23:54 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[10:23:54 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[10:23:54 inf] Created table horde.state_performance_key_stats from schema with 49 columns

Below are me server.json and globals.json (using placeholder db names and pws, this is running in local isolated proxmox LXC debian instance anyway).

The PerfReportTool does not fill the stream value, so the dashboard was not viewable, the data was wrong, and I wrote a simple “data backfill” for the missing db values. But still, the values are wrong… overall, settings this up was a complete headache. Matt Oztalay hyped me with his enthusiasm, because it seemed like it is working right now with his local tests scripts and it gets sent to Horde automatically! IT DOES NOT.

Please, could you write a more comprehensive guide or give me a tip how to put this together. I just want to run the RunLocalTests and see the results in the Horde Performance Trends dashboard, and not look through it via the SummaryTable.html.

//server.json
{
“Horde”: {
“AuthMethod”: “Anonymous”,
“ConfigPath”: “globals.json”,
“Perforce”: [
],
“Telemetry”: [
{
“Type”: “Mongo”,
“RetainDays”: 1
}
],
“UseLocalPerforceEnv”: false,
“Plugins”: {
“Analytics”: {
“Enabled”: true,
“Sinks”: {
“Mongo”: { “Enabled”: true, “RetainDays”: 1 }
}
},
“StructuredAnalytics”: {
“Enabled”: true,
“BackendName”: “ClickHouse”,
“DisableStreamBasedAuth”: true
},
“PerformanceTrends”: {
“Enabled”: true,
“DisableStreamBasedAuth”: true
},
“ClickHouseTelemetry”: {
“Enabled”: true,
“ConnectionString”: “Host=horde-clickhouse;Port=8123;Database=my_database;Username=username;Password=password”,
“AutoCreateTables”: true
}
}
}
}

and globals.json

root@horde:~# cat globals.json
{
“version”: 2,
“include”: [
{ “path”: “$(HordeDir)/Defaults/default.global.json” }
],
“plugins”: {
“clickhousetelemetry”: {
“ConnectionString”: “Host=horde-clickhouse;Port=8123;Database=my_database;Username=username;Password=password”,
“AutoCreateTables”: true
},
“structuredanalytics”: {
“BackendName”: “ClickHouse”,
“DisableStreamBasedAuth”: true
},
“performancetrends”: {
“BackendName”: “ClickHouse”,
“DisableStreamBasedAuth”: true
},
“analytics”: {
“stores”: [
{
“id”: “engine”,
“include”: [
{ “path”: “$(HordeDir)/Defaults/default-metrics.telemetry.json” },
{ “path”: “$(HordeDir)/Defaults/default-views.telemetry.json” }
]
}
]
}
}
}

I created the required db manually in clickhouse:

docker exec -it horde-clickhouse clickhouse-client --user username --password password --query "
356 CREATE TABLE ingest.horde_state_performance_key_stats
357 (
358 _telemetry_store_id String,
359 _app_id Nullable(String),
360 _app_version Nullable(String),
361 _app_environment Nullable(String),
362 _session_id Nullable(String),
363 dynamic_resolution_percentage_max Int64,
364 csvid Nullable(String),
365 gp_utime_avg Float64,
366 physical_used_mb_max Float64,

Hey there,

Appreciate the details of the original post - and certainly appreciate the effort in the feature being adopted. We care a lot about people being able to use this in a low friction way - but sometimes we get used to the rough edges of a feature where new adopters may not be. Feedback like this is essential..

After a PRT emission, do you have any details on what’s actually ending up in your ClickHouse DB? If you could paste any of the rows there, I can try and diagnose whether this is a server issue or dashboard.

I am trying to track down where the failure is occurring.

Also, there are some nuances around how local testing will differ from data emitted from a Horde context. What’s most notable here is the stream context - the PRT report may only have BRANCH context. The server will coalesce this for the dashboard, but this may be a point of frustration.

Kind regards,

Julian