Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-backend / pithos / backends / lib / rabbitmq / queue.py @ 89362181

History | View | Annotate | Download (3 kB)

1 46286f5f Antony Chazapis
# Copyright 2012 GRNET S.A. All rights reserved.
2 2715ade4 Sofia Papagiannaki
#
3 46286f5f Antony Chazapis
# Redistribution and use in source and binary forms, with or
4 46286f5f Antony Chazapis
# without modification, are permitted provided that the following
5 46286f5f Antony Chazapis
# conditions are met:
6 2715ade4 Sofia Papagiannaki
#
7 46286f5f Antony Chazapis
#   1. Redistributions of source code must retain the above
8 46286f5f Antony Chazapis
#      copyright notice, this list of conditions and the following
9 46286f5f Antony Chazapis
#      disclaimer.
10 2715ade4 Sofia Papagiannaki
#
11 46286f5f Antony Chazapis
#   2. Redistributions in binary form must reproduce the above
12 46286f5f Antony Chazapis
#      copyright notice, this list of conditions and the following
13 46286f5f Antony Chazapis
#      disclaimer in the documentation and/or other materials
14 46286f5f Antony Chazapis
#      provided with the distribution.
15 2715ade4 Sofia Papagiannaki
#
16 46286f5f Antony Chazapis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 46286f5f Antony Chazapis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 46286f5f Antony Chazapis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 46286f5f Antony Chazapis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 46286f5f Antony Chazapis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 46286f5f Antony Chazapis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 46286f5f Antony Chazapis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 46286f5f Antony Chazapis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 46286f5f Antony Chazapis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 46286f5f Antony Chazapis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 46286f5f Antony Chazapis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 46286f5f Antony Chazapis
# POSSIBILITY OF SUCH DAMAGE.
28 2715ade4 Sofia Papagiannaki
#
29 46286f5f Antony Chazapis
# The views and conclusions contained in the software and
30 46286f5f Antony Chazapis
# documentation are those of the authors and should not be
31 46286f5f Antony Chazapis
# interpreted as representing official policies, either expressed
32 46286f5f Antony Chazapis
# or implied, of GRNET S.A.
33 46286f5f Antony Chazapis
34 f4fbb0fa Sofia Papagiannaki
import json
35 89362181 Sofia Papagiannaki
from hashlib import sha1
36 89362181 Sofia Papagiannaki
from random import random
37 89362181 Sofia Papagiannaki
from time import time
38 46286f5f Antony Chazapis
39 f4fbb0fa Sofia Papagiannaki
from synnefo.lib.amqp import AMQPClient
40 89362181 Sofia Papagiannaki
41 89362181 Sofia Papagiannaki
42 89362181 Sofia Papagiannaki
class Message(object):
43 89362181 Sofia Papagiannaki
    def __init__(self, client, user, instance, resource, value, details={}):
44 89362181 Sofia Papagiannaki
        self.eventVersion = '1.0'
45 89362181 Sofia Papagiannaki
        self.occurredMillis = int(time() * 1000)
46 89362181 Sofia Papagiannaki
        self.receivedMillis = self.occurredMillis
47 89362181 Sofia Papagiannaki
        self.clientID = client
48 89362181 Sofia Papagiannaki
        self.userID = user
49 89362181 Sofia Papagiannaki
        self.instanceID = instance
50 89362181 Sofia Papagiannaki
        self.resource = resource
51 89362181 Sofia Papagiannaki
        self.value = value
52 89362181 Sofia Papagiannaki
        self.details = details
53 89362181 Sofia Papagiannaki
        hash = sha1()
54 89362181 Sofia Papagiannaki
        hash.update(json.dumps(
55 89362181 Sofia Papagiannaki
            [client, user, resource, value, details, random()]))
56 89362181 Sofia Papagiannaki
        self.id = hash.hexdigest()
57 89362181 Sofia Papagiannaki
58 46286f5f Antony Chazapis
59 46286f5f Antony Chazapis
class Queue(object):
60 46286f5f Antony Chazapis
    """Queue.
61 f4fbb0fa Sofia Papagiannaki
       Required constructor parameters: hosts, exchange, client_id.
62 46286f5f Antony Chazapis
    """
63 2715ade4 Sofia Papagiannaki
64 46286f5f Antony Chazapis
    def __init__(self, **params):
65 f4fbb0fa Sofia Papagiannaki
        hosts = params['hosts']
66 f4fbb0fa Sofia Papagiannaki
        self.exchange = params['exchange']
67 fa9cae7e Antony Chazapis
        self.client_id = params['client_id']
68 2715ade4 Sofia Papagiannaki
69 f4fbb0fa Sofia Papagiannaki
        self.client = AMQPClient(hosts=hosts)
70 f4fbb0fa Sofia Papagiannaki
        self.client.connect()
71 f4fbb0fa Sofia Papagiannaki
72 f4fbb0fa Sofia Papagiannaki
        self.client.exchange_declare(exchange=self.exchange,
73 f4fbb0fa Sofia Papagiannaki
                                     type='topic')
74 2715ade4 Sofia Papagiannaki
75 f4fbb0fa Sofia Papagiannaki
    def send(self, message_key, user, instance, resource, value, details):
76 89362181 Sofia Papagiannaki
        body = Message(
77 89362181 Sofia Papagiannaki
            self.client_id, user, instance, resource, value, details)
78 f4fbb0fa Sofia Papagiannaki
        self.client.basic_publish(exchange=self.exchange,
79 f4fbb0fa Sofia Papagiannaki
                                  routing_key=message_key,
80 89362181 Sofia Papagiannaki
                                  body=json.dumps(body.__dict__))
81 89362181 Sofia Papagiannaki
82 b9a8feec root
    def close(self):
83 f4fbb0fa Sofia Papagiannaki
        self.client.close()