windmill

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Dec 31, 2025 License: MIT Imports: 6 Imported by: 0

README

Windmill

Go Reference Go Report Card codecov

A real-time monitoring dashboard for Watermill applications using Redis Streams. Windmill provides visibility into your message streams and Dead Letter Queue (DLQ), allowing you to monitor, debug, and manage failed messages.

Features

  • Stream Monitoring - View all Redis Streams with message counts, memory usage, and activity
  • Dead Letter Queue Management - Inspect, requeue, or delete failed messages
  • Bulk Operations - Requeue all DLQ messages with a single click

Installation

go get github.com/scmofeoluwa/windmill

Quick Start

package main

import (
    "log"
    "net/http"

    "github.com/redis/go-redis/v9"
    "github.com/scmofeoluwa/windmill"
)

func main() {
    rc := redis.NewClient(&redis.Options{Addr: "localhost:6379"})

    wm, err := windmill.New(windmill.Config{
        RedisClient: rc,
        DLQName:     "poison_queue",
    })
    if err != nil {
        log.Fatal(err)
    }

    log.Println("Dashboard running on http://localhost:3000")
    http.ListenAndServe(":3000", wm.Handler())
}

[!NOTE] Set WINDMILL_USERNAME and WINDMILL_PASSWORD environment variables for Basic Auth.

See the examples/basic directory for a complete working example.

Framework Integration

Windmill returns a standard http.Handler, making it compatible with any Go router:

// Chi
r.Mount("/windmill", wm.Handler())

// Gin
r.Any("/windmill/*any", gin.WrapH(wm.Handler()))

// Echo
e.Any("/windmill/*", echo.WrapHandler(wm.Handler()))

// Fiber
app.Use("/windmill", adaptor.HTTPHandler(wm.Handler()))

Roadmap

We're actively working on expanding Windmill's capabilities:

  • Consumer Group Monitoring - View consumer groups, pending messages, and lag metrics
  • Message Search & Filtering - Search messages by payload content or metadata
  • Stream Analytics - Throughput graphs and historical metrics
  • Message Replay - Replay specific messages to their original streams
  • Alerting - Configurable alerts for DLQ thresholds and consumer lag

Have a feature request? Open an issue!

Contributing

Contributions are welcome! Feel free to open an issue or submit a pull request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	RedisClient redis.UniversalClient
	DLQName     string
}

type Windmill

type Windmill struct {
	// contains filtered or unexported fields
}

func New

func New(config Config) (*Windmill, error)

func (*Windmill) Handler

func (w *Windmill) Handler() http.Handler

Directories

Path Synopsis
examples
basic command
internal
api

Jump to

Keyboard shortcuts

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