pump events from STv2 db
This requires the introduction of the time_sync.py service. A trivial HTTP service that allows the POST/GET of timestamps. This can used between the consumer and stream pipeline processor to synchronize time when replaying old events (so they don't expire too prematurely). Change-Id: Iba61b3b75f68a19869d06a0484d2676dd44fdc60
This commit is contained in:
parent
2dfc24c716
commit
d2b591913b
87
bin/pump_from_stv2.py
Normal file
87
bin/pump_from_stv2.py
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
"""Pump simulated OpenStack notificationss into RabbitMQ.
|
||||||
|
|
||||||
|
You need to install rabbitqm-server and
|
||||||
|
pip install librabbitmq
|
||||||
|
pip install --pre notabene
|
||||||
|
pip install --pre notification_utils
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
|
import mysql.connector
|
||||||
|
from notabene import kombu_driver as driver
|
||||||
|
import notification_utils as nu
|
||||||
|
|
||||||
|
|
||||||
|
connection = driver.create_connection("localhost", 5672, 'guest', 'guest',
|
||||||
|
"librabbitmq", "/")
|
||||||
|
exchange = driver.create_exchange("monitor", "topic")
|
||||||
|
queue_name = "monitor.info"
|
||||||
|
queue = driver.create_queue(queue_name, exchange, queue_name,
|
||||||
|
channel=connection.channel())
|
||||||
|
queue.declare()
|
||||||
|
|
||||||
|
cnx = mysql.connector.connect(user='root', password='password',
|
||||||
|
host='127.0.0.1',
|
||||||
|
database='stacktach')
|
||||||
|
|
||||||
|
cursor = cnx.cursor()
|
||||||
|
query = ("SELECT min(stacktach_rawdata.when) AS mindate, "
|
||||||
|
"MAX(stacktach_rawdata.when) AS maxdate "
|
||||||
|
"FROM stacktach_rawdata")
|
||||||
|
cursor.execute(query)
|
||||||
|
mindate, maxdate = list(cursor)[0]
|
||||||
|
cursor.close()
|
||||||
|
|
||||||
|
oldest = nu.dt_from_decimal(mindate)
|
||||||
|
newest = nu.dt_from_decimal(maxdate)
|
||||||
|
|
||||||
|
# Move to the next day so we get all the events for the day.
|
||||||
|
start = oldest.replace(hour=0,minute=0,second=0,microsecond=0) \
|
||||||
|
+ datetime.timedelta(days=1)
|
||||||
|
end = start + datetime.timedelta(days=1, hours=4)
|
||||||
|
|
||||||
|
print "Events from %s to %s" % (oldest, newest)
|
||||||
|
print "Extracting events from %s to %s" % (start, end)
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
dstart = nu.dt_to_decimal(start)
|
||||||
|
dend = nu.dt_to_decimal(end)
|
||||||
|
|
||||||
|
cursor = cnx.cursor()
|
||||||
|
query = ("SELECT stacktach_rawdata.when AS d, "
|
||||||
|
"stacktach_rawdata.json AS rawjson "
|
||||||
|
"FROM stacktach_rawdata "
|
||||||
|
"WHERE (stacktach_rawdata.when BETWEEN %f AND %f) "
|
||||||
|
"AND stacktach_rawdata.event!='compute.instance.updates' "
|
||||||
|
"AND stacktach_rawdata.event!='compute.instance.exists.verified' "
|
||||||
|
"ORDER BY stacktach_rawdata.when LIMIT 100000" % (dstart, dend))
|
||||||
|
cursor.execute(query)
|
||||||
|
|
||||||
|
start = None
|
||||||
|
end = None
|
||||||
|
num = 0
|
||||||
|
for when, rawjson in cursor:
|
||||||
|
when = nu.dt_from_decimal(when)
|
||||||
|
if not start:
|
||||||
|
start = when
|
||||||
|
end = start + datetime.timedelta(days=1)
|
||||||
|
if when > end:
|
||||||
|
break
|
||||||
|
queue, event = json.loads(rawjson)
|
||||||
|
# Skip the noise ...
|
||||||
|
if event['event_type'] in ['compute.instance.update', 'compute.instance.exists.verified']:
|
||||||
|
continue
|
||||||
|
print when, event['event_type']
|
||||||
|
driver.send_notification(event, queue_name, connection, exchange)
|
||||||
|
num+=1
|
||||||
|
|
||||||
|
print "Published %d events" % num
|
||||||
|
|
||||||
|
cursor.close()
|
||||||
|
cnx.close()
|
34
bin/time_sync.py
Normal file
34
bin/time_sync.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import datetime
|
||||||
|
|
||||||
|
import falcon
|
||||||
|
|
||||||
|
|
||||||
|
# gunicorn --log-file=- 'time_sync:get_api()'
|
||||||
|
#
|
||||||
|
# To get the current time
|
||||||
|
# curl localhost:8000/time
|
||||||
|
#
|
||||||
|
# To set the current time
|
||||||
|
# curl --data "2014-10-09 22:55:33.111111" localhost:8000/time
|
||||||
|
|
||||||
|
class TimeResource(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.last_time = None
|
||||||
|
|
||||||
|
def on_get(self, req, resp):
|
||||||
|
resp.body = self.last_time
|
||||||
|
print "GET", self.last_time
|
||||||
|
|
||||||
|
def on_post(self, req, resp):
|
||||||
|
chunk = req.stream.read(4096)
|
||||||
|
self.last_time = chunk
|
||||||
|
print "POST", self.last_time
|
||||||
|
|
||||||
|
|
||||||
|
api = falcon.API()
|
||||||
|
time_resource = TimeResource()
|
||||||
|
api.add_route('/time', time_resource)
|
||||||
|
|
||||||
|
|
||||||
|
def get_api():
|
||||||
|
return api
|
Loading…
Reference in New Issue
Block a user