From ca6b94ed4ddf15c9eb550a3e43ff71a9c45745e1 Mon Sep 17 00:00:00 2001 From: Marek Aufart Date: Fri, 8 Sep 2023 10:05:17 +0200 Subject: [PATCH 1/9] Add windup analysis load Adding analysis-windup package to hack dir to allow take known application analysis testcases, run analysis on Konveyor ~>0.2 and dump analysis results in api.Analysis&api.Issue format. This should help for getting samples for LSP&Windup analyzers feature parity. Signed-off-by: Marek Aufart --- Makefile | 5 +- analysis/analysis_test.go | 17 +- analysis/analyzer_defaults.go | 2 +- analysis/test_cases.go | 6 - hack/analysis-windup/analysis_test.go | 216 ++++++++++++++++++ .../analyzer_legacy_windup.go | 7 +- hack/analysis-windup/pkg.go | 27 +++ 7 files changed, 255 insertions(+), 25 deletions(-) create mode 100644 hack/analysis-windup/analysis_test.go rename {analysis => hack/analysis-windup}/analyzer_legacy_windup.go (89%) create mode 100644 hack/analysis-windup/pkg.go diff --git a/Makefile b/Makefile index a2b1902..c587648 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ VENDOR_DIR ?= /tmp/konveyor-vendor ARCH ?= amd64 MINIKUBE_IP ?= `minikube ip` +# HUB_BASE_URL="http://${MINIKUBE_IP}/hub" # Setup local minikube with tackle - work in progress (TODO: enable auth) # This is for local setup, CI uses shared github actions @@ -44,11 +45,11 @@ test-tier2: # Application analysis tests. test-analysis: - HUB_BASE_URL="http://${MINIKUBE_IP}/hub" go test -count=1 -timeout 7200s -v ./analysis/... + go test -count=1 -timeout 7200s -v ./analysis/... # Metrics. test-metrics: - HUB_BASE_URL="http://${MINIKUBE_IP}/hub" ginkgo -v ./e2e/metrics/... + ginkgo -v ./e2e/metrics/... # Add next features tests here and call the target from appropriate tier. diff --git a/analysis/analysis_test.go b/analysis/analysis_test.go index db21a86..0d9507c 100644 --- a/analysis/analysis_test.go +++ b/analysis/analysis_test.go @@ -8,7 +8,6 @@ import ( "github.com/konveyor/go-konveyor-tests/hack/addon" "github.com/konveyor/go-konveyor-tests/hack/uniq" - "github.com/konveyor/go-konveyor-tests/hack/windupreport" "github.com/konveyor/tackle2-hub/api" "github.com/konveyor/tackle2-hub/binding" "github.com/konveyor/tackle2-hub/test/assert" @@ -63,7 +62,7 @@ func TestApplicationAnalysis(t *testing.T) { // Prepare and submit the analyze task. // tc.Task.Addon = analyzerAddon tc.Task.Application = &api.Ref{ID: tc.Application.ID} - taskData := tc.Task.Data.(addon.Data) // addon / addonwindup + taskData := tc.Task.Data.(addon.Data) //for _, r := range tc.CustomRules { // taskData.Rules = append(taskData.Rules, api.Ref{ID: r.ID, Name: r.Name}) //} @@ -96,17 +95,9 @@ func TestApplicationAnalysis(t *testing.T) { var gotAnalysis api.Analysis - if tc.Task.Addon == "windup" { - // Old Windup check version parsing windup HTML report - CheckWindupReportContent(t, &tc) - - // Parse report for windup, to api.Analysis structure - gotAnalysis = windupreport.Parse(t, tc.Application.ID) - } else { - // Get LSP analysis directly form Hub API - analysisPath := binding.Path(api.AppAnalysisRoot).Inject(binding.Params{api.ID: tc.Application.ID}) - assert.Should(t, Client.Get(analysisPath, &gotAnalysis)) - } + // Get LSP analysis directly form Hub API + analysisPath := binding.Path(api.AppAnalysisRoot).Inject(binding.Params{api.ID: tc.Application.ID}) + assert.Should(t, Client.Get(analysisPath, &gotAnalysis)) // Check the analysis result (effort, issues, etc). if gotAnalysis.Effort != tc.Analysis.Effort { diff --git a/analysis/analyzer_defaults.go b/analysis/analyzer_defaults.go index 8ba939b..ea208b0 100644 --- a/analysis/analyzer_defaults.go +++ b/analysis/analyzer_defaults.go @@ -5,7 +5,7 @@ import ( "github.com/konveyor/tackle2-hub/api" ) -var AnalyzeLsp = api.Task{ +var Analyze = api.Task{ State: "Ready", // Created / Ready Data: defaultAnalyzerData, Addon: "analyzer", diff --git a/analysis/test_cases.go b/analysis/test_cases.go index f748da3..517c7ef 100644 --- a/analysis/test_cases.go +++ b/analysis/test_cases.go @@ -24,9 +24,3 @@ var Tier1TestCases = []TC{ var Tier2TestCases = []TC{ Daytrader, } - -// -// Switch analyzers: -// - AnalyzeLsp -// - AnalyzeWindup -var Analyze = AnalyzeLsp diff --git a/hack/analysis-windup/analysis_test.go b/hack/analysis-windup/analysis_test.go new file mode 100644 index 0000000..ecc53c3 --- /dev/null +++ b/hack/analysis-windup/analysis_test.go @@ -0,0 +1,216 @@ +package analysiswindup + +import ( + "fmt" + "os" + "testing" + "time" + + "github.com/konveyor/go-konveyor-tests/analysis" + "github.com/konveyor/go-konveyor-tests/hack/addonwindup" + "github.com/konveyor/go-konveyor-tests/hack/uniq" + "github.com/konveyor/go-konveyor-tests/hack/windupreport" + "github.com/konveyor/tackle2-hub/api" + "github.com/konveyor/tackle2-hub/test/assert" +) + +// Test application analysis +func TestApplicationAnalysis(t *testing.T) { + // Find right test cases for given Tier (include Tier0 always). + testCases := analysis.Tier0TestCases + _, tier1 := os.LookupEnv("TIER1") + if tier1 { + testCases = analysis.Tier1TestCases + } + _, tier2 := os.LookupEnv("TIER2") + if tier2 { + testCases = analysis.Tier2TestCases + } + // Run test cases. + for _, testcase := range testCases { + t.Run(testcase.Name, func(t *testing.T) { + // Prepare parallel execution if env variable PARALLEL is set. + tc := testcase + _, parallel := os.LookupEnv("PARALLEL") + if parallel { + t.Parallel() + } + + // Create the application. + uniq.ApplicationName(&tc.Application) + assert.Should(t, RichClient.Application.Create(&tc.Application)) + + // Prepare custom rules. + for i := range tc.CustomRules { + r := &tc.CustomRules[i] + uniq.RuleSetName(r) + // ruleFiles := []api.File{} + rules := []api.Rule{} + for _, rule := range r.Rules { + ruleFile, err := RichClient.File.Put(rule.File.Name) + assert.Should(t, err) + rules = append(rules, api.Rule{ + File: &api.Ref{ + ID: ruleFile.ID, + }, + }) + // ruleFiles = append(ruleFiles, *ruleFile) + } + r.Rules = rules + assert.Should(t, RichClient.RuleSet.Create(r)) + } + + // Prepare and submit the analyze task. + tc.Task = AnalyzeWindup + tc.Task.Application = &api.Ref{ID: tc.Application.ID} + taskData := tc.Task.Data.(addonwindup.Data) // addon / addonwindup + //for _, r := range tc.CustomRules { + // taskData.Rules = append(taskData.Rules, api.Ref{ID: r.ID, Name: r.Name}) + //} + if len(tc.Sources) > 0 { + taskData.Sources = tc.Sources + } + if len(tc.Targets) > 0 { + taskData.Targets = tc.Targets + } + //if tc.Rules.Path != "" { // TODO: better rules handling + // taskData.Rules = tc.Rules + //} + tc.Task.Data = taskData + assert.Should(t, RichClient.Task.Create(&tc.Task)) + + // Wait until task finishes + var task *api.Task + var err error + for i := 0; i < Retry; i++ { + task, err = RichClient.Task.Get(tc.Task.ID) + if err != nil || task.State == "Succeeded" || task.State == "Failed" { + break + } + time.Sleep(Wait) + } + + if task.State != "Succeeded" { + t.Errorf("Analyze Task failed. Details: %+v", task) + } + + var gotAnalysis api.Analysis + + // Old Windup check version parsing windup HTML report + CheckWindupReportContent(t, &tc) + + // Parse report for windup, to api.Analysis structure + gotAnalysis = windupreport.Parse(t, tc.Application.ID) + DumpAnalysis(t, gotAnalysis) + + // Check the analysis result (effort, issues, etc). + if gotAnalysis.Effort != tc.Analysis.Effort { + t.Errorf("Different effort error. Got %d, expected %d", gotAnalysis.Effort, tc.Analysis.Effort) + } + + //// Check the analysis issues + //if len(gotAnalysis.Issues) != len(tc.Analysis.Issues) { + // t.Errorf("Different amount of issues error. Got %d, expected %d.", len(gotAnalysis.Issues), len(tc.Analysis.Issues)) + //} + //for i, got := range gotAnalysis.Issues { + // expected := tc.Analysis.Issues[i] + // if got.Category != expected.Category || got.RuleSet != expected.RuleSet || got.Rule != expected.Rule || got.Effort != expected.Effort || !strings.HasPrefix(got.Description, expected.Description) { + // t.Errorf("\nDifferent issue error. Got %+v, expected %+v.\n\n", got, expected) + // } +// + // // Incidents check. + // if len(expected.Incidents) == 0 { + // t.Log("Skipping empty expected Incidents check.") + // break + // } + // if len(got.Incidents) != len(expected.Incidents) { + // t.Errorf("Different amount of incident error. Got %d, expected %d.", len(got.Incidents), len(expected.Incidents)) + // } + // for j, gotInc := range got.Incidents { + // expectedInc := expected.Incidents[j] + // if gotInc.File != expectedInc.File || gotInc.Line != expectedInc.Line || !strings.HasPrefix(gotInc.Message, expectedInc.Message) { + // t.Errorf("\nDifferent incident error. Got %+v, expected %+v.\n\n", gotInc, expectedInc) + // } + // } + //} +// + //// Check analysis-created Tags. + //gotApp, _ := RichClient.Application.Get(tc.Application.ID) + //for _, expected := range tc.AnalysisTags { + // found := false + // for _, got := range gotApp.Tags { + // if got.Name == expected.Name && got.Source == "Analysis" { + // found = true + // break + // } + // } + // if !found { + // t.Errorf("Missing expected tag '%s'.\n", expected.Name) + // } + //} + + // TODO(maufart): analysis tagger creates duplicate tags, not sure if it is expected, check later. + //if len(tc.AnalysisTags) != len(gotApp.Tags) { + // t.Errorf("Different Tags amount error. Got: %d, expected: %d.\n", len(gotApp.Tags), len(tc.AnalysisTags)) + //} + //found, gotAnalysisTags := 0, 0 + //for _, t := range gotApp.Tags { + // if t.Source == "Analysis" { + // gotAnalysisTags = gotAnalysisTags + 1 + // for _, expectedTag := range tc.AnalysisTags { + // if expectedTag.Name == t.Name { + // found = found + 1 + // break + // } + // } + // } + //} + //if found != len(tc.AnalysisTags) || found < gotAnalysisTags { + // t.Errorf("Analysis Tags don't match. Got:\n %v\nexpected:\n %v\n", gotApp.Tags, tc.AnalysisTags) + //} + + // Allow skip cleanup to keep applications and analysis results for debugging etc. + _, keep := os.LookupEnv("KEEP") + if keep { + return + } + // Cleanup Application. + assert.Must(t, RichClient.Application.Delete(tc.Application.ID)) + + // Cleanup custom rules and their files. + for _, r := range tc.CustomRules { + assert.Should(t, RichClient.RuleSet.Delete(r.ID)) + for _, rl := range r.Rules { + assert.Should(t, RichClient.File.Delete(rl.File.ID)) + } + } + }) + } +} + +func DumpAnalysis(t *testing.T, analysis api.Analysis) { + fmt.Println("GOT ANALYSIS DUMP:") + fmt.Printf("api.Analysis{\n") + fmt.Printf(" Effort: %d,\n", analysis.Effort) + fmt.Printf(" Issues: []api.Issue{\n") + for _, issue := range analysis.Issues { + fmt.Printf(" {\n") + fmt.Printf(" Category: \"%s\",\n", issue.Category) + fmt.Printf(" Description: \"%s\",\n", issue.Description) + fmt.Printf(" Effort: %d,\n", issue.Effort) + fmt.Printf(" RuleSet: \"%s\",\n", issue.RuleSet) + fmt.Printf(" Rule: \"%s\",\n", issue.Rule) + fmt.Printf(" Incidents: []api.Incident{\n") + for _, incident := range issue.Incidents { + fmt.Printf(" {\n") + fmt.Printf(" File: \"%s\",\n", incident.File) + fmt.Printf(" Line: \"%d\",\n", incident.Line) + fmt.Printf(" Message: \"%s\",\n", incident.Message) + fmt.Printf(" },\n") + } + fmt.Printf(" },\n") + fmt.Printf(" },\n") + } + fmt.Printf(" }\n") + fmt.Printf("}\n") +} \ No newline at end of file diff --git a/analysis/analyzer_legacy_windup.go b/hack/analysis-windup/analyzer_legacy_windup.go similarity index 89% rename from analysis/analyzer_legacy_windup.go rename to hack/analysis-windup/analyzer_legacy_windup.go index 7c5e229..781d9a7 100644 --- a/analysis/analyzer_legacy_windup.go +++ b/hack/analysis-windup/analyzer_legacy_windup.go @@ -1,4 +1,4 @@ -package analysis +package analysiswindup import ( "os" @@ -7,6 +7,7 @@ import ( "strings" "testing" + "github.com/konveyor/go-konveyor-tests/analysis" "github.com/konveyor/go-konveyor-tests/hack/addonwindup" "github.com/konveyor/tackle2-hub/api" "github.com/konveyor/tackle2-hub/test/assert" @@ -49,7 +50,7 @@ var defaultWindupData = addonwindup.Data{ }, } -func GetReportText(t *testing.T, tc *TC, path string) (text string) { +func GetReportText(t *testing.T, tc *analysis.TC, path string) (text string) { // Get report file. dirName, err := os.MkdirTemp("/tmp", tc.Name) assert.Must(t, err) @@ -67,7 +68,7 @@ func GetReportText(t *testing.T, tc *TC, path string) (text string) { return } -func CheckWindupReportContent(t *testing.T, tc *TC) { +func CheckWindupReportContent(t *testing.T, tc *analysis.TC) { // Check the report content. for path, expectedElems := range tc.ReportContent { content := GetReportText(t, tc, path) diff --git a/hack/analysis-windup/pkg.go b/hack/analysis-windup/pkg.go new file mode 100644 index 0000000..077e63c --- /dev/null +++ b/hack/analysis-windup/pkg.go @@ -0,0 +1,27 @@ +package analysiswindup + +import ( + "time" + + "github.com/konveyor/tackle2-hub/binding" + "github.com/konveyor/tackle2-hub/test/api/client" +) + +var ( + // Setup Hub API client + Client *binding.Client + RichClient *binding.RichClient + + // Analysis waiting loop 5 minutes (60 * 5s) + Retry = 100 + Wait = 5 * time.Second +) + +func init() { + // Prepare RichClient and login to Hub API (configured from env variables). + RichClient = client.PrepareRichClient() + + // Access REST client directly (some test API call need it) + Client = RichClient.Client +} + From 35cff6c6c15b47d3c324b98062cc9effb7f7b4e7 Mon Sep 17 00:00:00 2001 From: Marek Aufart Date: Fri, 8 Sep 2023 15:47:44 +0200 Subject: [PATCH 2/9] Add first sample output Signed-off-by: Marek Aufart --- ...er_sample.go => tc_pathfinder_example1.go} | 6 +- analysis/test_cases.go | 2 +- hack/analysis-windup/analysis_test.go | 6 +- hack/analysis-windup/report_notes.md | 1366 +++++++++++++++++ 4 files changed, 1373 insertions(+), 7 deletions(-) rename analysis/{tc_pathfinder_sample.go => tc_pathfinder_example1.go} (89%) create mode 100644 hack/analysis-windup/report_notes.md diff --git a/analysis/tc_pathfinder_sample.go b/analysis/tc_pathfinder_example1.go similarity index 89% rename from analysis/tc_pathfinder_sample.go rename to analysis/tc_pathfinder_example1.go index f84ce61..17f5a4c 100644 --- a/analysis/tc_pathfinder_sample.go +++ b/analysis/tc_pathfinder_example1.go @@ -2,10 +2,10 @@ package analysis import "github.com/konveyor/tackle2-hub/api" -var PathfinderSample = TC{ - Name: "Pathfinder cloud-readiness with tagger", +var PathfinderExample1 = TC{ + Name: "Pathfinder example1 cloud-readiness with tagger", Application: api.Application{ - Name: "Pathfinder", + Name: "Pathfinder example-1", Description: "Tackle Pathfinder application.", Repository: &api.Repository{ Kind: "git", diff --git a/analysis/test_cases.go b/analysis/test_cases.go index 517c7ef..0edd8d7 100644 --- a/analysis/test_cases.go +++ b/analysis/test_cases.go @@ -5,7 +5,7 @@ package analysis // List of applications with expected analysis outputs. var Tier0TestCases = []TC{ Tomcat, - PathfinderSample, + PathfinderExample1, } // diff --git a/hack/analysis-windup/analysis_test.go b/hack/analysis-windup/analysis_test.go index ecc53c3..d46acdd 100644 --- a/hack/analysis-windup/analysis_test.go +++ b/hack/analysis-windup/analysis_test.go @@ -101,7 +101,7 @@ func TestApplicationAnalysis(t *testing.T) { // Parse report for windup, to api.Analysis structure gotAnalysis = windupreport.Parse(t, tc.Application.ID) - DumpAnalysis(t, gotAnalysis) + DumpAnalysis(t, tc, gotAnalysis) // Check the analysis result (effort, issues, etc). if gotAnalysis.Effort != tc.Analysis.Effort { @@ -188,8 +188,8 @@ func TestApplicationAnalysis(t *testing.T) { } } -func DumpAnalysis(t *testing.T, analysis api.Analysis) { - fmt.Println("GOT ANALYSIS DUMP:") +func DumpAnalysis(t *testing.T, tc analysis.TC, analysis api.Analysis) { + fmt.Printf("WINDUP ANALYSIS OUTPUT FOR \"%s\":", tc.Name) fmt.Printf("api.Analysis{\n") fmt.Printf(" Effort: %d,\n", analysis.Effort) fmt.Printf(" Issues: []api.Issue{\n") diff --git a/hack/analysis-windup/report_notes.md b/hack/analysis-windup/report_notes.md new file mode 100644 index 0000000..9803f0c --- /dev/null +++ b/hack/analysis-windup/report_notes.md @@ -0,0 +1,1366 @@ +# Windup report notes + +Executed on Konveyor 0.2. + +# TIER0 + +``` +$ KEEP=1 go test -v -count=1 ./hack/analysis-windup/ +time=2023-09-08T14:54:09+02:00 level=info msg=[binding] Hub RichClient created. +time=2023-09-08T14:54:09+02:00 level=info msg=[addon] Addon (adapter) created. +time=2023-09-08T14:54:09+02:00 level=info msg=[binding] Hub RichClient created. +time=2023-09-08T14:54:10+02:00 level=info msg=[binding] |201| POST /hub/auth/login +time=2023-09-08T14:54:10+02:00 level=info msg=[binding] Hub RichClient created. +time=2023-09-08T14:54:10+02:00 level=info msg=[binding] |201| POST /hub/auth/login +time=2023-09-08T14:54:10+02:00 level=info msg=[binding] Hub RichClient created. +time=2023-09-08T14:54:11+02:00 level=info msg=[binding] |201| POST /hub/auth/login +=== RUN TestApplicationAnalysis +=== RUN TestApplicationAnalysis/Customer_Tomcat_Legacy_-_shoud_never_fail +time=2023-09-08T14:54:11+02:00 level=info msg=[binding] |201| POST /hub/applications +time=2023-09-08T14:54:11+02:00 level=info msg=[binding] |201| POST /hub/tasks +time=2023-09-08T14:54:12+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:54:17+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:54:22+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:54:27+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:54:32+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:54:38+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:54:43+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:54:48+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:54:53+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:54:59+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:55:04+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:55:09+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:55:14+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:55:19+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:55:24+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:55:30+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:55:35+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:55:40+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:55:45+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T14:55:47+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/index.html +time=2023-09-08T14:55:48+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/migration_issues.html +time=2023-09-08T14:55:48+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/ApplicationDetails_Order_Management.html +time=2023-09-08T14:55:49+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/pom_xml.html +time=2023-09-08T14:55:49+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/persistence_properties.html +Cannot match Incident $("
Hard-coded IP address

Hard-coded IP: 169.60.225.216<\/strong><\/p>

When migrating environments, hard-coded IP addresses may need to be modified or eliminated.<\/p>

").appendTo('#2-inlines'); with 'windup_ruleproviders.html#([a-z0-9-]+)' +FOUND INCIDENT: {Resource:{ID:0 CreateUser: UpdateUser: CreateTime:0001-01-01 00:00:00 +0000 UTC} File:persistence_properties.html Line:2 Message: CodeSnip: Facts:map[]} +time=2023-09-08T14:55:49+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/OrderManagementAppInitializer_java.html +time=2023-09-08T14:55:49+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/Customer_java.html +WINDUP ANALYSIS OUTPUT FOR "Customer Tomcat Legacy - shoud never fail":api.Analysis{ + Effort: 1, + Issues: []api.Issue{ + { + Category: "cloud-mandatory", + Description: "Trivial change or 1-1 library swap", + Effort: 1, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + { + File: "persistence_properties.html", + Line: "2", + Message: "", + }, + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + } +} + analysis_test.go:108: Different effort error. Got 1, expected 2 +=== RUN TestApplicationAnalysis/Pathfinder_example1_cloud-readiness_with_tagger +time=2023-09-08T14:55:49+02:00 level=info msg=[binding] |201| POST /hub/applications +time=2023-09-08T14:55:50+02:00 level=info msg=[binding] |201| POST /hub/tasks +time=2023-09-08T14:55:50+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:55:55+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:56:00+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:56:05+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:56:11+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:56:16+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:56:21+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:56:26+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:56:31+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:56:37+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:56:42+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:56:47+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:56:52+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:56:57+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:57:03+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:57:08+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:57:13+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:57:18+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:57:23+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:57:29+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:57:34+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T14:57:35+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/index.html +time=2023-09-08T14:57:37+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/migration_issues.html +time=2023-09-08T14:57:37+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/ApplicationDetails_tackle_pathfinder.html +time=2023-09-08T14:57:37+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/pom_xml.html +time=2023-09-08T14:57:38+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/MavenWrapperDownloader_java.html +FOUND INCIDENT: {Resource:{ID:0 CreateUser: UpdateUser: CreateTime:0001-01-01 00:00:00 +0000 UTC} File:MavenWrapperDownloader_java.html Line:111 Message: CodeSnip: Facts:map[]} +FOUND INCIDENT: {Resource:{ID:0 CreateUser: UpdateUser: CreateTime:0001-01-01 00:00:00 +0000 UTC} File:MavenWrapperDownloader_java.html Line:78 Message: CodeSnip: Facts:map[]} +FOUND INCIDENT: {Resource:{ID:0 CreateUser: UpdateUser: CreateTime:0001-01-01 00:00:00 +0000 UTC} File:MavenWrapperDownloader_java.html Line:50 Message: CodeSnip: Facts:map[]} +FOUND INCIDENT: {Resource:{ID:0 CreateUser: UpdateUser: CreateTime:0001-01-01 00:00:00 +0000 UTC} File:MavenWrapperDownloader_java.html Line:60 Message: CodeSnip: Facts:map[]} +FOUND INCIDENT: {Resource:{ID:0 CreateUser: UpdateUser: CreateTime:0001-01-01 00:00:00 +0000 UTC} File:MavenWrapperDownloader_java.html Line:55 Message: CodeSnip: Facts:map[]} +time=2023-09-08T14:57:38+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/maven_wrapper_properties.html +time=2023-09-08T14:57:38+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/application_properties.html +time=2023-09-08T14:57:38+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/microprofile_config_properties.html +time=2023-09-08T14:57:38+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/AssessmentsResource_java.html +time=2023-09-08T14:57:39+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/QuestionnairesResource_java.html +time=2023-09-08T14:57:39+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/TranslatorResource_java.html +time=2023-09-08T14:57:39+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/ApplicationDto_java.html +time=2023-09-08T14:57:39+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/AssessmentCreateCommand_java.html +time=2023-09-08T14:57:39+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/AssessmentSvc_java.html +time=2023-09-08T14:57:40+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/BulkCreateSvc_java.html +time=2023-09-08T14:57:40+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/TranslatorSvc_java.html +time=2023-09-08T14:57:40+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/AssessmentCategory_java.html +time=2023-09-08T14:57:40+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/AssessmentQuestion_java.html +time=2023-09-08T14:57:41+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/AssessmentQuestionnaire_java.html +time=2023-09-08T14:57:41+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/AssessmentSingleOption_java.html +time=2023-09-08T14:57:41+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/AssessmentStakeholder_java.html +time=2023-09-08T14:57:41+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/AssessmentStakeholdergroup_java.html +time=2023-09-08T14:57:41+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/AssessmentBulk_java.html +time=2023-09-08T14:57:42+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/AssessmentBulkApplication_java.html +time=2023-09-08T14:57:42+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/TranslatedText_java.html +time=2023-09-08T14:57:42+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/Category_java.html +time=2023-09-08T14:57:42+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/Question_java.html +time=2023-09-08T14:57:42+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/Questionnaire_java.html +time=2023-09-08T14:57:43+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/reports/SingleOption_java.html +WINDUP ANALYSIS OUTPUT FOR "Pathfinder example1 cloud-readiness with tagger":api.Analysis{ + Effort: 5, + Issues: []api.Issue{ + { + Category: "cloud-mandatory", + Description: "Trivial change or 1-1 library swap", + Effort: 5, + RuleSet: "", + Rule: "local-storage-00001", + Incidents: []api.Incident{ + { + File: "MavenWrapperDownloader_java.html", + Line: "111", + Message: "", + }, + { + File: "MavenWrapperDownloader_java.html", + Line: "78", + Message: "", + }, + { + File: "MavenWrapperDownloader_java.html", + Line: "50", + Message: "", + }, + { + File: "MavenWrapperDownloader_java.html", + Line: "60", + Message: "", + }, + { + File: "MavenWrapperDownloader_java.html", + Line: "55", + Message: "", + }, + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + } +} +``` + +## TIER1 + +``` +$ TIER1=1 KEEP=1 go test -v -count=1 ./hack/analysis-windup/ +time=2023-09-08T15:02:06+02:00 level=info msg=[binding] Hub RichClient created. +time=2023-09-08T15:02:06+02:00 level=info msg=[addon] Addon (adapter) created. +time=2023-09-08T15:02:06+02:00 level=info msg=[binding] Hub RichClient created. +time=2023-09-08T15:02:07+02:00 level=info msg=[binding] |201| POST /hub/auth/login +time=2023-09-08T15:02:07+02:00 level=info msg=[binding] Hub RichClient created. +time=2023-09-08T15:02:08+02:00 level=info msg=[binding] |201| POST /hub/auth/login +time=2023-09-08T15:02:08+02:00 level=info msg=[binding] Hub RichClient created. +time=2023-09-08T15:02:08+02:00 level=info msg=[binding] |201| POST /hub/auth/login +=== RUN TestApplicationAnalysis +=== RUN TestApplicationAnalysis/Petclinic_cloud-readiness_with_tagger_main +time=2023-09-08T15:02:08+02:00 level=info msg=[binding] |201| POST /hub/applications +time=2023-09-08T15:02:09+02:00 level=info msg=[binding] |201| POST /hub/tasks +time=2023-09-08T15:02:09+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:02:14+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:02:19+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:02:25+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:02:30+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:02:35+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:02:40+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:02:46+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:02:51+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:02:56+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:03:01+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:03:06+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:03:12+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:03:17+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:03:22+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:03:27+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:03:32+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:03:38+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:03:43+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:03:48+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:03:53+02:00 level=info msg=[binding] |200| GET /hub/tasks/3 +time=2023-09-08T15:03:54+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/index.html +time=2023-09-08T15:03:58+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/index.html +time=2023-09-08T15:03:59+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/migration_issues.html +time=2023-09-08T15:03:59+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/ApplicationDetails_Spring_Framework_Petclinic.html +time=2023-09-08T15:03:59+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/pom_xml.html +time=2023-09-08T15:04:00+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/MavenWrapperDownloader_java.html +FOUND INCIDENT: {Resource:{ID:0 CreateUser: UpdateUser: CreateTime:0001-01-01 00:00:00 +0000 UTC} File:MavenWrapperDownloader_java.html Line:60 Message: CodeSnip: Facts:map[]} +FOUND INCIDENT: {Resource:{ID:0 CreateUser: UpdateUser: CreateTime:0001-01-01 00:00:00 +0000 UTC} File:MavenWrapperDownloader_java.html Line:50 Message: CodeSnip: Facts:map[]} +FOUND INCIDENT: {Resource:{ID:0 CreateUser: UpdateUser: CreateTime:0001-01-01 00:00:00 +0000 UTC} File:MavenWrapperDownloader_java.html Line:111 Message: CodeSnip: Facts:map[]} +FOUND INCIDENT: {Resource:{ID:0 CreateUser: UpdateUser: CreateTime:0001-01-01 00:00:00 +0000 UTC} File:MavenWrapperDownloader_java.html Line:55 Message: CodeSnip: Facts:map[]} +FOUND INCIDENT: {Resource:{ID:0 CreateUser: UpdateUser: CreateTime:0001-01-01 00:00:00 +0000 UTC} File:MavenWrapperDownloader_java.html Line:78 Message: CodeSnip: Facts:map[]} +time=2023-09-08T15:04:00+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/maven_wrapper_properties.html +time=2023-09-08T15:04:00+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/messages_properties.html +time=2023-09-08T15:04:00+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/messages_de_properties.html +time=2023-09-08T15:04:00+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/messages_en_properties.html +time=2023-09-08T15:04:01+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/messages_es_properties.html +time=2023-09-08T15:04:01+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/business_config_xml.html +time=2023-09-08T15:04:01+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/data_access_properties.html +time=2023-09-08T15:04:01+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/datasource_config_xml.html +time=2023-09-08T15:04:01+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/mvc_core_config_xml.html +time=2023-09-08T15:04:01+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/mvc_view_config_xml.html +time=2023-09-08T15:04:02+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/tools_config_xml.html +time=2023-09-08T15:04:02+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/mvc_test_config_xml.html +time=2023-09-08T15:04:02+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/Owner_java.html +time=2023-09-08T15:04:02+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/Pet_java.html +time=2023-09-08T15:04:02+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/PetType_java.html +time=2023-09-08T15:04:03+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/Specialty_java.html +time=2023-09-08T15:04:03+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/Vet_java.html +time=2023-09-08T15:04:03+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/Visit_java.html +time=2023-09-08T15:04:03+02:00 level=info msg=[binding] |200| GET /hub/applications/3/bucket/windup/report/reports/CallMonitoringAspect_java.html +WINDUP ANALYSIS OUTPUT FOR "Petclinic cloud-readiness with tagger main":api.Analysis{ + Effort: 5, + Issues: []api.Issue{ + { + Category: "cloud-mandatory", + Description: "Trivial change or 1-1 library swap", + Effort: 5, + RuleSet: "", + Rule: "local-storage-00001", + Incidents: []api.Incident{ + { + File: "MavenWrapperDownloader_java.html", + Line: "60", + Message: "", + }, + { + File: "MavenWrapperDownloader_java.html", + Line: "50", + Message: "", + }, + { + File: "MavenWrapperDownloader_java.html", + Line: "111", + Message: "", + }, + { + File: "MavenWrapperDownloader_java.html", + Line: "55", + Message: "", + }, + { + File: "MavenWrapperDownloader_java.html", + Line: "78", + Message: "", + }, + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + { + Category: "information", + Description: "Info", + Effort: 0, + RuleSet: "", + Rule: "", + Incidents: []api.Incident{ + }, + }, + } +} +=== RUN TestApplicationAnalysis/Petclinic_legacy_cloud-readiness_with_tagger_and_hazelcast_custom_rules +time=2023-09-08T15:04:03+02:00 level=info msg=[binding] |201| POST /hub/applications + error.go:12: stat ./data/hz.windup.xml: no such file or directory +time=2023-09-08T15:04:03+02:00 level=info msg=[binding] |400| POST /hub/rulesets + error.go:12: POST /hub/rulesets failed: 400(Bad Request) body: {"error":"Key: 'RuleSet.Image.ID' Error:Field validation for 'ID' failed on the 'required' tag"} +time=2023-09-08T15:04:04+02:00 level=info msg=[binding] |201| POST /hub/tasks +time=2023-09-08T15:04:04+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:04:09+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:04:14+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:04:20+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:04:25+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:04:30+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:04:35+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:04:42+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:04:47+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:04:52+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:04:58+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:05:03+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:05:08+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:05:13+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:05:19+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:05:24+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:05:29+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:05:34+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:05:39+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:05:45+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:05:50+02:00 level=info msg=[binding] |200| GET /hub/tasks/4 +time=2023-09-08T15:05:51+02:00 level=info msg=[binding] |200| GET /hub/applications/4/bucket/windup/report/index.html + analyzer_legacy_windup.go:78: Error report contect check for /windup/report/index.html. Cannot find 12 + story points in + + + + + + + Application List + + + + + + + body.viewAppList .apps{ margin: 0 2ex; } + + body.viewAppList .apps .appInfo { + border-bottom: 1px solid gray; + overflow: auto; width: 100%; /* clearing */ + padding: 1ex 0 1ex; + } + body.viewAppList .apps .appInfo .stats { float: right; width: 30%; padding: 0.4ex 0; } + body.viewAppList .apps .appInfo .stats .effortPoints { float: left; width: 160px; padding: 0.3ex 0.2em 0; font-size: 33pt; } + body.viewAppList .apps .appInfo .stats .effortPointsspan { display: block; margin: auto; text-align: center; } + body.viewAppList .apps .appInfo .stats .effortPoints.points { line-height: 1; color: #294593; } + body.viewAppList .apps .appInfo .stats .effortPoints.legend { font-size: 7pt; } + body.viewAppList .apps .appInfo .stats .effortPoints.shared, + body.viewAppList .apps .appInfo .stats .effortPoints.unique { width: 90px; font-size: 18pt; margin-top: 23px; } + /* Hide the "cell" if the app has 0 shared points". */ + body.viewAppList .apps .appInfo.pointsShared0 .stats .effortPoints.shared, + body.viewAppList .apps .appInfo.pointsShared0 .stats .effortPoints.unique { visibility: hidden; } + /* Hide the whole "column" if there's no virtual app (i.e. no shared-libs app). */ + body.viewAppList.noVirtualApp .apps .appInfo.stats .effortPoints.shared, + body.viewAppList.noVirtualApp .apps .appInfo.stats .effortPoints.unique { display: none; } + body.viewAppList .apps .appInfo .stats .effortPoints.shared .points, + body.viewAppList .apps .appInfo .stats .effortPoints.unique .points { color: #8491a8; /* Like normal, but grayed. */ } + + body.viewAppList .apps .appInfo .stats .incidentsCount { float: left; margin:0 2ex;} + body.viewAppList .apps .appInfo .stats .incidentsCount table tr.total td { border-top: 1px solid silver; } + body.viewAppList .apps .appInfo .stats .incidentsCount .count { text-align: right; padding-right: 1ex; min-width: 7.4ex; } + body.viewAppList .apps .appInfo .traits { margin-left: 0px; width: 70%;} + body.viewAppList .apps .appInfo .traits .fileName { padding: 0.0ex 0em 0.2ex; font-size: 18pt; /* color: #008cba; (Default BS link color) */ } + body.viewAppList .apps .appInfo .traits .techs { } + + /* Specifics for virtual apps. */ + body.viewAppList .apps .virtual .appInfo .traits .fileName { color: #477280; } + + body.viewAppList .apps .appInfo:first-of-type { border-top: 1px solid gray; } + + + + + var TARGET_RUNTIME = JSON.parse('[{"id":"eap","name":"JBoss EAP","description":"Red Hat JBoss Enterprise Application Platform","supported":["Java EE","JBoss Web XML","JMS Connection Factory","JAXB","Enterprise Web Services","CDI","JMS Topic","JSF Page","WS Metadata","Java EE Security","JAX-RS","Clustering EJB","Common Annotations","JAXR","Clustering Web Session","Stateful (SFSB)","SOAP (SAAJ)","Servlet","JPA named queries","EJB XML*","Java EE Batch","JSON-B","JSP Page","Persistence units","Stateless (SLSB)","Message (MDB)","JCA","JAX-WS","Java EE JSON-P","JMS Queue","Java EE Batch API","JMS","Bean Validation","JavaMail","MEJB","JACC","JBoss EJB XML","JTA","EAR","JPA XML*","JPA","EJB","JPA entities"],"unsuitable":["WebSphere Web XML","WebLogic Web XML","WebSphere EJB Ext","JAX-RPC","WebSphere WS Extension","WebSphere WS Binding","RMI","WebSphere EJB"],"neutral":["Spring MVC","JDBC XA datasources","Bouncy Castle","Manifest","Properties","Spring","WSDL","Java Source","JDBC datasources","Swagger","Maven XML","Web XML*","Spring Security"]},{"id":"jws","name":"JWS","description":"Red Hat JBoss Web Server","supported":["JSP Page","Bean Validation","JAXB","Servlet","JSF Page"],"unsuitable":["Java EE","WebSphere Web XML","JBoss Web XML","JMS Connection Factory","Enterprise Web Services","CDI","JMS Topic","WS Metadata","Java EE Security","JAX-RS","Clustering EJB","Common Annotations","JAXR","Clustering Web Session","Stateful (SFSB)","SOAP (SAAJ)","WebSphere EJB Ext","JPA named queries","EJB XML*","JAX-RPC","Java EE Batch","WebSphere EJB","Stateless (SLSB)","Message (MDB)","JCA","JAX-WS","Java EE JSON-P","WebSphere WS Extension","JMS Queue","WebSphere WS Binding","RMI","Java EE Batch API","JMS","JavaMail","MEJB","JACC","JBoss EJB XML","JTA","WebLogic Web XML","EAR","JPA XML*","JPA","EJB","JPA entities"],"neutral":["Java Source","JDBC datasources","Manifest","Maven XML","Properties","Web XML*"]}]'); + + + + + + + + + + + + + + Migration Toolkit for Applications + + + + + + All Applications + + + + + + + + Technologies + + + + + + + + About + + + + + + Send Feedback + + + + + + + + var FEEDBACK_JS_ADDED = false; + var FEEDBACK_FORM_TRIGGER = null; + + function displayFeedbackForm() { + FEEDBACK_FORM_TRIGGER(); + } + + window.ATL_JQ_PAGE_PROPS = { + "triggerFunction": function(showCollectorDialog) { + FEEDBACK_FORM_TRIGGER = showCollectorDialog; + } + }; + + document.addEventListener("DOMContentLoaded", function(event) { + jQuery(".jiraFeedbackTrigger").click(function(e) { + e.preventDefault(); + displayFeedbackForm(); + }); + }); + + + + var script= document.createElement("script"); + script.type= "text/javascript"; + script.src= "reports/resources/js/navbar.js"; + document.body.appendChild(script); + + + + + + + + + + Application List + + + + + + + + + + + + + +