goralim

package module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Mar 15, 2024 License: MIT Imports: 6 Imported by: 0

README

banner

Goralim

goralim is a Golang package that provides a rate limiter based on Token bucket algorithm. It is capabale to handle distributed workload with its redis database support. It has HTTP server middleware support (as of now).

this is a beta version now and under active development. For production use, fork it and made changes based on your need.

Install

go get "github.com/0verread/goralim"

Usage

import (
  goralim "github.com/0verread/goralim"
)

  // Redis initialization
	config := goralim.RedisConfig {
		HOST: "127.0.0.1",
		PORT: 6379,
    // password
		AUTH: "",
	}
	redisStore := goralim.NewRedisClient(config)

  // setup rate limiter for a key (key can be userId/client)
  // 10 is bucket size, 5 is bucket refill rate per second 
  tb := goralim.NewTokenBucket("key123", redisStore, 10, 5)

  // create HTTP server and setup a goralim middleware to put a rate limiter
  handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintln(w, "Hey There this is a Request")
	})

	rateLimitedHandler := goralim.RateLimiter(tb, handler)
	http.ListenAndServe(":8080", rateLimitedHandler)

License

Under MIT license

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewRedisClient

func NewRedisClient(config RedisConfig) *redis.Client

func RateLimiter

func RateLimiter(tb *TokenBucket, next http.Handler) http.Handler

Types

type RedisConfig

type RedisConfig struct {
	HOST string
	PORT int
	AUTH string
}

type TokenBucket

type TokenBucket struct {
	Key            string
	RedisClient    *redis.Client
	Capacity       int
	RefillRate     int
	Tokens         int
	LastRefilledAt time.Time
	// contains filtered or unexported fields
}

func NewTokenBucket

func NewTokenBucket(key string, redisClient *redis.Client, capacity int, refillRate int) *TokenBucket

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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