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

My complete workflow to get this to run, database values after sending the data at #9

Maybe I am sending wrong data at #7? It is the CSV folder like in the tutorial and the data go through. The reports are generated after RunLocalTests.bat

1. Drop the old data to start anew

docker exec -it horde-clickhouse clickhouse-client --user username --password password --query "DROP TABLE IF EXISTS ingest.horde_state_performance_key_stats"

2. Create new horde_state_performance_key_stats table in ClickHouse

docker exec -it horde-clickhouse clickhouse-client --user username --password password --query "
CREATE TABLE ingest.horde_state_performance_key_stats
(
    dynamic_resolution_percentage_max Int64,
    csvid Nullable(String),
    gp_utime_avg Float64,
    physical_used_mb_max Float64,
    dynamic_resolution_vsm_nanite Int64,
    mvp Float64,
    hitches_min Float64,
    hitch_time_percent Float64,
    game_threadtime_avg Float64,
    render_threadtime_avg Float64,
    frametime_avg Float64,
    dynamic_resolution_percentage_avg Float64,
    engineversion Nullable(String),
    enginereleaseversion Nullable(String),
    buildversion Nullable(String),
    platform Nullable(String),
    testid Nullable(String),
    testname Nullable(String),
    testconfigname Nullable(String),
    gauntlettesttype Nullable(String),
    gauntletsubtest Nullable(String),
    collated Bool,
    branch Nullable(String),
    changelist Nullable(Int64),
    starttimestamp Nullable(Int64),
    endtimestamp Nullable(Int64),
    buildsuffix Nullable(String),
    testbuildispreflight Int64,
    cpu Nullable(String),
    gpu Nullable(String),
    verbatimrhiname Nullable(String),
    deviceprofile Nullable(String),
    test_identity Nullable(String),
    summary_name Nullable(String),
    computed_platform Nullable(String),
    computed_stream Nullable(String),
    is_build_machine Bool,
    horde_url_str Nullable(String),
    stream_id Nullable(String),
    template_id Nullable(String),
    job_id Nullable(String),
    step_id Nullable(String),
    commit_id_ordered Nullable(Int64),
    commit_id Nullable(String),
    session_id Nullable(String),
    session_label Nullable(String),
    event_name Nullable(String),
    schema_version Int64,
    telemetry_timestamp Nullable(DateTime)
)
ENGINE = MergeTree()
ORDER BY tuple()
"

3. Remove the old Horde instance

docker rm -f horde-server

4. Recreate it (same configs as in the top post)

docker run -d --name horde-server --network horde-net -p 5000:5000 -p 5002:5002 \
  -e Horde__MongoConnectionString="mongodb://horde-mongo:27017" \
  -e Horde__RedisConnectionConfig="horde-redis:6379" \
  -v $(pwd)/globals.json:/app/Data/globals.json \
  -v $(pwd)/server.json:/app/Data/server.json \
  ghcr.io/epicgames/horde-server:5.8.0

5. Start log view

docker logs -f horde-server

6. Check the DB data

docker exec -it horde-clickhouse clickhouse-client --user username --password password --query "SHOW TABLES FROM ingest"

6a. Check the table to confirm it’s empty

docker exec -it horde-clickhouse clickhouse-client --user username --password password --query "
SELECT * FROM ingest.horde_state_performance_key_stats LIMIT 50
"

7. Send completed tests from PC to server

dotnet "C:\Unreal5.8\Engine\Binaries\DotNET\CsvTools/PerfReportTool.dll" -csvdir "C:\Unreal5.8\QuitStalinUE\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 "test1"


PC LOG:

PerfReportTool v4.274.0
BaseDir:   C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport
ReportXML: C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport\ReportTypes.xml
ReportXML: C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport\ReportTypes.xml
GraphXML:  C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport\ReportGraphs.xml

Batched graph generation enabled.
Kicking off 8 precache threads with lookahead 8
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-012444_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260724-181508_Windows_APT_Sequence_MAP02-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-214605_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260724-175238_Windows_APT_Sequence_MAP02-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260724-130109_Windows_APT_Sequence_MAP02-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-230553_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260725-185100_Windows_APT_Sequence_MAP02-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-012700_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
-------------------------------------------------
CSV 1/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260724-130109_Windows_APT_Sequence_MAP02-Pass0.csv
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-230836_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260727-121159_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260727-124116_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260727-124727_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-234217_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-233912_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-233717_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
-------------------------------------------------
CSV 2/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-214605_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
CSV 3/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260724-181508_Windows_APT_Sequence_MAP02-Pass0.csv
-------------------------------------------------
CSV 4/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-012700_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
CSV 5/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260724-175238_Windows_APT_Sequence_MAP02-Pass0.csv
-------------------------------------------------
CSV 6/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260725-185100_Windows_APT_Sequence_MAP02-Pass0.csv
-------------------------------------------------
CSV 7/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-012444_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
CSV 8/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-230553_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
CSV 9/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-230836_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
CSV 10/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260727-121159_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
CSV 11/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260727-124116_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
CSV 12/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-233912_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
CSV 13/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-234217_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
CSV 14/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260727-124727_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
CSV 15/15
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260726-233717_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
[Telemetry] Flushing 1 telemetry events.
[Telemetry] Telemetry flush complete. Succeeded: 1, Failed: 0
Duplicate CSVs skipped: 0

Docker logs shown, data received:

17:52:49 dbg] Stopping scan for changes with #horde tag.
[17:53:26 dbg] Starting scan for changes with #horde tag
[17:53:26 dbg] Stopping scan for changes with #horde tag.
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns
[17:53:28 inf] Created table horde.state_performance_key_stats from schema with 49 columns

8. Check DB structure just to be sure

root@horde:~# docker exec -it horde-clickhouse clickhouse-client --user username --password password --query "
DESCRIBE TABLE ingest.horde_state_performance_key_stats
"

Column Type
dynamic_resolution_percentage_max Int64
csvid Nullable(String)
gp_utime_avg Float64
physical_used_mb_max Float64
dynamic_resolution_vsm_nanite Int64
mvp Float64
hitches_min Float64
hitch_time_percent Float64
game_threadtime_avg Float64
render_threadtime_avg Float64
frametime_avg Float64
dynamic_resolution_percentage_avg Float64
engineversion Nullable(String)
enginereleaseversion Nullable(String)
buildversion Nullable(String)
platform Nullable(String)
testid Nullable(String)
testname Nullable(String)
testconfigname Nullable(String)
gauntlettesttype Nullable(String)
gauntletsubtest Nullable(String)
collated Bool
branch Nullable(String)
changelist Nullable(Int64)
starttimestamp Nullable(Int64)
endtimestamp Nullable(Int64)
buildsuffix Nullable(String)
testbuildispreflight Int64
cpu Nullable(String)
gpu Nullable(String)
verbatimrhiname Nullable(String)
deviceprofile Nullable(String)
test_identity Nullable(String)
summary_name Nullable(String)
computed_platform Nullable(String)
computed_stream Nullable(String)
is_build_machine Bool
horde_url_str Nullable(String)
stream_id Nullable(String)
template_id Nullable(String)
job_id Nullable(String)
step_id Nullable(String)
commit_id_ordered Nullable(Int64)
commit_id Nullable(String)
session_id Nullable(String)
session_label Nullable(String)
event_name Nullable(String)
schema_version Int64
telemetry_timestamp Nullable(DateTime)

9. Check the data in the DB

docker exec -it horde-clickhouse clickhouse-client --user username --password password --query "
SELECT * FROM ingest.horde_state_performance_key_stats LIMIT 50
FORMAT CSVWithNames
"

DB TABLE output in CSV:

"dynamic_resolution_percentage_max","csvid","gp_utime_avg","physical_used_mb_max","dynamic_resolution_vsm_nanite","mvp","hitches_min","hitch_time_percent","game_threadtime_avg","render_threadtime_avg","frametime_avg","dynamic_resolution_percentage_avg","engineversion","enginereleaseversion","buildversion","pla                                      tform","testid","testname","testconfigname","gauntlettesttype","gauntletsubtest","collated","branch","changelist","starttimestamp","endtimestamp","buildsuffix","testbuildispreflight","cpu","gpu","verbatimrhiname","deviceprofile","test_identity","summary_name","computed_platform","computed_stream","is_build_mac                                      hine","horde_url_str","stream_id","template_id","job_id","step_id","commit_id_ordered","commit_id","session_id","session_label","event_name","schema_version","telemetry_timestamp"
0,"E44704D24A8D79E19164E69D2319CAB2",0,0,0,0,0,2.4429426193237305,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785149248,1785149254,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"7F4213A042E03026A965D58EFA54F23C",0,0,0,0,0,2.1130990982055664,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785148877,1785148883,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"571F979E4550D7A3D0F5FE89F3653494",0,0,0,0,0,2.0585601329803467,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785147120,1785147126,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"7E395B814AE4F4F1E69BB29FB785C93B",0,0,0,0,0,2.4853193759918213,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785102138,1785102144,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"0EBA6D2B45AF86C0EB144780D4D8D0F2",0,0,0,0,0,5.274324417114258,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785101954,1785101959,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D12                                      ","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"D1984811474B9A4AAB754FA8FEA34237",0,0,0,0.8595988750457764,0,6.750069618225098,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785101838,1785101843,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RT                                      X 3070 Ti","D3D12","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"349FE13D498F6B19981C5F8ADA99E7E7",0,0,0,0,0,4.905202865600586,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785100117,1785100123,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D12                                      ","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"C06481514C5C35DB5A4C138E15EF657E",0,0,0,0,0,2.5978572368621826,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785099954,1785099960,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"2022A8D84D8DDB79505F6C8AC027A952",0,0,0,0,0,3.909252643585205,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785095167,1785095172,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D12                                      ","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"B4E7C99845D95ABC45E049A72D911FBD",0,0,0,88.72832489013672,0,95.39450073242188,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785022021,1785022027,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX                                       3070 Ti","D3D12","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"926DB7574CA660A0E5C8608BB26C6267",0,0,0,92.196533203125,0,95.83829498291016,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785021885,1785021891,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3                                      070 Ti","D3D12","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"66132EA845B70F2B587256A5D7841975",0,0,0,92.24137878417969,0,95.86881256103516,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1784998261,1784998266,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX                                       3070 Ti","D3D12","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"FF3FBF334D0C03217953B0BC65DDE1D2",0,0,0,86.72230529785156,0,91.4575424194336,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1784909709,1784909731,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX                                       3070 Ti","D3D12","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"5CB6602D4E159C63E328268DBAC38542",0,0,0,0,0,18.163408279418945,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1784908359,1784908365,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"EA30EBF0469928787CBB439B12FCA4DE",0,0,0,0,0,0.5785451531410217,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1784890871,1784890876,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"43363dfad4574e02bcf244d001873b24",\N,"State.Performance.KeyStats",2,\N
0,"E44704D24A8D79E19164E69D2319CAB2",0,0,0,0,0,2.4429426193237305,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785149248,1785149254,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"7F4213A042E03026A965D58EFA54F23C",0,0,0,0,0,2.1130990982055664,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785148877,1785148883,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"571F979E4550D7A3D0F5FE89F3653494",0,0,0,0,0,2.0585601329803467,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785147120,1785147126,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"7E395B814AE4F4F1E69BB29FB785C93B",0,0,0,0,0,2.4853193759918213,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785102138,1785102144,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"0EBA6D2B45AF86C0EB144780D4D8D0F2",0,0,0,0,0,5.274324417114258,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785101954,1785101959,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D12                                      ","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"D1984811474B9A4AAB754FA8FEA34237",0,0,0,0.8595988750457764,0,6.750069618225098,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785101838,1785101843,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RT                                      X 3070 Ti","D3D12","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"349FE13D498F6B19981C5F8ADA99E7E7",0,0,0,0,0,4.905202865600586,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785100117,1785100123,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D12                                      ","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"C06481514C5C35DB5A4C138E15EF657E",0,0,0,0,0,2.5978572368621826,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785099954,1785099960,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"2022A8D84D8DDB79505F6C8AC027A952",0,0,0,0,0,3.909252643585205,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785095167,1785095172,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D12                                      ","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"B4E7C99845D95ABC45E049A72D911FBD",0,0,0,88.72832489013672,0,95.39450073242188,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785022021,1785022027,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX                                       3070 Ti","D3D12","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"926DB7574CA660A0E5C8608BB26C6267",0,0,0,92.196533203125,0,95.83829498291016,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785021885,1785021891,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3                                      070 Ti","D3D12","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"66132EA845B70F2B587256A5D7841975",0,0,0,92.24137878417969,0,95.86881256103516,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1784998261,1784998266,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX                                       3070 Ti","D3D12","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"FF3FBF334D0C03217953B0BC65DDE1D2",0,0,0,86.72230529785156,0,91.4575424194336,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1784909709,1784909731,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX                                       3070 Ti","D3D12","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"5CB6602D4E159C63E328268DBAC38542",0,0,0,0,0,18.163408279418945,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1784908359,1784908365,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N
0,"EA30EBF0469928787CBB439B12FCA4DE",0,0,0,0,0,0.5785451531410217,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1784890871,1784890876,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D1                                      2","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"fc939ffa8e714622adc3e40f70becf8a",\N,"State.Performance.KeyStats",2,\N

10. Stream missing issue

The stream is not selectable in the Performance dashboard at all. Tried some hacky solutions to backfill the data, but that doesn’t work, the output is what I got in the first post, just one data point that is for sure wrong.

It is missing in the db, never sent there (visualization of the above values in #9)

In dashboard it looks like this. Stream is not present.

Thanks for the details. Will review and let you know.

just noticed the timestamps and values in the db are not present at all either

Yeah there seems to be some important data missing in your rows of data. As an example

_app_id, _app_version, _app_environment, _telemetry_store_i.

I’m importing your data locally and will see. I just did a vanilla Horde setup, and pushed through some CSVBin data through PRT from one of our internal test jobs, and all the data is there. All of our test jobs are run within the context of Horde (of which everything runs within the context of P4). Some important metadata is seeded in most Horde jobs as a result, so I am curious if this dependent data isn’t making it’s way into the source CSVBin, and as a result is breaking here.

But… things like _telemetry_store_id should all be stored correctly at the very least since this is fundamental Horde data.

Specifically this: https://github.com/EpicGames/UnrealEngine/blob/5.8/Engine/Source/Programs/Horde/Plugins/ClickHouseTelemetry/HordeServer.Epic.ClickHouseTelemetry/ClickHouseTelemetrySink.cs#L455

Tried a server and local PC wipe, did one new test, and sent it again

I am using github source build of UE 5.8.0. The local tests work. Just tried deleting everything and generating new local test.

Here is a screenshot of the html report. Then I tried to clear the server DB again and send the data again

1. Deleted everything in

C:\Unreal5.8\GameProjectFolder\Saved\Performance\SequenceTest

2. Entered C:\Unreal5.8\GameProjectFolder\Build\BatchFiles, and ran RunLocalTests.bat

C:\Unreal5.8\QuitStalinUE\Build\BatchFiles>call "C:\Unreal5.8\QuitStalinUE\Build\BatchFiles\../../../Engine/Build/BatchFiles\RunUAT.bat" BuildGraph -Script="QuitStalinUE/Build/AutoPerfTests.xml" -Target="BuildAndTest QuitStalinUE" -UseLocalBuildStorage -set:TargetPlatforms=Win64 -set:TargetConfigurations=Test -set:TargetBootTest=false -set:WithAPTSequenceTests=true -set:DoPerf=true -set:DoLLM=true -set:GenerateLocalReports=true -set:IterationsPerf=1 -set:IterationsLLM=1 -set:IterationsInsights=1
Running AutomationTool...
Using bundled DotNet SDK version: 10.0 win-x64
UnrealBuildTool is up-to-date
AutomationTool is up-to-date
Starting AutomationTool...
Parsing command line: BuildGraph -Script=QuitStalinUE/Build/AutoPerfTests.xml -Target="BuildAndTest QuitStalinUE" -UseLocalBuildStorage -set:TargetPlatforms=Win64 -set:TargetConfigurations=Test -set:TargetBootTest=false -set:WithAPTSequenceTests=true -set:DoPerf=true -set:DoLLM=true -set:GenerateLocalReports=true -set:IterationsPerf=1 -set:IterationsLLM=1 -set:IterationsInsights=1
Initializing script modules...
Total script module initialization time: 1.31 s.
Using C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe
Executing commands...
****** [1/10] QuitStalinUE Update Version Files Win64

Saving file list to C:\Unreal5.8\Engine\Saved\BuildGraph\QuitStalinUE Update Version Files Win64\Tag-QuitStalinUE Update Version Files Win64.xml

.............
.............

2a. RunLocalTests.bat

call "%~dp0../../../Engine/Build/BatchFiles\RunUAT.bat" BuildGraph -Script="QuitStalinUE/Build/AutoPerfTests.xml" -Target="BuildAndTest QuitStalinUE" -UseLocalBuildStorage -set:TargetPlatforms=Win64 -set:TargetConfigurations=Test -set:TargetBootTest=false -set:WithAPTSequenceTests=true -set:DoPerf=true -set:DoLLM=true -set:GenerateLocalReports=true -set:IterationsPerf=1 -set:IterationsLLM=1 -set:IterationsInsights=1
pause

2b. AutoPerfTests.xml

<?xml version='1.0' ?>
<BuildGraph xmlns="http://www.epicgames.com/BuildGraph" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.epicgames.com/BuildGraph ../Schema.xsd" >

<!-- Project Info -->
<Property Name="ProjectName" Value="QuitStalinUE" />
<Property Name="ProjectPath" Value="QuitStalinUE" />
<Option Name="TargetName" DefaultValue="QuitStalinUE" Restrict="QuitStalinUE" Description="The project target configuration we're building" />

<!-- Stick to the defaults unless the project needs to change this -->
<Property Name="WithBATDefaults" Value="true" />

<!-- If a build machine, turn off all defaults. Settings should be specified via the website UI -->
<Do If="$(IsBuildMachine)">
	<Property Name="DefaultEditorPlatforms" Value="Win64" />
	<Property Name="DefaultTargetPlatforms" Value="Win64" />
	<Property Name="DefaultTargetConfigurations" Value="Development" />
	<Property Name="DefaultEditorTestList" Value="" />
	<Property Name="DefaultTargetTestList" Value="" />
</Do>

<!-- Customized the project configurations to enable project-specific performance testing using the 
AutomatedPerfTesting/Build/Inc/TestConfigs provided macro 'AddPerfTestConfig'. 

For example, on Windows this can be used to validate non-default RHIs such as Vulkan. -->
<Include Script="$(RootDir)/Engine/Plugins/Performance/AutomatedPerfTesting/Build/Inc/TestConfigs.xml" />
<Include Script="../Platforms/*/Build/PerfTestConfigs.xml" />
<Include Script="../Restricted/*/Build/PerfTestConfigs.xml" />

<!-- Configure AutomatedPerfTest Sequence test -->
<Include Script="$(RootDir)/Engine/Plugins/Performance/AutomatedPerfTesting/Build/Inc/AutomatedPerfTestProjectSettings.xml" />
<Do If="'$(MapSequenceComboNames)' == ''">
	<Property Name="MapSequenceComboNames" Value="MAP08" />
</Do>


<!-- Common Setting Overrides -->
<Property Name="GauntletSettingsFile" Value="$(RootDir)/$(ProjectPath)/Build/Inc/GauntletSettings.xml" />

<!-- For Mac builds, we default to the sandbox entitlement, however PerfTests expect data outside,
     so we disable the entitlement for this particular build. -->
<Property Name="ExtraStageAndPackageArguments" Value="-target=&quot;$(TargetName)&quot; -compressed -noEntitlements" />
<Property Name="ExtraTargetEntitlementArguments" Value="-noEntitlements"/>

<!-- This will declare an aggregate called BuildAndTest QuitStalinUE -->
<Include Script="$(RootDir)/Engine/Build/Graph/Tasks/BuildAndTestProject.xml" />

</BuildGraph>

2c. GauntletSettings.xml

<?xml version='1.0' ?>
<BuildGraph xmlns="http://www.epicgames.com/BuildGraph" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.epicgames.com/BuildGraph ../../Schema.xsd" >

	<!-- Gauntlet additional arguments - use dx12 RHI -->
	<!-- Using BuildNamePath specifically as we want the preflight suffix if it exists (cargo cult?). -->
	<Option Name="ExtraGauntletCommonArgs" DefaultValue="-BuildName=$(BuildNamePath)" Description="Additional Common arguments passed to Gauntlet command line"/>

	<!-- Common AutoTestPerf Gauntlet settings -->
	<Include Script="$(RootDir)/Engine/Plugins/Performance/AutomatedPerfTesting/Build/Inc/AutomatedPerfTestCommonSettings.xml" />

	<!-- Common Gauntlet settings -->
	<Include Script="$(RootDir)/Engine/Build/Graph/Tasks/Inc/GauntletSettings.xml" />

</BuildGraph>

3. Sent data again

PS C:\Users\Jan>  dotnet "C:\Unreal5.8\Engine\Binaries\DotNET\CsvTools/PerfReportTool.dll" -csvdir "C:\Unreal5.8\QuitStalinUE\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 "test1"
PerfReportTool v4.274.0
BaseDir:   C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport
ReportXML: C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport\ReportTypes.xml
ReportXML: C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport\ReportTypes.xml
GraphXML:  C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport\ReportGraphs.xml

Batched graph generation enabled.
Kicking off 8 precache threads with lookahead 8
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260727-205253_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
-------------------------------------------------
CSV 1/1
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260727-205253_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
[Telemetry] Flushing 1 telemetry events.
[Telemetry] Telemetry flush complete. Succeeded: 1, Failed: 0
Duplicate CSVs skipped: 0
PS C:\Users\Jan>

4. Horde received it, but almost no values are there, compared to the HTML report

root@horde:~# docker exec -it horde-clickhouse clickhouse-client --user username --password password --query "
SELECT * FROM ingest.horde_state_performance_key_stats LIMIT 50
FORMAT CSVWithNames
"
"dynamic_resolution_percentage_max","csvid","gp_utime_avg","physical_used_mb_max","dynamic_resolution_vsm_nanite","mvp","hitches_min","hitch_time_percent","game_threadtime_avg","render_threadtime_avg","frametime_avg","dynamic_resolution_percentage_avg","engineversion","enginereleaseversion","buildversion","platform","testid","testname","testconfigname","gauntlettesttype","gauntletsubtest","collated","branch","changelist","starttimestamp","endtimestamp","buildsuffix","testbuildispreflight","cpu","gpu","verbatimrhiname","deviceprofile","test_identity","summary_name","computed_platform","computed_stream","is_build_machine","horde_url_str","stream_id","template_id","job_id","step_id","commit_id_ordered","commit_id","session_id","session_label","event_name","schema_version","telemetry_timestamp"
0,"97EF8B4043557D39DD0A9FA745A82870",0,0,0,0,0,2.179562568664551,0,0,0,0,"5.8.0-0+UE5","5.8.0","Unknown-CL-0-QuitStalinUE","Windows","APT","QuitStalinUE","","AutomatedPerfTest","Perf",false,\N,\N,1785178374,1785178380,\N,0,"AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor","NVIDIA GeForce RTX 3070 Ti","D3D12","Windows","test1","KeyStats",\N,\N,false,"http://192.168.88.122:5000/",\N,\N,\N,\N,-1,\N,"bf0c8b7036d74046a63f6734ae607c61",\N,"State.Performance.KeyStats",2,\N
root@horde:~#

OK, so among other things it looks like the above CSV doesn’t actually have any of the data necessary to render anything.

I’ve attached a CSV report here, showing a sampling of your data as compared to a valid csvbin → telemetry emission:

_telemetry_store_id,_app_id,_app_version,_app_environment,_session_id,dynamic_resolution_percentage_max,csvid,gp_utime_avg,physical_used_mb_max,dynamic_resolution_vsm_nanite,mvp,hitches_min,hitch_time_percent,game_threadtime_avg,render_threadtime_avg,frametime_avg,dynamic_resolution_percentage_avg,engineversion,enginereleaseversion,buildversion,platform,testid,testname,testconfigname,gauntlettesttype,gauntletsubtest,collated,branch,changelist,starttimestamp,endtimestamp,buildsuffix,testbuildispreflight,cpu,gpu,verbatimrhiname,deviceprofile,test_identity,summary_name,computed_platform,computed_stream,is_build_machine,horde_url_str,stream_id,template_id,job_id,step_id,commit_id_ordered,commit_id,session_id,session_label,event_name,schema_version,telemetry_timestamp
,,,,,0,B4E7C99845D95ABC45E049A72D911FBD,0,0,0,88.72832489013672,0,95.39450073242188,0,0,0,0,5.8.0-0+UE5,5.8.0,Unknown-CL-0-QuitStalinUE,Windows,APT,QuitStalinUE,,AutomatedPerfTest,Perf,,,,1785022021,1785022027,,0,AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor,NVIDIA GeForce RTX 3070 Ti,D3D12,Windows,test1,KeyStats,,,,http://192.168.88.122:5000/,test_stream,,,,-1,,fc939ffa8e714622adc3e40f70becf8a,,State.Performance.KeyStats,2,1969-12-31 16:00:00.000
,,,,,0,926DB7574CA660A0E5C8608BB26C6267,0,0,0,92.196533203125,0,95.83829498291016,0,0,0,0,5.8.0-0+UE5,5.8.0,Unknown-CL-0-QuitStalinUE,Windows,APT,QuitStalinUE,,AutomatedPerfTest,Perf,,,,1785021885,1785021891,,0,AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor,NVIDIA GeForce RTX 3070 Ti,D3D12,Windows,test1,KeyStats,,,,http://192.168.88.122:5000/,test_stream,,,,-1,,fc939ffa8e714622adc3e40f70becf8a,,State.Performance.KeyStats,2,1969-12-31 16:00:00.000
,,,,,0,66132EA845B70F2B587256A5D7841975,0,0,0,92.24137878417969,0,95.86881256103516,0,0,0,0,5.8.0-0+UE5,5.8.0,Unknown-CL-0-QuitStalinUE,Windows,APT,QuitStalinUE,,AutomatedPerfTest,Perf,,,,1784998261,1784998266,,0,AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor,NVIDIA GeForce RTX 3070 Ti,D3D12,Windows,test1,KeyStats,,,,http://192.168.88.122:5000/,test_stream,,,,-1,,fc939ffa8e714622adc3e40f70becf8a,,State.Performance.KeyStats,2,1969-12-31 16:00:00.000
,,,,,0,FF3FBF334D0C03217953B0BC65DDE1D2,0,0,0,86.72230529785156,0,91.4575424194336,0,0,0,0,5.8.0-0+UE5,5.8.0,Unknown-CL-0-QuitStalinUE,Windows,APT,QuitStalinUE,,AutomatedPerfTest,Perf,,,,1784909709,1784909731,,0,AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor,NVIDIA GeForce RTX 3070 Ti,D3D12,Windows,test1,KeyStats,,,,http://192.168.88.122:5000/,test_stream,,,,-1,,fc939ffa8e714622adc3e40f70becf8a,,State.Performance.KeyStats,2,1969-12-31 16:00:00.000
,,,,,0,5CB6602D4E159C63E328268DBAC38542,0,0,0,0,0,18.163408279418945,0,0,0,0,5.8.0-0+UE5,5.8.0,Unknown-CL-0-QuitStalinUE,Windows,APT,QuitStalinUE,,AutomatedPerfTest,Perf,,,,1784908359,1784908365,,0,AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor,NVIDIA GeForce RTX 3070 Ti,D3D12,Windows,test1,KeyStats,,,,http://192.168.88.122:5000/,test_stream,,,,-1,,fc939ffa8e714622adc3e40f70becf8a,,State.Performance.KeyStats,2,1969-12-31 16:00:00.000
,,,,,0,EA30EBF0469928787CBB439B12FCA4DE,0,0,0,0,0,0.5785451531410217,0,0,0,0,5.8.0-0+UE5,5.8.0,Unknown-CL-0-QuitStalinUE,Windows,APT,QuitStalinUE,,AutomatedPerfTest,Perf,,,,1784890871,1784890876,,0,AuthenticAMD|AMD Ryzen 9 7950X3D 16-Core Processor,NVIDIA GeForce RTX 3070 Ti,D3D12,Windows,test1,KeyStats,,,,http://192.168.88.122:5000/,test_stream,,,,-1,,fc939ffa8e714622adc3e40f70becf8a,,State.Performance.KeyStats,2,1969-12-31 16:00:00.000
default,Horde,1,Dev,b1d7ef833b0f4709a174f38554e33341,0,EDC5F62A4B1244D33CE23D95A04A2597,33.934814453125,5488.37451171875,0,57.0518798828125,62.625701904296875,30.394071578979492,21.502134323120117,13.8440523147583,38.815223693847656,0,6.0.0-0+UE6,6.0.0,++Fortnite+Main-CL-56182260-CitySample,Windows,APT,CitySample,Windows,AutomatedPerfTest,Perf,,//Fortnite/Main,56182260,1785105695,1785105802,-CitySample,0,GenuineIntel|Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz,NVIDIA Tesla T4,D3D12,Windows,JgambleTest,KeyStats,,,,,,,,,-1,,b1d7ef833b0f4709a174f38554e33341,,State.Performance.KeyStats,2,2026-07-27 11:52:54.993
default,Horde,1,Dev,b1d7ef833b0f4709a174f38554e33341,0,564C4FFF4EE8F88D1D9A43B379B05F5C,35.35356521606445,4980.15234375,0,58.7108268737793,63.6207160949707,33.204166412353516,21.82879066467285,13.851166725158691,40.377384185791016,0,6.0.0-0+UE6,6.0.0,++Fortnite+Main-CL-56182260-CitySample,Windows,APT,CitySample,Windows,AutomatedPerfTest,Perf,,//Fortnite/Main,56182260,1785106030,1785106142,-CitySample,0,GenuineIntel|Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz,NVIDIA Tesla T4,D3D12,Windows,JgambleTest,KeyStats,,,,,,,,,-1,,b1d7ef833b0f4709a174f38554e33341,,State.Performance.KeyStats,2,2026-07-27 11:52:54.993
default,Horde,1,Dev,b1d7ef833b0f4709a174f38554e33341,0,9B960E204AFB783BAA39D3AFE6A67A04,33.24664306640625,5415.36328125,0,57.09852600097656,70.37213134765625,30.374059677124023,21.574871063232422,13.817635536193848,38.8606071472168,0,6.0.0-0+UE6,6.0.0,++Fortnite+Main-CL-56182260-CitySample,Windows,APT,CitySample,Windows,AutomatedPerfTest,Perf,,//Fortnite/Main,56182260,1785105360,1785105468,-CitySample,0,GenuineIntel|Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz,NVIDIA Tesla T4,D3D12,Windows,JgambleTest,KeyStats,,,,,,,,,-1,,b1d7ef833b0f4709a174f38554e33341,,State.Performance.KeyStats,2,2026-07-27 11:52:54.993
default,Horde,1,Dev,b1d7ef833b0f4709a174f38554e33341,0,73BA238E46172C228A55B8853C2895AA,33.72450637817383,5483.57763671875,0,57.63750457763672,63.975868225097656,31.621137619018555,21.516990661621094,13.636174201965332,39.353309631347656,0,6.0.0-0+UE6,6.0.0,++Fortnite+Main-CL-56182260-CitySample,Windows,APT,CitySample,Windows,AutomatedPerfTest,Perf,,//Fortnite/Main,56182260,1785105861,1785105970,-CitySample,0,GenuineIntel|Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz,NVIDIA Tesla T4,D3D12,Windows,JgambleTest,KeyStats,,,,,,,,,-1,,b1d7ef833b0f4709a174f38554e33341,,State.Performance.KeyStats,2,2026-07-27 11:52:54.993
default,Horde,1,Dev,b1d7ef833b0f4709a174f38554e33341,0,0FFC633E460A3F0D3D3754BDDFDB3032,33.8341064453125,5447.41748046875,0,57.36314392089844,65.49861907958984,30.42072296142578,21.716449737548828,13.623910903930664,39.101295471191406,0,6.0.0-0+UE6,6.0.0,++Fortnite+Main-CL-56182260-CitySample,Windows,APT,CitySample,Windows,AutomatedPerfTest,Perf,,//Fortnite/Main,56182260,1785106199,1785106307,-CitySample,0,GenuineIntel|Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz,NVIDIA Tesla T4,D3D12,Windows,JgambleTest,KeyStats,,,,,,,,,-1,,b1d7ef833b0f4709a174f38554e33341,,State.Performance.KeyStats,2,2026-07-27 11:52:54.993
default,Horde,1,Dev,b1d7ef833b0f4709a174f38554e33341,0,3B56C15643E22B8C72A19DA17CAD5F1D,35.514713287353516,5475.8828125,0,58.70475769042969,65.68108367919922,33.8791389465332,21.3076114654541,13.550186157226562,40.37275695800781,0,6.0.0-0+UE6,6.0.0,++Fortnite+Main-CL-56182260-CitySample,Windows,APT,CitySample,Windows,AutomatedPerfTest,Perf,,//Fortnite/Main,56182260,1785105525,1785105637,-CitySample,0,GenuineIntel|Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz,NVIDIA Tesla T4,D3D12,Windows,JgambleTest,KeyStats,,,,,,,,,-1,,b1d7ef833b0f4709a174f38554e33341,,State.Performance.KeyStats,2,2026-07-27 11:52:54.993

What this highlights is that I don’t think the necessary data (e.g. hitches_min).

When I run PRT with the following command:

 -reportType ClientPerf -csvdir "PATH_TO_MY_CSVBINS\CitySequence" -summaryTable KeyStats -nodetailedreports -csvTable -summaryTableDataToTelemetryVerbose -reportxmlbasedir "PATH_TO_ENGINE_SYNC\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport" -telemetryTestIdentity "ExampleIdentity" -summaryTableOutputFormats html

… I get this CSV output in the “PATH_TO_ENGINE_SYNC\Engine\Source\Programs\CSVTools\PerfReportTool\bin\Debug\net10.0\SummaryTable.csv” .

platform,MVP,Hitches/Min,HitchTimePercent,Frametime Avg,GameThreadtime Avg,RenderThreadtime Avg,GPUtime Avg,PhysicalUsedMB Max,csvid
Windows,57.0518798828125,62.625701904296875,30.394071578979492,38.815223693847656,21.502134323120117,13.8440523147583,33.934814453125,5488.37451171875,EDC5F62A4B1244D33CE23D95A04A2597
Windows,57.09852600097656,70.37213134765625,30.374059677124023,38.8606071472168,21.574871063232422,13.817635536193848,33.24664306640625,5415.36328125,9B960E204AFB783BAA39D3AFE6A67A04
Windows,57.63750457763672,63.975868225097656,31.621137619018555,39.353309631347656,21.516990661621094,13.636174201965332,33.72450637817383,5483.57763671875,73BA238E46172C228A55B8853C2895AA
Windows,58.7108268737793,63.6207160949707,33.204166412353516,40.377384185791016,21.82879066467285,13.851166725158691,35.35356521606445,4980.15234375,564C4FFF4EE8F88D1D9A43B379B05F5C
Windows,58.70475769042969,65.68108367919922,33.8791389465332,40.37275695800781,21.3076114654541,13.550186157226562,35.514713287353516,5475.8828125,3B56C15643E22B8C72A19DA17CAD5F1D
Windows,57.36314392089844,65.49861907958984,30.42072296142578,39.101295471191406,21.716449737548828,13.623910903930664,33.8341064453125,5447.41748046875,0FFC633E460A3F0D3D3754BDDFDB3032

If you can verify your CSV output for the summary table, that’d be great.

Kind regards,

Julian

When I run the command


 PS C:\Unreal5.8\QuitStalinUE\Build\BatchFiles> dotnet "C:\Unreal5.8\Engine\Binaries\DotNET\CsvTools/PerfReportTool.dll" -reportType ClientPerf -csvdir "C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV" -summaryTable KeyStats -nodetailedreports -csvTable -summaryTableDataToTelemetryVerbose -reportxmlbasedir "C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport" -telemetryTestIdentity "ExampleIdentity" -summaryTableOutputFormats html
PerfReportTool v4.274.0
BaseDir:   C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport
ReportXML: C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport\ReportTypes.xml
ReportXML: C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport\ReportTypes.xml
GraphXML:  C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport\ReportGraphs.xml

Batched graph generation enabled.
Kicking off 8 precache threads with lookahead 8
Report type clientperf is not compatible with CSV C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260727-205253_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
-------------------------------------------------
CSV 1/1
C:\Unreal5.8\QuitStalinUE\Saved\Performance\SequenceTest\Perf\Win64\CSV\Unknown-CL-0-QuitStalinUE_Windows_20260727-205253_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
[Telemetry] Flushing 2 telemetry events.
[Telemetry] Telemetry flush complete. Succeeded: 2, Failed: 0
Duplicate CSVs skipped: 0
PS C:\Unreal5.8\QuitStalinUE\Build\BatchFiles>

There is no such folder created (stops here, no bin folder created and I searched for SummaryTable.csv, nothing got created)


PS C:\Unreal5.8\Engine\Source\Programs\CSVTools\PerfReportTool> ls


    Directory: C:\Unreal5.8\Engine\Source\Programs\CSVTools\PerfReportTool


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        23.07.2026     17:26                ColumnFilters
d-----        23.07.2026     17:26                Properties
d-----        23.07.2026     17:26                Summaries
d-----        23.07.2026     17:54                XmlSchemas
-a----        23.07.2026     17:26            590 App.config
-a----        23.07.2026     17:26          18588 CsvFileCache..cs
-a----        23.07.2026     17:26           5743 LLMReportGraphs.xml
-a----        23.07.2026     17:26           5255 LLMReportTypes.xml
-a----        23.07.2026     17:26             66 packages.config
-a----        23.07.2026     17:26         100053 PerfReportTool.cs
-a----        23.07.2026     17:26           1362 PerfreportTool.csproj
-a----        23.07.2026     17:26          10349 ReportGraph.cs
-a----        23.07.2026     17:26           9362 ReportGraphs.xml
-a----        23.07.2026     17:26           2832 ReportType.cs
-a----        23.07.2026     17:26          10776 ReportTypes.xml
-a----        23.07.2026     17:26          34321 ReportXml.cs
-a----        23.07.2026     17:26          12133 Summary.cs
-a----        23.07.2026     17:26         106196 SummaryTable.cs
-a----        23.07.2026     17:26          18522 SummaryTableData.cs
-a----        23.07.2026     17:26          13168 SummaryTypes.cs
-a----        23.07.2026     17:26          14101 Telemetry.cs


PS C:\Unreal5.8\Engine\Source\Programs\CSVTools\PerfReportTool>

Can you attach your CSV that you’ve alluded to. I can take a look. Fundamentally, it looks like the underlying CSV is incompatible with the Summary Tables - aka something isn’t being exported properly from the runtime CSVProfiler wise.

Here it is:

Unknown-CL-0-QuitStalinUE_Windows_20260727-205253_Windows_APT_Sequence_MAP08-Pass0.csv (884.1 KB)

@JulianGamble

I’ll run some tests locally; longer reply shortly.

When I run locally:
-reportType ClientPerf -csvdir “PATH_TO_DOWNLOAD_CSV\QuitStalinUE” -summaryTable KeyStats -nodetailedreports -csvTable -summaryTableDataToTelemetryVerbose -reportxmlbasedir “PATH_TO_ENGINE_SYNC\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport” -telemetryTestIdentity “JgambleTest” -summaryTableOutputFormats

I get:

platform,MVP,Hitches/Min,HitchTimePercent,Frametime Avg,GameThreadtime Avg,RenderThreadtime Avg,GPUtime Avg,PhysicalUsedMB Max,csvid
Windows,0,10.28385066986084,2.179562568664551,15.85114860534668,1.5473904609680176,3.7938461303710938,13.88704776763916,2066.867431640625,97EF8B4043557D39DD0A9FA745A82870

Now this of course will not work as is, it must be conditioned to have a proper stream-id, otherwise various parts of querying don’t work (the Horde data model is assumed when working with horde perf trends - meaning data emitted must have stream-id, among others; I do have some ideas on how to break this apart but you’ll need to patch some files).

After patching the stream-id, it works correctly:

Directly from 5.8 branch, I run the following:

SYNC_TO_5.8\Engine\Binaries\DotNET\CsvTools> dotnet .\PerfreportTool.dll -reportType ClientPerf -csvdir “PATH_TO_DOWNLOAD_CSV\QuitStalinUE” -summaryTable KeyStats -nodetailedreports -csvTable -summaryTableDataToTelemetryVerbose -reportxmlbasedir “SYNC_TO_5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport” -telemetryTestIdentity “JgambleTest” -summaryTableOutputFormats

The following file will be emitted:

>SYNC_TO_5.8\Engine\Binaries\DotNET\CsvTools\SummaryTable.csv

platform,MVP,Hitches/Min,HitchTimePercent,Frametime Avg,GameThreadtime Avg,RenderThreadtime Avg,GPUtime Avg,PhysicalUsedMB Max,csvid
Windows,0,10.28385066986084,2.179562568664551,15.85114860534668,1.5473904609680176,3.7938461303710938,13.88704776763916,2066.867431640625,97EF8B4043557D39DD0A9FA745A82870

Can you please try the following:

  1. Copy your attached csv to: some new folder (e.g. C:\Documents\QuitStalinUE).
  2. Run the following command
    1. SYNC_TO_5.8\Engine\Binaries\DotNET\CsvTools> dotnet .\PerfreportTool.dll -reportType ClientPerf -csvdir “C:\Documents\QuitStalinUE” -summaryTable KeyStats -nodetailedreports -csvTable -summaryTableDataToTelemetryVerbose -reportxmlbasedir “SYNC_TO_5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport” -telemetryTestIdentity “JgambleTest” -summaryTableOutputFormats
  3. Paste the contents of SYNC_TO_5.8\Engine\Binaries\DotNET\CsvTools\SummaryTable.csv here.

Edit: As I alluded to above, I made some changes to PerfReportTool to make it easier to pass on context from OUTSIDE the horde CI build execution:

Github submit here.

Effectively, you just call PRT but now with a subsequent parameter:

-telemetryPayloadMetadata "StreamId=test-stream;Changelist=100;"

And what this will do is fold the data in accordingly.

Kind regards,

Julian

On it, will post in 10 min

I put the csv into C:\DelTemp\ folder

and ran this, but there is again no .csv created in the CsvTools folder (log below this one)

There is no csv file generated in any of the subfolders either.

jan@DESKTOP-M2E0LST:/mnt/c/Unreal5.8/Engine/Binaries/DotNET$ pwd
/mnt/c/Unreal5.8/Engine/Binaries/DotNET
jan@DESKTOP-M2E0LST:/mnt/c/Unreal5.8/Engine/Binaries/DotNET$ find . -type f -name "*.csv" 2>/dev/null
jan@DESKTOP-M2E0LST:/mnt/c/Unreal5.8/Engine/Binaries/DotNET$

And about the discord message " 1. So you shouldn’t need to create the DB manually. The schema service will do that upon first telemetry emission into the db.
2. I’ll continue to reply in the forum post, as it’s visible to the widest audience."

  • I created it in the clickhouse, because otherwise I would get errors, that there is no db specified. Maybe I misconfigured something or the DB structure I custom created is wrong.
PS C:\Users\Jan> dotnet "C:\Unreal5.8\Engine\Binaries\DotNET\CsvTools/PerfReportTool.dll" -reportType ClientPerf -csvdir “C:\DelTemp” -summaryTable KeyStats -nodetailedreports -csvTable -summaryTableDataToTelemetryVerbose -reportxmlbasedir "C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport" -telemetryTestIdentity “JgambleTest” -summaryTableOutputFormats
PerfReportTool v4.274.0
BaseDir:   C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport
ReportXML: C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport\ReportTypes.xml
ReportXML: C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport\ReportTypes.xml
GraphXML:  C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport\ReportGraphs.xml

Batched graph generation enabled.
Kicking off 8 precache threads with lookahead 8
Report type clientperf is not compatible with CSV C:\DelTemp\Unknown-CL-0-QuitStalinUE_Windows_20260727-205253_Windows_APT_Sequence_MAP08-Pass0.csv, but using it anyway
-------------------------------------------------
CSV 1/1
C:\DelTemp\Unknown-CL-0-QuitStalinUE_Windows_20260727-205253_Windows_APT_Sequence_MAP08-Pass0.csv
-------------------------------------------------
[Telemetry] Flushing 2 telemetry events.
[Telemetry] Telemetry flush complete. Succeeded: 2, Failed: 0
Duplicate CSVs skipped: 0

CsvTools folder

PS C:\Unreal5.8\Engine\Binaries\DotNET\CsvTools> ls


    Directory: C:\Unreal5.8\Engine\Binaries\DotNET\CsvTools


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        23.07.2026     17:54                runtimes
-a----        23.07.2026     17:51         149504 BitFaster.Caching.dll
-a----        23.07.2026     17:53          18432 Blake3.dll
-a----        23.07.2026     17:24            795 CSVCollate.deps.json
-a----        23.07.2026     17:47          10752 CSVCollate.dll
-a----        23.07.2026     17:24            184 CSVCollate.dll.config
-a----        23.07.2026     17:49         162304 CSVCollate.exe
-a----        23.07.2026     17:24            377 CSVCollate.runtimeconfig.json
-a----        23.07.2026     17:24            795 CsvConvert.deps.json
-a----        23.07.2026     17:47          11264 CsvConvert.dll
-a----        23.07.2026     17:24            187 CsvConvert.dll.config
-a----        23.07.2026     17:49         162304 CsvConvert.exe
-a----        23.07.2026     17:24            377 CsvConvert.runtimeconfig.json
-a----        23.07.2026     17:24            792 CSVFilter.deps.json
-a----        23.07.2026     17:47           7168 CSVFilter.dll
-a----        23.07.2026     17:24            184 CSVFilter.dll.config
-a----        23.07.2026     17:49         162304 CSVFilter.exe
-a----        23.07.2026     17:24            377 CSVFilter.runtimeconfig.json
-a----        23.07.2026     17:24            786 CsvInfo.deps.json
-a----        23.07.2026     17:47          11264 CsvInfo.dll
-a----        23.07.2026     17:24            187 CsvInfo.dll.config
-a----        23.07.2026     17:51         162304 csvinfo.exe
-a----        23.07.2026     17:24            377 CsvInfo.runtimeconfig.json
-a----        23.07.2026     17:24            789 CSVSplit.deps.json
-a----        23.07.2026     17:47           8192 CSVSplit.dll
-a----        23.07.2026     17:24            184 CSVSplit.dll.config
-a----        23.07.2026     17:49         162304 CSVSplit.exe
-a----        23.07.2026     17:24            377 CSVSplit.runtimeconfig.json
-a----        23.07.2026     17:24            418 CSVStats.deps.json
-a----        23.07.2026     17:47          47104 CsvStats.dll
-a----        23.07.2026     17:24           1204 CSVToSVG.deps.json
-a----        23.07.2026     17:47          20992 CSVToSVG.dll
-a----        23.07.2026     17:24            184 CSVToSVG.dll.config
-a----        23.07.2026     17:49         162304 CSVToSVG.exe
-a----        23.07.2026     17:24            377 CSVToSVG.runtimeconfig.json
-a----        23.07.2026     17:24            798 CsvToSvgLib.deps.json
-a----        23.07.2026     17:47          66560 CsvToSvgLib.dll
-a----        23.07.2026     17:53         245760 Dapper.dll
-a----        23.07.2026     17:47          22528 EpicGames.Analytics.PerformanceTrends.dll
-a----        23.07.2026     17:24          13497 EpicGames.Analytics.PerformanceTrends.xml
-a----        23.07.2026     17:47          10752 EpicGames.Analytics.Telemetry.dll
-a----        23.07.2026     17:47         587776 EpicGames.Core.dll
-a----        23.07.2026     17:48        1806848 EpicGames.Horde.dll
-a----        23.07.2026     17:24        1578026 EpicGames.Horde.xml
-a----        23.07.2026     17:47          16384 EpicGames.IoHash.dll
-a----        23.07.2026     17:47         147968 EpicGames.OIDC.dll
-a----        23.07.2026     17:47           9216 EpicGames.Oodle.dll
-a----        23.07.2026     17:24           7699 EpicGames.Oodle.xml
-a----        23.07.2026     17:47         107520 EpicGames.Serialization.dll
-a----        23.07.2026     17:54         472672 Google.Protobuf.dll
-a----        23.07.2026     17:51          70432 Grpc.Core.Api.dll
-a----        23.07.2026     17:51         295200 Grpc.Net.Client.dll
-a----        23.07.2026     17:51          22304 Grpc.Net.Common.dll
-a----        23.07.2026     17:54         191488 IdentityModel.dll
-a----        23.07.2026     17:54         166912 IdentityModel.OidcClient.dll
-a----        23.07.2026     17:49         113664 JetBrains.Annotations.dll
-a----        23.07.2026     17:49          65024 K4os.Compression.LZ4.dll
-a----        23.07.2026     17:24           5743 LLMReportGraphs.xml
-a----        23.07.2026     17:24           5255 LLMReportTypes.xml
-a----        23.07.2026     17:47         177736 Microsoft.Data.Sqlite.dll
-a----        23.07.2026     17:47          38152 Microsoft.Extensions.Caching.Abstractions.dll
-a----        23.07.2026     17:47          48432 Microsoft.Extensions.Caching.Memory.dll
-a----        23.07.2026     17:47          28936 Microsoft.Extensions.Configuration.Abstractions.dll
-a----        23.07.2026     17:47          43824 Microsoft.Extensions.Configuration.Binder.dll
-a----        23.07.2026     17:47          45368 Microsoft.Extensions.Configuration.dll
-a----        23.07.2026     17:47          28944 Microsoft.Extensions.Configuration.FileExtensions.dll
-a----        23.07.2026     17:47          28432 Microsoft.Extensions.Configuration.Json.dll
-a----        23.07.2026     17:47          66320 Microsoft.Extensions.DependencyInjection.Abstractions.dll
-a----        23.07.2026     17:47          96048 Microsoft.Extensions.DependencyInjection.dll
-a----        23.07.2026     17:47          31536 Microsoft.Extensions.Diagnostics.Abstractions.dll
-a----        23.07.2026     17:47          36624 Microsoft.Extensions.Diagnostics.dll
-a----        23.07.2026     17:47          23816 Microsoft.Extensions.FileProviders.Abstractions.dll
-a----        23.07.2026     17:47          45872 Microsoft.Extensions.FileProviders.Physical.dll
-a----        23.07.2026     17:47          48392 Microsoft.Extensions.FileSystemGlobbing.dll
-a----        23.07.2026     17:47          93448 Microsoft.Extensions.Http.dll
-a----        23.07.2026     17:47          33032 Microsoft.Extensions.Http.Polly.dll
-a----        23.07.2026     17:47          67384 Microsoft.Extensions.Logging.Abstractions.dll
-a----        23.07.2026     17:47          28976 Microsoft.Extensions.Logging.Configuration.dll
-a----        23.07.2026     17:48          76560 Microsoft.Extensions.Logging.Console.dll
-a----        23.07.2026     17:48          51976 Microsoft.Extensions.Logging.dll
-a----        23.07.2026     17:48          22800 Microsoft.Extensions.ObjectPool.dll
-a----        23.07.2026     17:48          22288 Microsoft.Extensions.Options.ConfigurationExtensions.dll
-a----        23.07.2026     17:48          65808 Microsoft.Extensions.Options.dll
-a----        23.07.2026     17:48          45360 Microsoft.Extensions.Primitives.dll
-a----        23.07.2026     17:49          25880 Microsoft.Win32.SystemEvents.dll
-a----        23.07.2026     17:52          28160 OpenTracing.dll
-a----        23.07.2026     17:24          46119 PerfreportTool.deps.json
-a----        23.07.2026     17:48         253440 PerfreportTool.dll
-a----        23.07.2026     17:24            590 PerfreportTool.dll.config
-a----        23.07.2026     17:49         162304 PerfreportTool.exe
-a----        23.07.2026     17:24            377 PerfreportTool.runtimeconfig.json
-a----        23.07.2026     17:47         287984 Polly.dll
-a----        23.07.2026     17:51           6144 Polly.Extensions.Http.dll
-a----        23.07.2026     17:24           2387 RegressionsReport.deps.json
-a----        23.07.2026     17:48          22016 RegressionsReport.dll
-a----        23.07.2026     17:51         162304 RegressionsReport.exe
-a----        23.07.2026     17:24            377 RegressionsReport.runtimeconfig.json
-a----        23.07.2026     17:24           9362 ReportGraphs.xml
-a----        23.07.2026     17:24          10776 ReportTypes.xml
-a----        23.07.2026     17:48           5120 SQLitePCLRaw.batteries_v2.dll
-a----        23.07.2026     17:48          51200 SQLitePCLRaw.core.dll
-a----        23.07.2026     17:48          36864 SQLitePCLRaw.provider.e_sqlite3.dll
-a----        23.07.2026     17:54         611088 System.Drawing.Common.dll
-a----        23.07.2026     17:48          56584 System.IO.Hashing.dll
-a----        23.07.2026     17:51         396288 ZstdSharp.dll


PS C:\Unreal5.8\Engine\Binaries\DotNET\CsvTools>

PS C:\Users\Jan> dotnet "C:\Unreal5.8\Engine\Binaries\DotNET\CsvTools/PerfReportTool.dll" -reportType ClientPerf -csvdir “C:\DelTemp” -summaryTable KeyStats -nodetailedreports -csvTable -summaryTableDataToTelemetryVerbose -reportxmlbasedir "C:\Unreal5.8\Engine\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\PerfReport" -telemetryTestIdentity “JgambleTest” -summaryTableOutputFormats csv

Give that a whirl (explicit for csv output format).

Also, just to confirm, is this a SOURCE build or an EPIC LAUNCHER variant of the engine?

OK that created it. SummaryTable.csv (306 Bytes)

I have source build 5.8.0

commit 7deeb413d3dc1fc034f48d1aacc0861301829d32 (HEAD -> release, tag: 5.8.0-release, origin/release, origin/HEAD)
Merge: 260bb2e1c561 13eea14fbd8a
Author: UnrealBot <unrealbot@noreply.users.github.com>
Date:   Wed Jun 17 12:09:03 2026 +0000

    5.8.0 release

And about the discord message " 1. So you shouldn’t need to create the DB manually. The schema service will do that upon first telemetry emission into the db."

  • I created it in the clickhouse, because otherwise I would get errors, that there is no db specified. Maybe I misconfigured something or the DB structure I custom created is wrong.’

Also, it seems like only that one line row (like in SummaryTable.csv just now) is being pushed to the db. I had 15 files of CSV benchmarks with thousands of frame values, but in the end only 15 rows was pushed, not thousands of rows. Maybe I have some bad primary key or no increment rule, idk.

OK let me review this - I’ll get back to you a little later this week as I need to switch to some other work.

RE: the database it should be created from scratch. I’ll review your server params above to see if something was missing.

>Also, it seems like only that one line row (like in SummaryTable.csv just now) is being pushed to the db

That is correct; Horde Perf Trends DOES NOT ingest raw CSV profiler data. It ingests the summarized data for a build, providing INTRA session trends. The point here is that you track regressions through trendlines - and from there you can deep dive into a INTRA session dataset.

This is an important distinction.

Ok thank you.

So the SummaryTable.HTML data cannot be viewed in Horde, that is what I originally expected is possible.
Instead it averages each report into one datapoint, and the more reports I have, the more points will be on the smoothed trend line?

And then you mean I can investigate inside an anomaly if I spot it on the Horde Performance Trends trendline, but I have to do this investigation in the local HTML reports? I cannot dive in into it in HPT.