pkg/degradation-detector/setting/kotlinSettings.go (137 lines of code) (raw):
package setting
import (
"encoding/json"
"os"
"path/filepath"
detector "github.com/JetBrains/ij-perf-report-aggregator/pkg/degradation-detector"
)
func extractStrings(data any) []string {
var result []string
switch v := data.(type) {
case string:
result = append(result, v)
case []any:
for _, item := range v {
result = append(result, extractStrings(item)...)
}
case map[string]any:
for _, item := range v {
result = append(result, extractStrings(item)...)
}
}
return result
}
func getKotlinProjects() ([]string, error) {
var result any
env := os.Getenv("KO_DATA_PATH")
projectsFile := "projects/kotlin_projects.json"
var kotlinProjectsFilePath string
if env == "" {
kotlinProjectsFilePath = filepath.Join("..", "..", "..", "cmd", "degradation-analyzer", "kodata", projectsFile)
} else {
kotlinProjectsFilePath = filepath.Join(env, projectsFile)
}
content, err := os.ReadFile(kotlinProjectsFilePath)
if err != nil {
return nil, err
}
_ = json.Unmarshal(content, &result)
return extractStrings(result), nil
}
func GenerateKotlinSettings() []detector.PerformanceSettings {
testNames, _ := getKotlinProjects()
tests := generateKotlinTests(testNames)
metrics := []string{
"completion#mean_value", "findUsages#mean_value",
"localInspections#mean_value",
"completion#firstElementShown#mean_value", "evaluateExpression#mean_value",
"performInlineRename#mean_value", "startInlineRename#mean_value",
"prepareForRename#mean_value", "fus_refactoring_usages_searched", "execute_editor_optimizeimports", "execute_editor_optimizeimports#mean_value",
"localInspections_cold#mean_value", "localInspections_hot#mean_value",
"execute_editor_gotodeclaration_cold#mean_value", "execute_editor_gotodeclaration_hot#mean_value",
"convertJavaToKotlin", "moveFiles#mean_value", "moveFiles_back#mean_value", "moveDeclarations#mean_value", "moveDeclarations_back#mean_value",
}
aliases := map[string]string{
"completion#mean_value": "completion",
"completion#firstElementShown#mean_value": "completion",
"findUsages#mean_value": "findUsages",
"localInspections#mean_value": "highlighting",
"performInlineRename#mean_value": "rename",
"prepareForRename#mean_value": "rename",
"startInlineRename#mean_value": "rename",
"fus_refactoring_usages_searched": "rename",
"execute_editor_optimizeimports": "optimizeimports",
"execute_editor_optimizeimports#mean_value": "optimizeimports",
"evaluateExpression#mean_value": "debugger",
"execute_editor_gotodeclaration_hot#mean_value": "gotodeclaration_hot_cache",
"execute_editor_gotodeclaration_cold#mean_value": "gotodeclaration_cold_cache",
"localInspections_cold#mean_value": "highlighting_cold_cache",
"localInspections_hot#mean_value": "highlighting_hot_cache",
"convertJavaToKotlin": "J2K",
"moveFiles#mean_value": "moveFiles",
}
settings := make([]detector.PerformanceSettings, 0, len(testNames)*len(metrics)*2)
for _, test := range tests {
daysToCheck := -1
for _, metric := range metrics {
alias := getAlias(metric, aliases)
settings = append(settings, detector.PerformanceSettings{
Db: "perfintDev",
Table: "kotlin",
Project: test,
MetricAlias: alias,
BaseSettings: detector.BaseSettings{
Machine: "intellij-linux-hw-hetzner%",
Metric: metric,
Branch: "master",
SlackSettings: detector.SlackSettings{
Channel: "kotlin-plugin-perf-tests",
ProductLink: "kotlin",
},
AnalysisSettings: detector.AnalysisSettings{
ReportType: detector.DegradationEvent,
DaysToCheckMissing: daysToCheck,
},
},
})
}
}
for _, test := range tests {
for _, metric := range metrics {
alias := getAlias(metric, aliases)
settings = append(settings, detector.PerformanceSettings{
Db: "perfintDev",
Table: "kotlin",
Project: test,
MetricAlias: alias,
BaseSettings: detector.BaseSettings{
Machine: "intellij-linux-hw-hetzner%",
Metric: metric,
Branch: "kt-master",
SlackSettings: detector.SlackSettings{
Channel: "kotlin-plugin-perf-tests-kt-master",
ProductLink: "kotlin",
},
AnalysisSettings: detector.AnalysisSettings{
ReportType: detector.DegradationEvent,
},
},
})
}
}
return settings
}
func generateKotlinTests(tests []string) []string {
k2tests := make([]string, 0, len(tests))
for _, test := range tests {
k2tests = append(k2tests, test+"_k2")
}
return k2tests
}
func getAlias(metric string, aliases map[string]string) string {
alias, ok := aliases[metric]
if !ok {
alias = metric
}
return alias
}