Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions cmd/analyze-bin.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ func (a *analyzeCommand) RunAnalysisContainerless(ctx context.Context) error {
if a.enableDefaultRulesets {
a.rules = append(a.rules, filepath.Join(a.kantraDir, RulesetsLocation))
}
providerConditions := map[string][]provider.ConditionsByCap{}

progressMode.Printf(" ✓ Started rules engine\n")

Expand All @@ -273,14 +274,28 @@ func (a *analyzeCommand) RunAnalysisContainerless(ctx context.Context) error {
for _, f := range a.rules {
operationalLog.Info("parsing rules for analysis", "rules", f)

internRuleSet, internNeedProviders, err := parser.LoadRules(f)
internRuleSet, internNeedProviders, provConditions, err := parser.LoadRules(f)
if err != nil {
a.log.Error(err, "unable to parse all the rules for ruleset", "file", f)
}
ruleSets = append(ruleSets, internRuleSet...)
for k, v := range internNeedProviders {
needProviders[k] = v
}
for k, v := range provConditions {
if _, ok := providerConditions[k]; !ok {
providerConditions[k] = []provider.ConditionsByCap{}
}
providerConditions[k] = append(providerConditions[k], v...)
}
}

for name, conditions := range providerConditions {
if provider, ok := needProviders[name]; ok {
if err := provider.Prepare(ctx, conditions); err != nil {
errLog.Error(err, "unable to prepare provider", "provider", name)
}
}
}
operationalLog.Info("[TIMING] Rule loading complete", "duration_ms", time.Since(startRuleLoading).Milliseconds())

Expand Down Expand Up @@ -314,8 +329,8 @@ func (a *analyzeCommand) RunAnalysisContainerless(ctx context.Context) error {

// Cancel progress context and wait for goroutine to finish
if progressMode.IsEnabled() {
progressCancel() // This closes the Events() channel
<-progressDone // Wait for goroutine to finish
progressCancel() // This closes the Events() channel
<-progressDone // Wait for goroutine to finish
}

engineSpan.End()
Expand Down
38 changes: 27 additions & 11 deletions cmd/analyze-hybrid.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ func (a *analyzeCommand) setupNetworkProvider(ctx context.Context, providerName
providerConfig := provider.Config{
Name: providerName,
Address: fmt.Sprintf("localhost:%d", provInit.port), // Connect to containerized provider
BinaryPath: "", // Empty = network mode
BinaryPath: "", // Empty = network mode
InitConfig: []provider.InitConfig{
{
Location: util.SourceMountPath, // Path inside provider container
Expand Down Expand Up @@ -396,8 +396,8 @@ func (a *analyzeCommand) setupBuiltinProviderHybrid(ctx context.Context, additio
Name: "builtin",
InitConfig: []provider.InitConfig{
{
Location: a.input,
AnalysisMode: provider.AnalysisMode(a.mode),
Location: a.input,
AnalysisMode: provider.AnalysisMode(a.mode),
ProviderSpecificConfig: map[string]interface{}{
// Don't set excludedDirs - let analyzer-lsp use default exclusions
// (node_modules, vendor, dist, build, target, .git, .venv, venv)
Expand Down Expand Up @@ -741,27 +741,34 @@ func (a *analyzeCommand) RunAnalysisHybridInProcess(ctx context.Context) error {

// Parallelize rule loading across multiple rulesets
type ruleLoadResult struct {
rulePath string
ruleSets []engine.RuleSet
providers map[string]provider.InternalProviderClient
err error
rulePath string
ruleSets []engine.RuleSet
providers map[string]provider.InternalProviderClient
err error
}

var ruleWg sync.WaitGroup
resultChan := make(chan ruleLoadResult, len(a.rules))

providerConditions := map[string][]provider.ConditionsByCap{}
// Load each ruleset in parallel
for _, f := range a.rules {
ruleWg.Add(1)
go func(rulePath string) {
defer ruleWg.Done()
a.log.Info("parsing rules for analysis", "rules", rulePath)

internRuleSet, internNeedProviders, err := ruleParser.LoadRules(rulePath)
internRuleSet, internNeedProviders, provConditions, err := ruleParser.LoadRules(rulePath)
if err != nil {
a.log.Error(err, "unable to parse all the rules for ruleset", "file", rulePath)
}

for k, v := range provConditions {
if _, ok := providerConditions[k]; !ok {
providerConditions[k] = []provider.ConditionsByCap{}
}
providerConditions[k] = append(providerConditions[k], v...)
}

Comment thread
pranavgaikwad marked this conversation as resolved.
Outdated
resultChan <- ruleLoadResult{
rulePath: rulePath,
ruleSets: internRuleSet,
Expand Down Expand Up @@ -805,6 +812,15 @@ func (a *analyzeCommand) RunAnalysisHybridInProcess(ctx context.Context) error {

a.log.Info("[TIMING] Rule loading complete", "duration_ms", time.Since(startRuleLoading).Milliseconds())

// prpare the providers
Comment thread
pranavgaikwad marked this conversation as resolved.
for name, conditions := range providerConditions {
if provider, ok := needProviders[name]; ok {
if err := provider.Prepare(ctx, conditions); err != nil {
errLog.Error(err, "unable to prepare provider", "provider", name)
}
}
}

// Start dependency analysis for full analysis mode
wg := &sync.WaitGroup{}
var depSpan trace.Span
Expand Down Expand Up @@ -838,8 +854,8 @@ func (a *analyzeCommand) RunAnalysisHybridInProcess(ctx context.Context) error {

// Cancel progress context and wait for goroutine to finish
if progressMode.IsEnabled() {
progressCancel() // This closes the Events() channel
<-progressDone // Wait for goroutine to finish
progressCancel() // This closes the Events() channel
<-progressDone // Wait for goroutine to finish
}

engineSpan.End()
Expand Down
6 changes: 5 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -135,10 +135,14 @@ require (
github.com/bombsimon/logrusr/v3 v3.1.0
github.com/codingconcepts/env v0.0.0-20200821220118-a8fbf8d84482
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/konveyor/analyzer-lsp v0.8.1-alpha.2.0.20251031191139-321209b0bb21
github.com/konveyor/analyzer-lsp v0.8.1-alpha.2.0.20251107235035-7470a4a226f4
github.com/konveyor/analyzer-lsp/external-providers/java-external-provider v0.0.0-20251031191139-321209b0bb21
github.com/shopspring/decimal v1.4.0 // indirect
github.com/sirupsen/logrus v1.9.3
github.com/spf13/pflag v1.0.7 // indirect
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
)

replace github.com/konveyor/analyzer-lsp => github.com/pranavgaikwad/analyzer-lsp v0.0.0-20251121163454-ab0fba51e71c

replace github.com/konveyor/analyzer-lsp/external-providers/java-external-provider => github.com/pranavgaikwad/analyzer-lsp/external-providers/java-external-provider v0.0.0-20251121163454-ab0fba51e71c
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -140,10 +140,6 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konveyor/analyzer-lsp v0.8.1-alpha.2.0.20251031191139-321209b0bb21 h1:jFr01QAcEz6u0Afy2tMPvWGVaV5oIuI3cdXMxVKP7NA=
github.com/konveyor/analyzer-lsp v0.8.1-alpha.2.0.20251031191139-321209b0bb21/go.mod h1:tZkfGRokJZqtmNVeEPIFlxltZhZXXMM5g2NNdxmhTXM=
github.com/konveyor/analyzer-lsp/external-providers/java-external-provider v0.0.0-20251031191139-321209b0bb21 h1:UAvonakPIqBT0q3Es1Un9rngf8d6HdtcYABDXCETWsU=
github.com/konveyor/analyzer-lsp/external-providers/java-external-provider v0.0.0-20251031191139-321209b0bb21/go.mod h1:QheVeScOOoCMuWMEYO9ypHgoasRaYddedh9cxWJwn94=
github.com/konveyor/asset-generation v0.2.2 h1:bzg4wDO3M4NxayS3b7SKk0f6Ai2MP/mioCZozhphKfw=
github.com/konveyor/asset-generation v0.2.2/go.mod h1:X5K2VuEV+PEBAI5O+9mNVDtCW4vFWDvFYRThpea+56U=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
Expand Down Expand Up @@ -192,6 +188,10 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pranavgaikwad/analyzer-lsp v0.0.0-20251121163454-ab0fba51e71c h1:pC4bFnmk1Himcru8TAP0OKuNdTzeNgvtcGVDBru6kkk=
github.com/pranavgaikwad/analyzer-lsp v0.0.0-20251121163454-ab0fba51e71c/go.mod h1:tZkfGRokJZqtmNVeEPIFlxltZhZXXMM5g2NNdxmhTXM=
github.com/pranavgaikwad/analyzer-lsp/external-providers/java-external-provider v0.0.0-20251121163454-ab0fba51e71c h1:oHk3a587xds/WafLQUvmas8tRfyqHiTWzvAGN2hNRVk=
github.com/pranavgaikwad/analyzer-lsp/external-providers/java-external-provider v0.0.0-20251121163454-ab0fba51e71c/go.mod h1:Ec+miOKXTYjs4lR3UdA6zjV2FhuZvxuyDQn8VxBOkU4=
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
Expand Down