Packages

Advanced job monitoring and filtering for Oban with persistent job history

Current section

Files

Jump to
oban_lens README.md
Raw

README.md

# ObanLens

Advanced job monitoring and filtering for Oban with persistent job history, time-based search, detailed forensics, and AI-powered insights.

![ObanLens Dashboard](https://via.placeholder.com/800x400/1f2937/ffffff?text=ObanLens+Dashboard+Preview)

## Features

✨ **Persistent Job History** - Automatically records all job executions to a history table for forensic analysis  
πŸ” **Advanced Filtering** - Filter jobs by worker, queue, state, time range, duration, and search within job args  
⏰ **Time-Based Search** - Find jobs from specific time periods (e.g., "last Tuesday 2-4 PM")  
πŸ”¬ **Job Details & Forensics** - Click any job to see complete details including args, errors, attempts, and execution timeline  
πŸ“Š **CSV Export** - Export filtered job data for compliance audits and reporting  
πŸš€ **Real-time Dashboard** - LiveView dashboard with instant filtering and pagination  
βš™οΈ **Zero Configuration** - Works out of the box with Oban and Oban Pro  

## Installation

Add `oban_lens` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:oban_lens, "~> 0.1.0"}
  ]
end
```

## Quick Setup

**1. Create the database table:**
```bash
mix ecto.gen.migration create_oban_job_history
```

Add to your migration file:
```elixir
def change do
  ObanLens.Migration.create_job_history_table()
end
```

Run the migration:
```bash
mix ecto.migrate
```

**2. Start recording jobs:**

Add one line to your `application.ex`:
```elixir
def start(_type, _args) do
  ObanLens.Telemetry.attach()  # Add this line
  
  children = [
    # ... your existing children
  ]
  
  Supervisor.start_link(children, opts)
end
```

**3. Mount the dashboard:**

In your `router.ex`:
```elixir
defmodule MyAppWeb.Router do
  use MyAppWeb, :router
  import ObanLens.Router
  
  scope "/" do
    pipe_through :browser
    oban_lens_dashboard "/admin/oban"
  end
end
```

**4. Visit your dashboard at `/admin/oban`** πŸŽ‰

## Advanced Configuration

```elixir
# config/config.exs
config :oban_lens,
  # Specify repo (auto-detected from Oban if not set)
  repo: MyApp.ObanRepo,
  
  # How long to keep job history (default: 30 days)
  history_retention_days: 90,
  
  # What job states to record (defaults: all true)
  record_completed: true,
  record_failed: true,
  record_discarded: true
```

## Use Cases

### πŸ” **Forensic Analysis**
- Debug failed jobs with complete execution history
- Track job performance over time
- Identify patterns in job failures

### πŸ“Š **Compliance & Auditing**  
- Export job data for compliance reports
- Maintain audit trails for critical processes
- Track SLA compliance for background jobs

### πŸš€ **Performance Monitoring**
- Monitor job execution times and trends
- Identify slow or resource-heavy jobs
- Optimize queue configurations

### πŸ› οΈ **Operations**
- Real-time monitoring of job processing
- Quick filtering to find specific jobs
- Historical analysis for capacity planning

## Dashboard Features

- **Real-time Filtering** - Filter by worker, queue, state, time range
- **Text Search** - Search within job arguments and metadata  
- **Job Details** - Click any job to see full execution details
- **CSV Export** - Export filtered results for analysis
- **Pagination** - Handle large job histories efficiently
- **Responsive Design** - Works on desktop and mobile

## Works With

- **Elixir** 1.14+
- **Oban** 2.15+ (Free and Pro versions)
- **Phoenix** 1.7+
- **PostgreSQL** (via Ecto)

## Roadmap

### v0.2.0 - AI & Alerts
- πŸ€– Pattern detection in job failures
- πŸ“’ Anomaly alerts (queue growth, failure spikes)
- πŸ’‘ Smart retry suggestions
- πŸ—£οΈ Natural language search

### v1.0.0 - Production Features
- πŸ’Ύ Saved filter presets
- βš™οΈ Custom alert configurations  
- πŸš€ Performance recommendations
- πŸ”— Webhook integrations
- πŸ‘₯ Multi-tenant support

## Contributing

We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Run tests (`mix test`)
4. Commit your changes (`git commit -m 'Add amazing feature'`)
5. Push to the branch (`git push origin feature/amazing-feature`)
6. Open a Pull Request

## Support

- πŸ“– **Documentation**: [hexdocs.pm/oban_lens](https://hexdocs.pm/oban_lens)
- πŸ› **Issues**: [GitHub Issues](https://github.com/your-username/oban_lens/issues)
- πŸ’¬ **Discussions**: [GitHub Discussions](https://github.com/your-username/oban_lens/discussions)
- πŸ—¨οΈ **Community**: [Elixir Forum](https://elixirforum.com)

## License

Copyright Β© 2024 ObanLens

Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for details.

---

**Made with ❀️ for the Elixir community**