OpenStack Messaging (Zaqar)
Go to file
Eva Balycheva bd86d38a76 Make websocket.html process notifications
Currently Websocket html client example can only process responses from
Zaqar. It can't handle notifications from Zaqar.

When notification is received by Websocket html client example
(examples/websocket.html), javascript console throws an Exception:
TypeError: data.request is undefined

That's because Websocket html client example always expects received
payload('data' object) to have 'request', 'headers' and 'body'
properties. All these properties exist in payload only when response
from Zaqar is received.
But when notification is received, 'data' object do not have 'request'
and 'headers' properties.

This patch makes Websocket html client example able to process
notifications from Zaqar by examining 'data' object's properties and,
if notification is detected, processing 'data' differently.

Closes-Bug: 1531671
Change-Id: I3ea4d092f097d22784f21bf9c38657ff4e12c32d
2016-01-07 17:41:00 +03:00
devstack Add the default repos into devstack/settings file 2015-11-20 22:54:43 +05:30
doc Fix the docs link 2016-01-05 16:44:47 +08:00
etc Use keystonemiddleware in config generation conf 2015-10-16 11:41:12 -04:00
examples Make websocket.html process notifications 2016-01-07 17:41:00 +03:00
rally-jobs Merge "Adds max failure rate limit" 2015-09-21 21:39:43 +00:00
releasenotes Add unreleased notes for releasenotes tree 2015-12-03 10:46:37 +13:00
tools/doc Update oslo-config-generation code 2014-11-17 21:49:53 +01:00
zaqar Merge "Replace assertEqual(None, *) with assertIsNone in tests" 2016-01-06 22:51:57 +00:00
.coveragerc Rename Marconi to Zaqar 2014-08-04 10:36:50 +02:00
.gitignore Add reno for release notes management 2015-11-09 11:26:47 -03:00
.gitreview Fix .gitreview due to the repo rename/move 2014-08-16 21:30:22 +04:00
.testr.conf Move functional tests out of tests/ 2015-06-19 09:55:41 +02:00
AUTHORS.rst refactor: Rename AUTHORS so that it doesn't keep getting overwritten 2013-03-19 16:33:43 -04:00
babel.cfg Prepare marconi for localization 2014-06-04 22:31:55 +02:00
bench-requirements.txt Add observer role to benchmark tool 2014-08-29 10:30:51 -05:00
CONTRIBUTING.rst Added CONTRIBUTING.rst file 2015-11-16 00:27:43 +05:30
doc-test.conf Rename Marconi to Zaqar 2014-08-04 10:36:50 +02:00
dox.yml Add a dox.yml config file 2014-09-08 13:55:13 +02:00
HACKING.rst Fix few typos in headings 2015-09-19 16:37:56 +05:30
LICENSE Include full license text 2014-03-21 10:16:28 +01:00
README.rst Some prerequisites for Fedora OS is missing in zaqar README.rst 2015-10-20 14:22:24 +08:00
requirements.txt Updated from global requirements 2016-01-06 04:58:37 +00:00
setup.cfg remove python 2.6 trove classifier 2015-12-23 01:31:17 +00:00
setup.py Updated from global requirements 2015-09-19 05:42:08 +00:00
test-requirements.txt Updated from global requirements 2015-12-09 22:02:40 +00:00
tox.ini Merge "Deprecated tox -downloadcache option removed" 2016-01-05 00:43:43 +00:00

Zaqar

Message queuing service for OpenStack. To find more information read our wiki.

Running a local Zaqar server with MongoDB

Note: These instructions are for running a local instance of Zaqar and not all of these steps are required. It is assumed you have MongoDB and tox (see "Running tests" section below) installed and running.

  1. Install prerequisites:

# Ubuntu/Debian: sudo apt-get install gcc python-pip libxml2-dev libxslt1-dev python-dev zlib1g-dev

# Fedora/RHEL: sudo yum install gcc python-pip libxml2-devel libxslt-devel python-devel

  1. From your home folder create the ~/.zaqar folder and clone the repo:

    $ cd
    $ mkdir ~/.zaqar
    $ git clone https://git.openstack.org/openstack/zaqar.git
  2. Generate and copy the Zaqar config files to the directory ~/.zaqar:

    $ pip install tox
    $ cd zaqar
    $ tox -e genconfig
    $ cp etc/zaqar.conf.sample ~/.zaqar/zaqar.conf
    $ cp etc/logging.conf.sample ~/.zaqar/logging.conf
  3. Find [drivers] section in ~/.zaqar/zaqar.conf and specify to use mongodb storage:

    message_store = mongodb
    management_store = mongodb

    Then find the [drivers:message_store:mongodb] and [drivers:management_store:mongodb] sections and specify the URI to point to your local mongod instance by adding this line to both the sections:

    uri = mongodb://$MONGODB_HOST:$MONGODB_PORT

    By default, you will have:

    uri = mongodb://127.0.0.1:27017

    NOTE: If your local dev/test mongodb doesn't enable the replica set, then you have to set below in [default] section:

    unreliable = True
  4. For logging, find the [handler_file] section in ~/.zaqar/logging.conf and modify as desired:

    args=('zaqar.log', 'w')
  5. Change directories back to your local copy of the repo:

    $ cd ~/zaqar
  6. Run the following so you can see the results of any changes you make to the code without having to reinstall the package each time:

    $ pip install -e .
  7. Start the Zaqar server with logging level set to INFO so you can see the port on which the server is listening:

    $ zaqar-server -v
  8. Test out that Zaqar is working by creating a queue:

    $ ZQ_CLIENT_ID=`uuidgen`
    $ curl -i -X PUT http://127.0.0.1:8888/v1.1/queues/samplequeue \
      -H "Content-type: application/json" \
      -H "Client-ID: $ZQ_CLIENT_ID" \
      -H "X-PROJECT-ID: default"

You should get an HTTP 201 along with some headers that will look similar to this:

HTTP/1.0 201 Created
Date: Fri, 25 Oct 2013 15:34:37 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Length: 0
Location: /v1.1/queues/samplequeue

Running tests

Run tests using the following command:

$ tox -e py27

You can read more about running functional tests in separate TESTS_README.

Running the benchmarking tool

First install and run zaqar-server (see above).

Then install additional requirements:

$ pip install -r bench-requirements.txt

Copy the configuration file to ~/.zaqar:

$ cp etc/zaqar-benchmark.conf.sample ~/.zaqar/zaqar-benchmark.conf

In the configuration file specify where zaqar-server can be found:

server_url = http://localhost:8888

The benchmarking tool needs a set of messages to work with. Specify the path to the file with messages in the configuration file. Alternatively, put it in the directory with the configuration file and name it zaqar-benchmark- messages.json. As a starting point, you can use the sample file from the etc directory:

$ cp etc/zaqar-benchmark-messages.json ~/.zaqar/

If the file is not found or no file is specified, a single hard-coded message is used for all requests.

Run the benchmarking tool using the following command:

$ zaqar-bench

By default, the command will run a performance test for 5 seconds, using one producer process with 10 greenlet workers, and one observer process with 5 workers. The consumer role is disabled by default.

You can override these defaults in the config file or on the command line using a variety of options. For example, the following command runs a performance test for 30 seconds using 4 producer processes with 20 workers each, plus 4 consumer processes with 20 workers each. Note that the observer role is also disabled in this example by setting its number of workers to zero:

$ zaqar-bench -pp 4 -pw 10 -cp 4 -cw 20 -ow 0 -t 30

By default, the results are in JSON. For more human-readable output add the --verbose flag. Verbose output looks similar to the following:

$ zaqar-bench --verbose

Starting producer (pp=1 , pw=10)...

Starting observer (op=1 , ow=5)...

Producer
========
duration_sec: 5.1
ms_per_req: 2.9
reqs_per_sec: 344.5
successful_reqs: 1742.0
total_reqs: 1742.0

Observer
========
duration_sec: 5.0
ms_per_req: 2.9
reqs_per_sec: 339.3
successful_reqs: 1706.0
total_reqs: 1706.0