Skip to content

feat: support vector databases and integrate visual management tools - #82

Merged
AnkanSaha merged 2 commits into
mainfrom
maintainer/ankan
Jun 26, 2026
Merged

feat: support vector databases and integrate visual management tools#82
AnkanSaha merged 2 commits into
mainfrom
maintainer/ankan

Conversation

@AnkanSaha

@AnkanSaha AnkanSaha commented Jun 26, 2026

Copy link
Copy Markdown
Member

Summary

This PR introduces support for vector databases (Qdrant, Milvus, Weaviate, Chroma, pgvector, Redis Stack, Elasticsearch, Opensearch, Vespa, Typesense) alongside their management tools (Attu, Kibana, OpenSearch Dashboards). It also restructures categories and removes obsolete npm legacy installers.

Changes

  • Removed entire legacy npm folder installation process.
  • Added vector databases config configurations in selectors.
  • Enhanced port mappings and data persistence options for vector DBs.
  • Added standalone tool scripts for launching Attu, Kibana, and OpenSearch Dashboards in parallel with running DB engines.
  • Refactored console Banner to version 9.20.44-stable.

Verification

  • Run go run main.go to test database launch categories.

- Updated SysRequirement.go to improve disk space checking logic.
- Expanded ListDatabaseImages and ListContainDBVolumes in docker.go to include vector databases and their management tools.
- Improved InstallDocker function in docker_installation.go for better user guidance.
- Added support for new tools: Attu, Kibana, and OpenSearch Dashboards in BaseCaseHandler.go and AfterContainerToolInstaller.go.
- Refactored SelectDatabase function in DatabaseSelector.go to categorize databases for easier selection.
- Enhanced StartContainer function in StartContainer.go to support new vector databases and their configurations.
- Introduced new tools for managing Attu, Kibana, and OpenSearch Dashboards with dedicated functions.
- Added codebase-map.md to document the project structure and modules.
@AnkanSaha AnkanSaha self-assigned this Jun 26, 2026
@github-actions github-actions Bot changed the title Enhance database support and tools integration feat: support vector databases and integrate visual management tools Jun 26, 2026
@github-actions

Copy link
Copy Markdown

🤖 Review Buddy - General Code Review

👥 Attention: @AnkanSaha

Arre @AnkanSaha bhaiya! Ye kya bawasir code likh diye ho? 🤦‍♂️

Database support badhane chale the, par tumne toh pure codebase ko ek naya 'Copy-Paste Circus' bana diya! Vector databases integrate karne ka idea toh badiya hai, par jis tarike se code likha hai, use dekh kar Docker engine bhi ro dega.

Quick Summary of Issues:

  1. NPM Folder Saaf? Beta, bina warning ke pura npm package aur installer delete kar diya? Log npm se install karne ka koshish karenge aur unhe milega babaji ka thullu!
  2. Ctrl+C + Ctrl+V Level: Pro Max: Attu.go, Kibana.go, aur OpenSearchDashboards.go me content bilkul same hai. Bas string replace maar diya hai! Sasta copy-paste engineering band karo.
  3. Security Vulnerability: User input direct split ho ke command args me jaa raha hai. Security toh door ki baat, spaces waale input me hi ye fat jayega.

Code Quality Score: 3/10 (Passable only because it compiles, but barely!)


Generated by Review Buddy | Tone: roast | Language: hinglish

@github-actions

Copy link
Copy Markdown

⚡ Review Buddy - Performance Analysis

👥 Attention: @AnkanSaha

🏎️ PERFORMANCE ANALYSIS REPORT

Oye hero, code toh chal gaya par iski efficiency ghutne tek chuki hai. Aao tumhe samjhayein ki tumhara code production me kaise rone wala hai.


1. Blocking Synchronous Executions (exec.Command Ka At अत्याचार)

Tumne har tool setup (Attu, Kibana, OpenSearchDashboards) me direct sync shell calls maare hain:

cmd := exec.Command("docker", "pull", "...")
_ = cmd.Run()

Problem:

  • docker pull synchronous hai aur network-bound hai. Jab tak image pull nahi hoti, tumhara CLI thread blocked rahega.
  • Agar user ka internet jio se chala gaya toh CLI crash ya frozen state me chali jayegi.

Remediation:
Tumhe Go routines aur channels use karke background execution ya proper progress bar loading animation lagani chahiye thi. Aise standard synchronous calling se user experience kharab hota hai.


2. O(N) Sequential Image Listing Inside Loops

docker.go me tumne static array banakar har image check ko append kiya hai:

dbImages := []string{ "mongo", "mysql", ..., "vespaengine/vespa", ... }

Problem:

  • Har baar jab ListDatabaseImages() call hota hai, tum linear search aur parsing karte ho external command se list utha kar.
  • Memory reallocation ho rahi hai bar-bar. Golang slice overhead trigger ho raha hai background me.

Remediation:
Use a global map or package level constants with pre-allocated capacities to avoid unnecessary allocation inside hot functions.


3. String Splitting Overhead in Hot Paths (strings.Fields Magic)

StartContainer.go me tumne string variables (portMapping, env, etc.) banaye aur fir unhe parse kiya:

args = append(args, strings.Fields(portMapping)...)

Problem:

  • strings.Fields is highly inefficient dynamically! Har iteration par naya string slice allocate ho raha hai.
  • String parsing ke dukan khol ke baithe ho kya? Direct dynamic string slices banate, string format karke split kyu kar rahe ho?

Remediation:
Direct list parameters add karo array standard format me, avoid converting back and forth:

args := []string{"run", "-d", "--network", "ContainDB-Network"}
args = append(args, "-p", fmt.Sprintf("%s:%s", hostPort, containerPort))

4. File Reading inside loops in platform.go

GetOSRelease() reads /etc/os-release every time without caching!

  • Problem: Frequent I/O disk access slows down execution dramatically on virtual machines or slow-disk systems.
  • Remediation: Cache OS release variables in a package level variable once on init() or first use!

5. Memory Allocation Checklist:

  • Pre-allocated Slices? No. filtered slices are appended dynamically using append() without size initialization, forcing slice copy when threshold exceeds.
  • Avoid GC Triggers? No. Creating multiple temporary strings for executing Docker commands which increases heap allocations.
  • Connection reuse? No. Every docker check triggers a new OS process fork, eating up CPU context switches.

Generated by Review Buddy | Tone: roast | Language: hinglish

@github-actions

Copy link
Copy Markdown

🔐 Review Buddy - Security Audit

👥 Attention: @AnkanSaha

🛡️ SECURITY AUDIT REPORT

Yaar Ankan, tum toh security ka 'S' bhi nahi jaante lagta hai! 🤦‍♂️ Chalo breakdown dete hain ki tumhara code hacker ka playground kaise hai:


🚨 CRITICAL ISSUES

1. Command Argument Injection (CWE-88) in StartContainer.go

  • Location: src/base/StartContainer.go around input extraction.
  • Exploit Scenario:
    Tum user se password, port, ya username bina kisi sanitization ke mangte ho:
    pass := tools.AskForInput("Enter password", "")
    env = fmt.Sprintf("-e POSTGRES_PASSWORD=%s -e POSTGRES_USER=%s", pass, user)
    // ...
    envParts := strings.Fields(env)
    args = append(args, envParts...)
    Agar user password enter karega: my-pass --entrypoint /bin/sh -v /:/host-root-escape
    strings.Fields use split karega: ["-e", "POSTGRES_PASSWORD=my-pass", "--entrypoint", "/bin/sh", ...]
    Docker is container ko arbitrary parameters ke sath launch kar dega, jisse container breakout ho sakta hai ya user system compromise ho sakta hai!
  • Remediation: Kabhi bhi user inputs par dynamic shell execution ya variable whitespace splitting mat karo! Use safe argument passing standard arrays me.

⚠️ HIGH ISSUES

2. Cleartext Password Processing & Visual Leak (CWE-522 / CWE-319)

  • Location: src/tools/askForInput.go and src/base/StartContainer.go
  • Exploit Scenario:
    Passwords (MYSQL_ROOT_PASSWORD, POSTGRES_PASSWORD) terminal console standard read inputs se liye jaa rahe hain jo local terminal window me echo ho jate hain. Koi tumhare kandhe ke peeche khada ho to use saaf dikh jayega admin credentials.
  • Remediation: Use proper library for password fields input (e.g., promptui.Prompt with Mask: '*').

ℹ️ MEDIUM & LOW ISSUES

3. Insecure Dev Configurations (weaviate & elasticsearch default)

  • Location: src/base/StartContainer.go
  • Details: Weaviate is running with AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true by default on local network! If user is on a public network, their DB is exposed instantly (CWE-306).

Generated by Review Buddy | Tone: roast | Language: hinglish

@github-actions

Copy link
Copy Markdown

📊 Review Buddy - Code Quality & Maintainability Analysis

👥 Attention: @AnkanSaha

🎯 Overall Benchmark: 45/100 (Poor)

📐 CODE QUALITY ANALYSIS REPORT

Bhai, code quality dekh ke dimaag ka dahi ban gaya! DRY (Don't Repeat Yourself) ko tumne direct kill hi kar diya hai. Aao check karte hain SOLID aur standard quality framework ke hisab se tumne kitne kaand kiye hain:


1. Copy-Paste Ka Mahasangram (DRY Violation)

Attu.go, Kibana.go, and OpenSearchDashboards.go ke code ko dhyan se dekho:

  • Teeno file me ek hi process chal rahi hai: checking container, querying which DB container to link, asking for port, pulling image, and running container.
  • Bas dynamic variables (Attu, Kibana, OpenSearchDashboards) change ho rahe hain!

Bad Example (Your Code):

// Attu.go
func StartAttu() { ... }
// Kibana.go
func StartKibana() { ... }

How to Fix:
Inhe modularize karo. Ek single generic function likho StartToolContainer(toolName string, linkedDbImage string, defaultPort string, envVarName string) aur use switch case me pass karo!


2. SOLID Design Violations

  • Single Responsibility Principle (SRP) Violation:
    StartContainer.go data gathering, prompt input validation, command generation, volume setup, and console notification teeno-charo kaam akela kar raha hai! Ye class kam, khichdi jyada hai.
  • Open/Closed Principle (OCP) Violation:
    Naye vectors databases add karne ke liye, tumhe StartContainer.go ke arrays aur mappings ko modify karna pada. Ideally, database configurations dynamically models ke form me defined honi chahiye thi.

3. Weak Error Handling

Har tool execution me error ignoring bhari padi hai:

_ = cmd.Run()

Problem:

  • cmd.Run() fail ho gaya (e.g. Docker Daemon is dead) par code aage badh jayega, aur user ko bolega '✅ Tool started successfully!' arey bhai, kaise? Jab image hi pull nahi hui!

Remediation:
Never ignore errors with discard variable _. Always return and bubble up errors so CLI can crash gracefully with proper warnings.


4. Magic Strings everywhere!

  • Databases and management tools configurations are written directly inside mappings instead of using proper constant interfaces. This makes refactoring impossible.

Generated by Review Buddy | Tone: roast | Language: hinglish

@github-actions

Copy link
Copy Markdown

💡 Review Buddy - Best Practices & Alternative Suggestions

👥 Attention: @AnkanSaha

🛠️ BEST PRACTICES & REFACTORING RECOMMENDATIONS

Tumhara code better banayein, unhe modern Go standards me convert karein:

1. Avoid strings.Fields parsing for environment arguments

Instead of generating string templates and parsing them, construct slices directly.

  • Before:
env = fmt.Sprintf("-e POSTGRES_PASSWORD=%s -e POSTGRES_USER=%s", pass, user)
// ...
envParts := strings.Fields(env)
  • After:
var envArgs []string
envArgs = append(envArgs, "-e", fmt.Sprintf("POSTGRES_PASSWORD=%s", pass))
envArgs = append(envArgs, "-e", fmt.Sprintf("POSTGRES_USER=%s", user))
  • Why: Safely avoids parameter injection if password contains spaces or system commands. Much faster execution.

2. Create generic helpers instead of duplicating files (Attu.go, Kibana.go etc.)

Reduce code footprint and maintainability issues.

  • Before:
    Duplicated code for launching dynamic tools in separate files with hardcoded images.
  • After:
type ManagementTool struct {
    Name      string
    Image     string
    LinkImage string
    DefaultPort string
    EnvLinkKey  string
}

func StartManagementTool(config ManagementTool) {
    // Common verification logic
    // Generic user input asking
    // Single command template logic!
}
  • Why: 3 files and 250+ duplicate lines can be reduced to one simple config map and a single helper function.

Generated by Review Buddy | Tone: roast | Language: hinglish

@github-actions

Copy link
Copy Markdown

⚠️ Review Buddy - Final Recommendation

👥 Attention: @AnkanSaha

Recommendation: REQUEST CHANGES

Changes chahiye, bhai! Abhi approve nahi kar sakte.

Reasoning:

  • Heavy code duplication: Attu.go, Kibana.go, and OpenSearchDashboards.go are duplicate copies of the same logic.
  • Security Risk: Dynamic command parameter splitting in strings.Fields allows Docker parameter injection and breaks when inputs contain spaces.
  • Complete deletion of the legacy NPM workspace without migration warnings for clients.
  • Lacking proper error checks during exec.Command runs inside container setups.

📋 Review Checklist for Reviewers:

  • Code changes align with the PR description
  • No security vulnerabilities introduced
  • Performance considerations addressed
  • Code follows project conventions
  • Tests are adequate (if applicable)
  • Documentation updated (if needed)

🎯 Next Steps:

⚠️ Pehle suggestions address karo, phir approve karna.

Generated by Review Buddy | Tone: roast | Language: hinglish

@AnkanSaha
AnkanSaha merged commit 06d092c into main Jun 26, 2026
2 of 3 checks passed
@AnkanSaha
AnkanSaha deleted the maintainer/ankan branch June 26, 2026 17:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant