Feature Wishlist - snoyberg/keter GitHub Wiki

Feature Requests and Suggestions

Discussed in more detail here:

https://github.com/snoyberg/keter/issues/67

Rate Limiting and Throttling

Configuration for throttling and rate-limiting. There is https://github.com/creichert/wai-middlware-throttle but it is still a new middleware and needs more thorough testing.

Advanced SSL Settings

It would be nice to have support for advanced ssl settings including cache and keep alive configurations. An example nginx configuration looks like:

# outside server block
ssl_session_cache  builtin:1000  shared:SSL:10m;
keepalive_timeout 120;	# 120 second keep alive
ssl_stapling            on;
ssl_stapling_verify     on;
ssl_ecdh_curve          secp521r1;

[..]
# Misc settings
ssl_certificate      /etc/nginx/ssl/mycert.pem;
ssl_certificate_key  /etc/nginx/ssl/mycert.key;
ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;	# default on newer versions
ssl_ciphers          ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES128-SHA:RC4-SHA:RC4-MD5:ECDHE-RSA-AES256-SHA:AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA:AES128-SHA;
ssl_prefer_server_ciphers on;

Memory usage

I have done some preliminary EKG integration but also I stumbled upon the following discussion:

https://groups.google.com/forum/#!topic/yesodweb/NI-BcSOyRVE

Basically, someone has implemented a Wai Subsite for getting garbage collection details from a running app and Michael has implemented the WaiSubsite integration which lets us embed that into any WAI app (no need for Snap via EKG).

Request/Response//Traffic

http://demo.nginx.com/status.html

Email notifications:

I want basic notifications for things like errors, daily statistics, etc.

More Logfile Features:

I'm leaving this one vague because it's one of the easier issues to solve server side with existing tools.

There are ways to do some of these by using existing tools like (Monit, Munin, Supervisord). Either way it would be nice to have some of these features manageable from Keter (or at least some level of integration).

Custom Hooks

Startup and Shutdown Hooks. See https://github.com/snoyberg/keter/issues/114

For a quick and hacky app shutdown hook, you can use a wrapper script. This is an example which copies app profiling to a persistent directory:

#!/bin/bash
./web +RTS -N12 -p -hc &
webPID=$!
trap "export dir=/var/profiles/`date '+%F-%T'`; echo \$dir; mkdir \$dir;  mv *.prof *.hp \$dir; kill $webPID" SIGTERM SIGINT
wait $webPID

Useful examples

I think we can have some example bundles which provide really useful functionality out of the box. Some ideas I've been playing with on my own servers are:

apt-cacher-ng is a package manager proxy which can handle and several different environments including Debian, Arch Linux, Cygwin, among others.

Test Suites

More comprehensive test suites.

User Manuals

Use pandoc to transform README.md to man page.

e.g. pandoc --standalone --to=man --output=doc/man/keter.1 README.md