analyzer

package module
v0.0.0-...-8b1f32c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 24, 2026 License: Apache-2.0 Imports: 7 Imported by: 0

README ยถ

Analyzer - File Data Migration Module

Overview

The analyzer module provides file data migration capabilities with directory scanning, metadata extraction, and pattern-based filtering.

How It Works (User Perspective)

1. Browse and Select Directory

Users navigate through directories using a file explorer interface:

[UI] Home Directory (/home/user)
  ๐Ÿ“ Documents  โ†’  [User clicks]
  ๐Ÿ“ Downloads
  ๐Ÿ“ Pictures
[UI] Documents Directory
  ๐Ÿ“ Projects  โ†’  [User clicks]
  ๐Ÿ“ Archive
  ๐Ÿ“„ notes.txt
[UI] Projects Directory  โ†’  [User selects this for migration]
  ๐Ÿ“ webapp
  ๐Ÿ“ api
  ๐Ÿ“„ README.md

Behind the scenes: ListDirectory() shows immediate contents at each level.

2. Configure Migration Options

Users configure what to migrate:

[UI] Migration Configuration
  โ˜‘ Include subdirectories

  Include files:
    โ˜‘ *.txt      (text files)
    โ˜‘ *.md       (markdown files)
    โ˜‘ docs/**    (all files in docs/)

  Exclude files:
    โ˜‘ *.log      (log files)
    โ˜‘ .git/**    (git directory)
    โ˜‘ *.tmp      (temporary files)

Behind the scenes: FilterOptions with include/exclude patterns.

3. Generate Migration Plan

System scans and creates a detailed plan:

[UI] Migration Plan Summary
  Source: /home/user/Documents/Projects
  Files: 247 files
  Total Size: 15.3 MB

  [View Details] [Start Migration]

Behind the scenes: CreateMigrationPlan() scans directory, applies filters, and collects metadata.

4. Review File List

Users can review detailed file information:

[UI] File List (247 files)
  ๐Ÿ“„ README.md          15 KB    2025-10-29 14:23
  ๐Ÿ“„ config.yaml         2 KB    2025-10-28 09:15
  ๐Ÿ“ src/
    ๐Ÿ“„ main.go          45 KB    2025-10-30 11:05
    ๐Ÿ“„ utils.go         12 KB    2025-10-27 16:42
  ๐Ÿ“ docs/
    ๐Ÿ“„ guide.md         78 KB    2025-10-25 10:30

Behind the scenes: Each file has complete metadata (timestamps, size, permissions, owner).

Key Features

  • Directory browsing: Navigate hierarchically through directories
  • Metadata extraction: Collect comprehensive file information (size, timestamps, permissions, owner/group)
  • Pattern filtering: Include/exclude files using glob patterns (*.txt, data/**, **/test/**)
  • Migration planning: Generate complete migration plans with file lists and statistics

File Metadata Information

The analyzer extracts comprehensive metadata for each file and directory. This information is essential for migration planning and analysis.

Metadata Item Description
Path Full absolute path of the file or directory
Name File or directory name (without path)
Size Size in bytes (0 for directories)
IsDir Boolean flag indicating if the item is a directory
Mode Permission mode (e.g., "0755", "0644")
ModTime Last modification time (when content was changed)
AccessTime Last access time (when file was read or opened)
ChangeTime Last status change time (when metadata was modified)
Owner Owner user ID (UID on Linux/Unix)
Group Group ID (GID on Linux/Unix)
MimeType MIME type of the file (e.g., "text/plain", "application/json")
Extension File extension including dot (e.g., ".txt", ".json")
IsSymlink Boolean flag indicating if the item is a symbolic link
SymlinkTarget Target path if the item is a symbolic link
Checksum Optional checksum value (MD5/SHA256) for file integrity verification

API Reference

Core Functions
Function Purpose
ListDirectory(path) List immediate directory contents (for UI navigation)
CreateMigrationPlan(sourceDir, includeSubDir, filters) Generate migration plan with filtering
ScanDirectory(options) Comprehensive directory scan with options
ExtractFileMetadata(path, collectChecksum) Get detailed file metadata
Key Data Structures
// Migration plan with file list and statistics
type MigrationPlan struct {
    SourceDir     string
    TotalFiles    int
    TotalSize     int64
    FileList      []FileMetadata
    FilterOptions FilterOptions
}

// File metadata (timestamps, permissions, owner, size, etc.)
type FileMetadata struct {
    Path          string    // Full absolute path
    Name          string    // File or directory name
    Size          int64     // Size in bytes (0 for directories)
    IsDir         bool      // True if directory
    Mode          string    // Permission mode (e.g., "0755")
    ModTime       time.Time // Last modification time
    AccessTime    time.Time // Last access time (if available)
    ChangeTime    time.Time // Last status change time (if available)
    Owner         string    // Owner user ID
    Group         string    // Group ID
    MimeType      string    // MIME type (for files)
    Extension     string    // File extension (e.g., ".txt")
    IsSymlink     bool      // True if symbolic link
    SymlinkTarget string    // Target if symbolic link
    Checksum      string    // Optional checksum (MD5/SHA256)
}

// Filter configuration
type FilterOptions struct {
    IncludePatterns []string  // e.g., []string{"*.txt", "docs/**"}
    ExcludePatterns []string  // e.g., []string{"*.log", ".git/**"}
}

Usage Examples

Example 1: UI Directory Navigation
// Step 1: Show home directory
result, _ := analyzer.ListDirectory("")
// Display: result.Entries (files and directories)

// Step 2: User clicks "Documents"
result, _ := analyzer.ListDirectory("/home/user/Documents")
// Display: Documents contents

// Step 3: User clicks "Projects"
result, _ := analyzer.ListDirectory("/home/user/Documents/Projects")
// Display: Projects contents
// User selects this directory for migration
Example 2: Complete Migration Workflow
// User has selected: /home/user/Documents/Projects
// User configured filters in UI

filters := analyzer.FilterOptions{
    IncludePatterns: []string{"*.txt", "*.md", "docs/**"},
    ExcludePatterns: []string{"*.log", ".git/**"},
}

// Generate migration plan
plan, _ := analyzer.CreateMigrationPlan(
    "/home/user/Documents/Projects",  // Selected directory
    true,                              // Include subdirectories
    filters,                           // Apply filters
)

// Display to user:
fmt.Printf("Migration Plan:\n")
fmt.Printf("  Files: %d\n", plan.TotalFiles)
fmt.Printf("  Size: %d bytes\n", plan.TotalSize)

// Show file list
for _, file := range plan.FileList {
    fmt.Printf("  %s (%d bytes)\n", file.Path, file.Size)
}

Filter Patterns

Basic Patterns
  • *.txt - All text files
  • *.log - All log files
  • data/* - Files directly in data/
Recursive Patterns
  • data/** - All files under data/ (recursive)
  • **/*.json - All JSON files anywhere
  • **/test/** - All files in any test/ directory
Example Filter Configuration
filters := FilterOptions{
    IncludePatterns: []string{
        "*.txt", "*.md",   // Text and markdown files
        "docs/**",         // All files in docs/
    },
    ExcludePatterns: []string{
        "*.log", "*.tmp",  // Log and temp files
        ".git/**",         // Git directory
        "**/test/**",      // Test directories
    },
}

Testing

Run the example:

cd analyzer/examples/basic
go run main.go

Run tests:

cd analyzer
go test -v

Platform Support

  • Linux/Unix: Full support (owner, group, timestamps, permissions)
  • Windows/macOS: Can be added with platform-specific implementations

License

Apache 2.0 License

Documentation ยถ

Index ยถ

Constants ยถ

This section is empty.

Variables ยถ

This section is empty.

Functions ยถ

func GetDefaultBaseDir ยถ

func GetDefaultBaseDir() (string, error)

GetDefaultBaseDir returns the default base directory ($HOME for Linux/Unix)

func GetDirectoryStatistics ยถ

func GetDirectoryStatistics(path string, recursive bool) (fileCount int, dirCount int, totalSize int64, err error)

GetDirectoryStatistics calculates statistics for a directory

Types ยถ

type DirectoryEntry ยถ

type DirectoryEntry struct {
	Name  string `json:"name"`  // Name of the file or directory
	Path  string `json:"path"`  // Full path
	IsDir bool   `json:"isDir"` // True if directory
	Size  int64  `json:"size"`  // Size in bytes
}

DirectoryEntry represents a single directory or file entry for listing

type FileMetadata ยถ

type FileMetadata struct {
	Path          string    `json:"path"`          // Full absolute path
	Name          string    `json:"name"`          // File or directory name
	Size          int64     `json:"size"`          // Size in bytes (0 for directories)
	IsDir         bool      `json:"isDir"`         // True if directory
	Mode          string    `json:"mode"`          // Permission mode (e.g., "0755")
	ModTime       time.Time `json:"modTime"`       // Last modification time
	AccessTime    time.Time `json:"accessTime"`    // Last access time (if available)
	ChangeTime    time.Time `json:"changeTime"`    // Last status change time (if available)
	Owner         string    `json:"owner"`         // Owner user ID
	Group         string    `json:"group"`         // Group ID
	MimeType      string    `json:"mimeType"`      // MIME type (for files)
	Extension     string    `json:"extension"`     // File extension (e.g., ".txt")
	IsSymlink     bool      `json:"isSymlink"`     // True if symbolic link
	SymlinkTarget string    `json:"symlinkTarget"` // Target if symbolic link
	Checksum      string    `json:"checksum"`      // Optional checksum (MD5/SHA256)
}

FileMetadata represents comprehensive metadata for a file or directory

func CollectFileList ยถ

func CollectFileList(options ScanOptions) ([]FileMetadata, error)

CollectFileList collects detailed metadata for all files in a directory This is used when creating a migration plan

func ExtractFileMetadata ยถ

func ExtractFileMetadata(path string, collectChecksum bool) (*FileMetadata, error)

ExtractFileMetadata extracts comprehensive metadata for a file or directory

type FilterOptions ยถ

type FilterOptions struct {
	IncludePatterns []string `json:"includePatterns"` // Patterns to include (e.g., "*.txt", "data/**")
	ExcludePatterns []string `json:"excludePatterns"` // Patterns to exclude (e.g., "*.log", "temp/*")
}

FilterOptions defines include/exclude filter settings

type MigrationPlan ยถ

type MigrationPlan struct {
	SourceDir     string         `json:"sourceDir"`     // Source directory path
	IncludeSubDir bool           `json:"includeSubDir"` // Include subdirectories
	FilterOptions FilterOptions  `json:"filterOptions"` // Filter settings
	TotalFiles    int            `json:"totalFiles"`    // Number of files to migrate
	TotalSize     int64          `json:"totalSize"`     // Total size to migrate
	FileList      []FileMetadata `json:"fileList"`      // List of files to migrate
	CreatedAt     time.Time      `json:"createdAt"`     // When the plan was created
}

MigrationPlan represents the migration plan configuration

func CreateMigrationPlan ยถ

func CreateMigrationPlan(sourceDir string, includeSubDir bool, filters FilterOptions) (*MigrationPlan, error)

CreateMigrationPlan creates a migration plan based on user's selection

type ScanOptions ยถ

type ScanOptions struct {
	BaseDir         string   `json:"baseDir"`         // Base directory to scan (defaults to $HOME)
	Recursive       bool     `json:"recursive"`       // Include subdirectories
	FollowSymlinks  bool     `json:"followSymlinks"`  // Follow symbolic links
	IncludeHidden   bool     `json:"includeHidden"`   // Include hidden files (starting with .)
	MaxDepth        int      `json:"maxDepth"`        // Maximum recursion depth (0 = unlimited)
	CollectChecksum bool     `json:"collectChecksum"` // Calculate file checksums (expensive)
	IncludePatterns []string `json:"includePatterns"` // Include patterns (whitelist)
	ExcludePatterns []string `json:"excludePatterns"` // Exclude patterns (blacklist)
}

ScanOptions defines options for scanning directories

type ScanResult ยถ

type ScanResult struct {
	BaseDir       string           `json:"baseDir"`       // Base directory scanned
	Entries       []DirectoryEntry `json:"entries"`       // Immediate entries (files + dirs)
	TotalFiles    int              `json:"totalFiles"`    // Total file count (recursive)
	TotalDirs     int              `json:"totalDirs"`     // Total directory count (recursive)
	TotalSize     int64            `json:"totalSize"`     // Total size in bytes (recursive)
	ScanTime      time.Time        `json:"scanTime"`      // When the scan was performed
	IncludeSubDir bool             `json:"includeSubDir"` // Whether subdirectories were included
}

ScanResult contains the results of a directory scan

func ListDirectory ยถ

func ListDirectory(path string) (*ScanResult, error)

ListDirectory lists immediate files and subdirectories in the given path This is the main function for UI-driven directory browsing

func ScanDirectory ยถ

func ScanDirectory(options ScanOptions) (*ScanResult, error)

ScanDirectory performs a comprehensive scan of a directory with optional recursion This is used when user confirms migration target and needs full file list

Directories ยถ

Path Synopsis
examples
basic command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL