ASH Plugin Architecture
This document provides visual diagrams of the ASH plugin architecture, workflows, and relationships.
For more detailed diagrams specific to each plugin type, see: - Scanner Plugin Diagrams - Reporter Plugin Diagrams - Converter Plugin Diagrams - Event Subscriber Diagrams
Plugin Architecture Overview
The following diagram shows the high-level architecture of the ASH plugin system:
graph TD
A[ASH Core] --> B[Plugin Manager]
B --> C[Scanner Plugins]
B --> D[Reporter Plugins]
B --> E[Converter Plugins]
B --> F[Event Subscribers]
C --> G[Scan Results]
E --> H[Converted Files]
G --> D
H --> C
subgraph "Plugin Types"
C
D
E
F
end
subgraph "Data Flow"
G
H
end
Plugin Lifecycle
The following diagram shows the lifecycle of plugins during an ASH scan:
sequenceDiagram
participant User
participant ASH as ASH Core
participant PM as Plugin Manager
participant CP as Converter Plugins
participant SP as Scanner Plugins
participant ES as Event Subscribers
participant RP as Reporter Plugins
User->>ASH: Start Scan
ASH->>PM: Load Plugins
PM->>CP: Initialize
PM->>SP: Initialize
PM->>ES: Initialize
PM->>RP: Initialize
ASH->>ES: Emit ScanStarted Event
ES-->>ASH: Handle Event
ASH->>CP: Convert Files
CP-->>ASH: Converted Files
ASH->>ES: Emit ConversionCompleted Event
ES-->>ASH: Handle Event
ASH->>SP: Scan Files
SP-->>ASH: Scan Results
ASH->>ES: Emit ScanCompleted Event
ES-->>ASH: Handle Event
ASH->>RP: Generate Reports
RP-->>ASH: Reports
ASH->>ES: Emit ReportingCompleted Event
ES-->>ASH: Handle Event
ASH-->>User: Scan Complete
Data Flow Between Plugins
The following diagram shows the data flow between different types of plugins:
flowchart LR
A[Source Files] --> B[Converter Plugins]
B --> C[Converted Files]
C --> D[Scanner Plugins]
A --> D
D --> E[Scan Results]
E --> F[Reporter Plugins]
F --> G[Reports]
H[Event Subscribers] -.-> B
H -.-> D
H -.-> F
subgraph "Input"
A
end
subgraph "Processing"
B
C
D
E
H
end
subgraph "Output"
F
G
end
Plugin Registration and Discovery
The following diagram shows how plugins are registered and discovered:
graph TD
A[Plugin Module] --> B[__init__.py]
B --> C[ASH_SCANNERS]
B --> D[ASH_REPORTERS]
B --> E[ASH_CONVERTERS]
B --> F[ASH_EVENT_SUBSCRIBERS]
G[ASH Configuration] --> H[ash_plugin_modules]
H --> I[Plugin Manager]
C --> I
D --> I
E --> I
F --> I
I --> J[Load Plugins]
J --> K[Initialize Plugins]
K --> L[Execute Plugins]
Plugin Configuration Flow
The following diagram shows how plugin configuration flows through the system:
graph TD
A[.ash/.ash.yaml] --> B[Configuration Parser]
B --> C[Global Configuration]
B --> D[Scanner Configuration]
B --> E[Reporter Configuration]
B --> F[Converter Configuration]
C --> G[Plugin Manager]
D --> G
E --> G
F --> G
G --> H[Scanner Plugins]
G --> I[Reporter Plugins]
G --> J[Converter Plugins]
K[CLI Overrides] --> B
Event System
The following diagram shows the event system in ASH:
graph TD
A[ASH Core] --> B[Event Emitter]
B --> C[ScanStarted]
B --> D[ConversionStarted]
B --> E[ConversionCompleted]
B --> F[ScannerStarted]
B --> G[ScannerCompleted]
B --> H[ScanCompleted]
B --> I[ReportingStarted]
B --> J[ReportingCompleted]
C --> K[Event Subscribers]
D --> K
E --> K
F --> K
G --> K
H --> K
I --> K
J --> K
K --> L[Custom Actions]