1+ package org.cpuinfofetcher
2+ import org.cpuinfofetcher.utils.Helpers
3+ import org.dflib.DataFrame
4+ import java.time.LocalDateTime
5+ import static org.dflib.Exp.$col
6+
7+ /**
8+ * Adds default TDP values to the specifications DataFrame.
9+ *
10+ * Groups by 'intended_usage', computes averages for cores, threads,
11+ * and TDP, adds a row for "unknown" usage, and updates the DataFrame with default entries.
12+ *
13+ * @param specifications the input DataFrame
14+ * @return the updated DataFrame with default TDP values
15+ */
16+ static DataFrame computeDefaultTdps (DataFrame specifications ) {
17+ DataFrame aggregatedDf = specifications. group(' intended_usage' ). agg(
18+ $col(' intended_usage' ). first(). as(' intended_usage' ),
19+ $col(' cores' ). castAsInt(). avg(). as(" avg_cores" ),
20+ $col(' threads' ). castAsInt(). avg(). as(" avg_threads" ),
21+ $col(' tdp (W)' ). castAsDouble(). avg(). as(" avg_tdp" ))
22+
23+ DataFrame local_server_rows = aggregatedDf. rows({ it. get(' intended_usage' ) == ' local' || it. get(' intended_usage' ) == ' server' })
24+ .select()
25+
26+ Double unknown_avg_cores = (local_server_rows. sum { it. get(' avg_cores' ) } as Double ) / local_server_rows. height()
27+ Double unknown_avg_threads = (local_server_rows. sum { it. get(' avg_threads' ) } as Double ) / local_server_rows. height()
28+ Double unknown_avg_tdp = (local_server_rows. sum { it. get(' avg_tdp' ) } as Double ) / local_server_rows. height()
29+
30+ aggregatedDf = aggregatedDf. addRow([
31+ " intended_usage" : " unknown" ,
32+ " avg_cores" : unknown_avg_cores,
33+ " avg_threads" : unknown_avg_threads,
34+ " avg_tdp" : unknown_avg_tdp
35+
36+ ])
37+
38+ for (int i = 0 ; i < aggregatedDf. height(); i++ ) {
39+ DataFrame row = aggregatedDf. rows(i). select()
40+ Double avgThreads = row. get(" avg_threads" , 0 ) as Double
41+ Double avgCores = row. get(" avg_cores" , 0 ) as Double
42+ Double avgtdp = row. get(" avg_tdp" , 0 ) as Double
43+ Double computedThreads = avgCores != 0 ? avgThreads / avgCores : 0
44+ String intended_usage = row. get(" intended_usage" , 0 )
45+ specifications = specifications. addRow([
46+ ' product_id' : " default $intended_usage " ,
47+ ' name' : " default $intended_usage " ,
48+ " time" : LocalDateTime . now(). toString(),
49+ ' source' : " default $intended_usage " ,
50+ " intended_usage" : " default $intended_usage " ,
51+ ' tdp (W)' : Helpers . round(avgtdp),
52+ " cores" : 1 ,
53+ " threads" : Helpers . round(computedThreads)
54+ ])
55+ }
56+
57+ return specifications
58+ }
0 commit comments