blob: f1c46e1900f2acffc68f39dd52aa66800a818987 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
'''
Created on Aug 15, 2017
@author: sw6830
'''
import os
import posixpath
import BaseHTTPServer
import urllib
import urlparse
import cgi
import sys
import shutil
import mimetypes
from robot_library import DcaeVariables
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
class DMaaPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def __init__(self, dmaap_simulator, *args):
self.dmaap_simulator = dmaap_simulator
BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, *args)
def do_POST(self):
if 'POST' not in self.requestline:
resp_code = 405
else:
resp_code = self.parse_the_posted_data()
if resp_code == 0:
self.send_successful_response()
else:
self.send_response(resp_code)
def parse_the_posted_data(self):
topic = self.extract_topic_from_path()
content_len = self.get_content_length()
post_body = self.rfile.read(content_len)
post_body = self.get_json_part_of_post_body(post_body)
event = "{\"" + topic + "\":" + post_body + "}"
if self.dmaap_simulator.enque_event(event):
resp_code = 0
else:
print "enque event fails"
resp_code = 500
return resp_code
def get_json_part_of_post_body(self, post_body):
indx = post_body.index("{")
if indx != 0:
post_body = post_body[indx:]
return post_body
def extract_topic_from_path(self):
return self.path["/events/".__len__():]
def get_content_length(self):
return int(self.headers.getheader('content-length', 0))
def send_successful_response(self):
if 'clientThrottlingState' in self.requestline:
self.send_response(204)
else:
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write("{'count': 1, 'serverTimeMs': 3}")
self.wfile.close()
|