Skip to main content
Ralph is built on Django 4.2 and follows a modular architecture designed for managing assets, data centers, and configuration data. This guide explains the core architectural patterns and module organization.

Core Principles

Fat Models, Thin Views

Ralph’s architecture emphasizes business logic in Django models:
  • Models contain operational logic and data validation
  • Django Admin generates user interfaces automatically
  • Views primarily handle request/response without complex business logic
This approach prioritizes simplicity and leverages Django’s built-in admin capabilities for rapid development.

Modular Design

Ralph is organized into self-contained Django apps, each responsible for a specific domain:

Technology Stack

Backend Framework

Django 4.2 - The foundation
  • Python 3.10 required (>=3.10.0, <3.11)
  • Django ORM for database abstraction
  • Django Admin for UI generation
  • Django REST Framework (3.15.0) for API

Key Dependencies

From pyproject.toml:

Frontend Stack

  • Node.js (v8.10.0 - v11.7.0)
  • npm for dependency management
  • Gulp for asset compilation
  • Custom JavaScript for admin enhancements

Infrastructure Services

  • MySQL 5.7 or PostgreSQL 14+ - Primary database
  • Redis 4.0+ - Caching and job queues
  • inkpy - Custom background job processor

Model Architecture

BaseObject Pattern

Most Ralph models inherit from BaseObject, which provides common functionality:
src/ralph/assets/models/base.py

Key Mixins

Polymorphic Models

Ralph uses polymorphic inheritance for asset types:
This allows:
  • Unified queries across asset types
  • Type-specific fields and methods
  • Shared relationships (e.g., licenses, supports)

Module Structure

Each Django app follows a consistent structure:

API Architecture

Django REST Framework

Ralph exposes a comprehensive REST API:

Nested Routers

Related resources use nested routing:

Workflow System

Transitions

Ralph implements state machine workflows for asset lifecycle:
Transitions support:
  • Custom validation
  • Dynamic forms
  • Audit logging
  • Email notifications

Data Import/Export

Import Engine

The data_importer module provides:
  • CSV/Excel file parsing
  • Field mapping
  • Validation and error reporting
  • Bulk create/update operations

Export Formats

Using django-import-export:
  • CSV
  • Excel (XLSX)
  • ODF (Open Document Format)
  • JSON
  • XML

Permission System

Field-Level Permissions

Ralph supports granular permissions:

Permission Mixins

  • PermissionsForObjectMixin - Object-level API permissions
  • PermByFieldMixin - Field-level read/write control

Background Jobs

Django RQ

Ralph uses Redis Queue for asynchronous tasks:

inkpy Service

The inkpy container runs background workers:
  • Network discovery jobs
  • Report generation
  • Data synchronization
  • Email notifications

Configuration Management

Settings Structure

Environment-Based Configuration

Settings support environment variables:
src/ralph/settings/local.template

Main Application Modules

Assets Module

Manages physical and virtual assets:
  • Asset lifecycle tracking
  • Component management
  • Purchase orders
  • Depreciation calculations
  • Asset assignment to users

Data Center Module

Data center infrastructure management:
  • Racks and rack units
  • Network devices
  • Servers and hardware
  • Power and network connections
  • DC visualization

Networks Module

IP address and network management:
  • IP address allocation
  • Network ranges
  • DNS records
  • DHCP configuration

Licenses Module

Software and hardware license tracking:
  • License assignment
  • Expiration monitoring
  • Compliance reporting

Database Design

Supported Databases

  • MySQL 5.7 - Default, widely tested
  • PostgreSQL 14+ - Alternative, full feature support

Character Sets

MySQL configuration requires UTF-8:

Migrations

Django migrations are stored per-app:
Run migrations:

Testing Architecture

Test Organization

Tests are organized by module:

Test Dependencies

From pyproject.toml:

Running Tests

Development Tools

Debugging

Development dependencies include:
  • django-debug-toolbar - SQL query analysis
  • django-silk - Performance profiling
  • ipdb - Interactive debugger
  • ipython - Enhanced Python shell

Code Quality

  • ruff - Fast Python linter (replaces flake8)
  • toml-sort - TOML file formatting

Extension Points

Custom Fields

Add user-defined fields to any model:

Hooks System

Extend functionality using Django signals:

Admin Customization

Extend Django admin:

Performance Considerations

Caching Strategy

  • Redis for session storage
  • Query result caching for expensive operations
  • Static file caching via nginx

Query Optimization

  • Use select_related() for foreign keys
  • Use prefetch_related() for many-to-many
  • Index frequently queried fields

Database Connection Pooling

PostgreSQL uses connection pooling:

Next Steps

Setup Guide

Set up your development environment

API Reference

Explore the REST API

Contributing

Learn how to contribute

Custom Fields

Extend models with custom fields