From d14f409198573abbb56e4169d5ae2639a1f9e1ac Mon Sep 17 00:00:00 2001 From: Sandy Walsh Date: Thu, 15 May 2014 18:59:20 +0000 Subject: [PATCH] version 1 --- README.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ setup.cfg | 22 +++++++++++++++++++++ setup.py | 8 ++++++++ 3 files changed, 89 insertions(+) create mode 100644 setup.cfg create mode 100644 setup.py diff --git a/README.md b/README.md index 4f55332..6070619 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,62 @@ notigen ======= OpenStack-like notification generator. + +It works like this: In OpenStack an operation is a series of notifications +connected by a common request_id. For example, to create an instance we would +have the following events: + +compute.run_instance.start +scheduler.run_instance.start +scheduler.run_instance.scheduled +scheduler.run_instance.end +compute.instance.update +compute.instance.update +compute.instance.update +compute.instance.update +compute.instance.update +compute.instance.update +compute.run_instance.end + +But, since this is a large system, we could have lots of these operations +going on currently. Each operation takes time to perform. So the +notifications generated by these operations are interleaved. + +This library simulates these many concurrent operations. You tell +the EventGenerator how many new operations to start per minute +and it will. Note that you'll get a lot more notification than +the operations/second (since the operations persist over time in the +future). + +The library tries to avoid bad sequences (like doing an update on +a deleted instance), but it can happen in some race conditions. + +You can generate in real-time by passing in a real datetime or +you can generate the events as fast as possible by incrementing +a starting time by the tick amount. See the examples below. + +To generate events in real-time ... + + g = EventGenerator(100) # Number of operations per minute + now = datetime.datetime.utcnow() + start = now + nevents = 0 + while nevents < 10000: + e = g.generate(now) + if e: + nevents += len(e) + + now = datetime.datetime.utcnow() + +To generate events as fast as possible ... + + g = EventGenerator(100) # Not really relevant + now = datetime.datetime.utcnow() + start = now + nevents = 0 + while nevents < 10000: + e = g.generate(now) + if e: + nevents += len(e) + + now = g.move_to_next_tick(now) diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..20c1d31 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,22 @@ +[metadata] +name = notigen +author = Dark Secret Software Inc. +author-email = admin@darksecretsoftware.com +summary = OpenStack-like notification generator +description-file = README.md +license = Apache-2 +classifier = + Development Status :: 2 - Pre-Alpha + Environment :: Console + Intended Audience :: Developers + Intended Audience :: Information Technology + License :: OSI Approved :: Apache Software License + Operating System :: OS Independent + Programming Language :: Python + Topic :: Software Development :: Libraries :: Python Modules +keywords = + setup + distutils +[files] +packages = + notigen diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..aa2d8a0 --- /dev/null +++ b/setup.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from setuptools import setup + +setup( + setup_requires=['pbr'], + pbr=True, +)