Revision 64a3c0de kamaki/clients/__init__.py
b/kamaki/clients/__init__.py | ||
---|---|---|
100 | 100 |
|
101 | 101 |
LOG_TOKEN = False |
102 | 102 |
LOG_DATA = False |
103 |
LOG_PID = False |
|
103 | 104 |
|
104 | 105 |
|
105 | 106 |
class RequestManager(Logged): |
... | ... | |
143 | 144 |
self.scheme, self.netloc = self._connection_info(url, path, params) |
144 | 145 |
|
145 | 146 |
def dump_log(self): |
146 |
sendlog.info('%s %s://%s%s\t[%s]' % ( |
|
147 |
self.method, self.scheme, self.netloc, self.path, self)) |
|
147 |
plog = '\t[%s]' if self.LOG_PID else '' |
|
148 |
sendlog.info('- - - - - - -') |
|
149 |
sendlog.info('%s %s://%s%s%s' % ( |
|
150 |
self.method, self.scheme, self.netloc, self.path, plog)) |
|
148 | 151 |
for key, val in self.headers.items(): |
149 | 152 |
if (not self.LOG_TOKEN) and key.lower() == 'x-auth-token': |
150 | 153 |
continue |
151 |
sendlog.info(' %s: %s\t[%s]' % (key, val, self))
|
|
154 |
sendlog.info(' %s: %s%s' % (key, val, plog))
|
|
152 | 155 |
if self.data: |
153 |
sendlog.info('data size:%s\t[%s]' % (len(self.data), self))
|
|
156 |
sendlog.info('data size:%s%s' % (len(self.data), plog))
|
|
154 | 157 |
if self.LOG_DATA: |
155 | 158 |
sendlog.info(self.data) |
156 | 159 |
else: |
157 |
sendlog.info('data size:0\t[%s]' % self)
|
|
160 |
sendlog.info('data size:0%s' % plog)
|
|
158 | 161 |
sendlog.info('') |
159 | 162 |
|
160 | 163 |
def perform(self, conn): |
... | ... | |
177 | 180 |
wait = 0.03 * random() |
178 | 181 |
sleep(wait) |
179 | 182 |
keep_trying -= wait |
180 |
logmsg = 'Kamaki Timeout %s %s\t[%s]' % (self.method, self.path, self) |
|
183 |
plog = '\t[%s]' if self.LOG_PID else '' |
|
184 |
logmsg = 'Kamaki Timeout %s %s%s' % (self.method, self.path, plog) |
|
181 | 185 |
recvlog.debug(logmsg) |
182 | 186 |
raise ClientError('HTTPResponse takes too long - kamaki timeout') |
183 | 187 |
|
... | ... | |
210 | 214 |
**pool_kw) as connection: |
211 | 215 |
self.request.LOG_TOKEN = self.LOG_TOKEN |
212 | 216 |
self.request.LOG_DATA = self.LOG_DATA |
217 |
self.request.LOG_PID = self.LOG_PID |
|
213 | 218 |
r = self.request.perform(connection) |
214 |
recvlog.info('\n%s <-- %s <-- [req: %s]\n' % ( |
|
215 |
self, r, self.request)) |
|
219 |
plog = '' |
|
220 |
if self.LOG_PID: |
|
221 |
recvlog.info('\n%s <-- %s <-- [req: %s]\n' % ( |
|
222 |
self, r, self.request)) |
|
223 |
plog = '\t[%s]' % self |
|
216 | 224 |
self._request_performed = True |
217 | 225 |
self._status_code, self._status = r.status, unquote( |
218 | 226 |
r.reason) |
219 | 227 |
recvlog.info( |
220 |
'%d %s\t[p: %s]' % (
|
|
221 |
self.status_code, self.status, self))
|
|
228 |
'%d %s%s' % (
|
|
229 |
self.status_code, self.status, plog))
|
|
222 | 230 |
self._headers = dict() |
223 | 231 |
for k, v in r.getheaders(): |
224 | 232 |
if (not self.LOG_TOKEN) and ( |
... | ... | |
226 | 234 |
continue |
227 | 235 |
v = unquote(v) |
228 | 236 |
self._headers[k] = v |
229 |
recvlog.info(' %s: %s\t[p: %s]' % (k, v, self))
|
|
237 |
recvlog.info(' %s: %s%s' % (k, v, plog))
|
|
230 | 238 |
self._content = r.read() |
231 |
recvlog.info('data size: %s\t[p: %s]' % ( |
|
232 |
len(self._content) if self._content else 0, |
|
233 |
self)) |
|
239 |
recvlog.info('data size: %s%s' % ( |
|
240 |
len(self._content) if self._content else 0, plog)) |
|
234 | 241 |
if self.LOG_DATA and self._content: |
235 |
recvlog.info('%s\t[p: %s]' % (self._content, self)) |
|
242 |
recvlog.info('%s%s' % (self._content, plog)) |
|
243 |
sendlog.info('- - - - - - -') |
|
236 | 244 |
break |
237 | 245 |
except Exception as err: |
238 | 246 |
if isinstance(err, HTTPException): |
... | ... | |
246 | 254 |
'\n'.join(['%s' % type(err)] + format_stack())) |
247 | 255 |
raise ClientError( |
248 | 256 |
'Failed while http-connecting to %s (%s)' % ( |
249 |
self.request.url, |
|
250 |
err)) |
|
257 |
self.request.url, err)) |
|
251 | 258 |
|
252 | 259 |
@property |
253 | 260 |
def status_code(self): |
... | ... | |
317 | 324 |
self._exception = e |
318 | 325 |
|
319 | 326 |
|
320 |
class Client(object):
|
|
327 |
class Client(Logged):
|
|
321 | 328 |
|
322 | 329 |
MAX_THREADS = 7 |
323 | 330 |
DATE_FORMATS = ['%a %b %d %H:%M:%S %Y', ] |
324 |
LOG_TOKEN = False |
|
325 |
LOG_DATA = False |
|
326 | 331 |
CONNECTION_RETRY_LIMIT = 0 |
327 | 332 |
|
328 | 333 |
def __init__(self, base_url, token): |
... | ... | |
405 | 410 |
if data: |
406 | 411 |
headers.setdefault('Content-Length', '%s' % len(data)) |
407 | 412 |
|
408 |
sendlog.debug('\n\nCMT %s@%s\t[%s]', method, self.base_url, self) |
|
413 |
plog = '\t[%s]' if self.LOG_PID else '' |
|
414 |
sendlog.debug('\n\nCMT %s@%s%s', method, self.base_url, plog) |
|
409 | 415 |
req = RequestManager( |
410 | 416 |
method, self.base_url, path, |
411 | 417 |
data=data, headers=headers, params=params) |
412 | 418 |
# req.log() |
413 | 419 |
r = ResponseManager( |
414 | 420 |
req, connection_retry_limit=self.CONNECTION_RETRY_LIMIT) |
415 |
r.LOG_TOKEN, r.LOG_DATA = self.LOG_TOKEN, self.LOG_DATA |
|
421 |
r.LOG_TOKEN, r.LOG_DATA, r.LOG_PID = ( |
|
422 |
self.LOG_TOKEN, self.LOG_DATA, self.LOG_PID) |
|
416 | 423 |
finally: |
417 | 424 |
self.headers = dict() |
418 | 425 |
self.params = dict() |
Also available in: Unified diff