Job¶
The Job is the core execution unit in MultiFlexi that manages the complete lifecycle of application execution, from initialization to completion and artifact preservation.
Job Lifecycle¶
Overview¶
Every MultiFlexi job follows a well-defined lifecycle that ensures reliable execution, comprehensive logging, and automatic artifact preservation. The job lifecycle consists of several distinct phases:
Initialization - Job creation and environment setup
Pre-execution - Configuration loading and validation
Execution - Application launch and monitoring
Post-execution - Result processing and cleanup
Artifact Preservation - Automatic storage of outputs and results
Lifecycle Phases¶
Initialization Phase¶
When a job is created, it undergoes initial setup:
Job Object Creation: A new Job instance is instantiated with a unique ID
Environment Setup: Configuration fields and environment variables are initialized
Template Association: The job is linked to its RunTemplate for execution parameters
Logging Setup: Zabbix monitoring is configured if enabled
Status Tracking: Initial job state is set to “loaded”
Pre-execution Phase (runBegin)¶
Before execution starts, the job prepares the runtime environment:
Configuration Loading: Environment variables and credentials are loaded
Command Line Building: The full executable command is constructed
Resource Validation: Required files and dependencies are checked
Status Update: Job phase changes to “running”
Monitoring Setup: Execution tracking and logging begins
Execution Phase (launchJob)¶
The core execution phase where the actual application runs:
Process Launch: The configured application executable is started
Output Monitoring: stdout and stderr are captured in real-time
Status Tracking: Job status and progress are continuously monitored
Resource Management: System resources are tracked and managed
Error Handling: Exceptions and failures are captured and logged
Post-execution Phase (runEnd)¶
After execution completes, the job processes results:
Exit Code Capture: The application’s exit status is recorded
Output Processing: stdout and stderr are finalized and stored
Status Update: Job phase is updated based on success/failure
Performance Metrics: Execution time and resource usage are calculated
Action Execution: Configured actions (like Zabbix reporting) are triggered
Artifact Preservation Phase¶
New in Latest Version: Every job automatically preserves its artifacts:
Result Files: Any output files generated by the application are stored
Standard Output: Complete stdout content is saved as
stdout.txtStandard Error: Complete stderr content is saved as
stderr.txtMetadata Storage: File metadata including MIME types and descriptions
Database Integration: All artifacts are linked to the job via foreign keys
Key Methods¶
The Job class provides several key methods that drive the lifecycle:
performJob()¶
The main orchestration method that coordinates the entire job execution:
public function performJob(): void
{
$this->runBegin();
$this->executor->launchJob();
$this->runEnd($exitCode, $stdout, $stderr);
}
runBegin()¶
Initializes the job execution environment and starts monitoring.
runEnd($statusCode, $stdout, $stderr)¶
Completes job execution, processes results, and triggers artifact preservation:
Records final job status and timing information
Automatically calls
createJobArtifacts()for comprehensive output preservationExecutes configured actions (notifications, reporting, etc.)
Updates job state in the database
createJobArtifacts() (Private)¶
Automatically preserves job outputs as artifacts:
Result File Processing: Detects and stores application output files
Output Preservation: Saves stdout and stderr with proper content types
MIME Type Detection: Automatically determines file types for proper handling
Error Resilience: Continues processing even if individual artifacts fail
Artifact Storage System¶
Architecture¶
The artifact storage system provides automatic, comprehensive preservation of job outputs:
Database Schema¶
Artifacts are stored in the artifacts table with the following structure:
id- Primary keyjob_id- Foreign key reference to the job tablefilename- Original filename or descriptive namecontent_type- MIME type of the artifact contentcontent- The actual artifact data (BLOB)note- Optional description or metadatacreated- Timestamp of artifact creation
Automatic Preservation¶
Every job execution automatically creates artifacts for:
- Result Files
Any files produced by the application in the job’s output directory are detected and stored with proper MIME type identification.
- Standard Output (stdout.txt)
Complete standard output stream is preserved as a text artifact, enabling debugging and result analysis.
- Standard Error (stderr.txt)
Complete standard error stream is preserved, facilitating troubleshooting and error analysis.
Benefits¶
The automatic artifact preservation system provides several key benefits:
Complete Audit Trail: Every job execution leaves a complete record of its outputs
Debugging Support: Access to stdout/stderr simplifies troubleshooting failed jobs
Result Preservation: Application outputs are never lost, regardless of action configuration
Consistent Behavior: All jobs follow the same artifact preservation pattern
Action Independence: Actions can focus on their specific functionality without managing artifacts
Command-Line Job Management¶
MultiFlexi provides comprehensive command-line tools for job management through the multiflexi-cli utility.
Installation¶
The CLI tool is available through the multiflexi-cli package:
# Installation via package manager
sudo apt install multiflexi-cli
# Or run directly from source
./bin/multiflexi-cli
Available Commands¶
Job Operations¶
The job command provides comprehensive job management capabilities:
# List all jobs
multiflexi-cli job:list
# Show job details
multiflexi-cli job:show <job-id>
# Create a new job
multiflexi-cli job:create --template <template-id> --company <company-id>
# Execute a job immediately
multiflexi-cli job:run <job-id>
# Delete a job
multiflexi-cli job:delete <job-id>
Queue Management¶
Manage job execution queues:
# Show job queue status
multiflexi-cli queue:status
# Process pending jobs
multiflexi-cli queue:process
# Clear failed jobs from queue
multiflexi-cli queue:clear
Artifact Management¶
Manage job artifacts through the CLI:
# List artifacts for a job
multiflexi-cli artifact:list --job <job-id>
# Download an artifact
multiflexi-cli artifact:get <artifact-id> --output <filename>
# Show artifact details
multiflexi-cli artifact:show <artifact-id>
Script Generation¶
Generate standalone scripts from job configurations:
# Generate shell script for a job
multiflexi-job2script <job-id> > job_script.sh
# Generate environment file
multiflexi-job2env <job-id> > job.env
Configuration Management¶
Manage job-related configurations:
# List run templates
multiflexi-cli runtemplate:list
# Show template configuration
multiflexi-cli runtemplate:show <template-id>
# List companies
multiflexi-cli company:list
Environment Configuration¶
The CLI tool requires proper database configuration through environment files:
# Default configuration file
/etc/multiflexi/.env
# Custom environment file
multiflexi-cli --environment /path/to/.env job:list
Required environment variables:
DB_CONNECTION- Database type (mysql, pgsql, etc.)DB_HOST- Database hostDB_PORT- Database portDB_DATABASE- Database nameDB_USERNAME- Database usernameDB_PASSWORD- Database password
Integration and Automation¶
Monitoring and Alerting¶
Combined with Zabbix integration, job execution provides comprehensive monitoring:
Real-time Status: Job phases and status updates sent to Zabbix
Performance Metrics: Execution time and resource usage tracking
Failure Alerts: Automatic notification when jobs fail
Artifact Availability: All job outputs preserved for analysis
Best Practices¶
Job Design¶
Idempotent Operations: Design jobs to be safely re-runnable
Clear Output: Ensure applications produce clear, parseable output
Exit Codes: Use proper exit codes to indicate success/failure status
Resource Cleanup: Clean up temporary resources within the application
Artifact Management¶
File Organization: Structure output files logically for easy artifact retrieval
Size Considerations: Monitor artifact storage usage for large-output applications
Retention Policies: Implement cleanup procedures for old artifacts as needed
Content Types: Use standard file extensions to ensure proper MIME type detection
Monitoring and Maintenance¶
Regular Monitoring: Monitor job success rates and execution times
Log Analysis: Review job logs and artifacts for optimization opportunities
Queue Management: Ensure job queues don’t become bottlenecks
Database Maintenance: Implement periodic cleanup of old job and artifact data