Skip to content

Instantly share code, notes, and snippets.

@steinnes
Last active August 29, 2015 14:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save steinnes/ead90afa9882e89b995f to your computer and use it in GitHub Desktop.
Save steinnes/ead90afa9882e89b995f to your computer and use it in GitHub Desktop.
redis workload recorder
#!/usr/bin/env python
import time
import signal
import sys
import redis
import socket
def stop(sig, frame):
sys.stdout.flush() # flush whatever is there!
sys.stderr.write("Stopping due to {}\n".format(sig))
sys.exit(1)
def monitor(host, port):
sock = socket.create_connection((host, port))
sock.send('monitor\r\n')
while True:
sys.stdout.write(sock.recv(256))
def start(seconds, host, port=6379):
signal.signal(signal.SIGALRM, stop)
signal.alarm(seconds)
monitor(host, port)
def main():
if len(sys.argv) < 3:
print "Usage: {} <seconds> <host> [<port>]".format(sys.argv[0])
sys.exit(1)
seconds = int(sys.argv[1])
host = str(sys.argv[2])
kwargs = {}
try:
kwargs['port'] = int(sys.argv[3])
except ValueError:
print "Invalid port!"
sys.exit(1)
except IndexError:
pass
start(seconds, host, **kwargs)
if __name__ == "__main__":
main()
@steinnes
Copy link
Author

Usage:

$ screen
$ ./redis-workload-record.py 3600 localhost > 3600-sec-redis-something.log
^A d

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment