47 from cm.utils
import log
48 from cm.utils.exception
import CMException
49 from cm.utils.message
import MESSAGES
50 from common
import response
51 from cm.models.admin
import Admin
52 from functools
import wraps
54 from django.http
import HttpResponse
55 from django.db
import transaction
56 from threading
import Lock
61 from common.utils
import json_convert
63 global decorated_functions
64 global ci_decorated_functions
65 global ctx_decorated_functions
67 decorated_functions = set([])
68 ci_decorated_functions = set([])
69 ctx_decorated_functions = set([])
102 def wrapper(*args, **kwargs):
103 return genericlog(log_enabled=kw.get(
'log',
False), is_user=
False, is_admin_cm=
False, need_ip=
False, fun=fun, args=args)
105 decorated_functions.add(wrapper)
133 def wrapper(*args, **kwargs):
134 return genericlog(log_enabled=kw.get(
'log',
False), is_user=
True, is_admin_cm=
False, need_ip=
False, fun=fun, args=args)
136 decorated_functions.add(wrapper)
168 def wrapper(*args, **kwargs):
169 return genericlog(log_enabled=kw.get(
'log',
False), is_user=
True, is_admin_cm=
True, need_ip=
False, fun=fun, args=args)
171 decorated_functions.add(wrapper)
199 def wrapper(*args, **kwargs):
200 return genericlog(log_enabled=kw.get(
'log',
False), is_user=
False, is_admin_cm=
False, need_ip=
True, fun=fun, args=args)
202 ci_decorated_functions.add(wrapper)
230 def wrapper(request, *args, **kwargs):
231 data = request.GET.dict()
232 data[
'remote_ip'] = request.META.get(
'REMOTE_ADDR')
235 gen_exception =
False
236 log_enabled = kw.get(
'log',
False)
237 name =
'%s.%s' % (fun.__module__.replace(
'cm.views.',
''), fun.__name__)
239 log.debug(0,
'=' * 100)
240 log.debug(0,
'Function: %s' % name)
241 log.debug(0,
'Args:\n%s' % json.dumps(data, indent=4))
242 with transaction.commit_manually():
247 except CMException, e:
248 transaction.rollback()
249 log.exception(0,
'CMException %s' % e)
252 transaction.rollback()
256 if resp[
'status'] !=
'ok' and not log_enabled:
257 log.debug(0,
'=' * 100)
258 log.debug(0,
'Function: %s' % name)
259 log.debug(0,
'ARGS: %s' % str(data))
260 if resp[
'status'] !=
'ok' or log_enabled:
262 log.exception(0,
'General exception')
263 log.debug(0,
'Response: %s' % resp
or 'None')
265 return HttpResponse(json.dumps(resp, default=json_convert))
267 ctx_decorated_functions.add(wrapper)
295 def wrapper(request, *args, **kwargs):
296 log.debug(0,
"request\n%s: " % json.dumps(request.GET.dict(), indent=4))
297 log_enabled = kw.get(
'log',
False)
298 name =
'%s.%s' % (fun.__module__.replace(
'cm.views.',
''), fun.__name__)
300 log.debug(0,
'=' * 100)
301 log.debug(0,
'Function: %s' % name)
305 resp = fun(request, *args, **kwargs)
306 except CMException, e:
307 log.exception(0,
'CMException %s' % e)
309 log.exception(0,
'Exception %s' % e)
311 return HttpResponse(resp)
336 def genericlog(log_enabled, is_user, is_admin_cm, need_ip, fun, args):
340 name =
'%s.%s' % (fun.__module__.replace(
'cm.views.',
''), fun.__name__)
344 data = json.loads(request.body)
351 return response(
'cm_error',
"missing arguments")
353 caller_id = data[
'caller_id']
355 if name
in (
'user.vm.create',
'user.farm.create',
'admin_cm.vm.create',
'admin_cm.farm.create'):
356 lock_name =
'vmcreate'
357 log.debug(caller_id,
'Try acquire lock vmcreate')
358 locks[lock_name].acquire()
359 log.debug(caller_id,
'Lock vmcreate acquired')
362 cm_password = data.pop(
'cm_password')
364 Admin.check_password(caller_id, cm_password)
366 return HttpResponse(json.dumps(
response(
'user_permission'), default=json_convert))
371 data[
'remote_ip'] = request.META.get(
'REMOTE_ADDR')
376 gen_exception =
False
378 log.debug(caller_id,
'=' * 100)
379 log.debug(caller_id,
'Function: %s' % name)
380 log.debug(caller_id,
'Args:\n%s' % json.dumps(data, indent=4))
382 with transaction.commit_manually():
387 except CMException, e:
388 transaction.rollback()
389 log.exception(caller_id,
'CMException %s' % e)
392 transaction.rollback()
397 log.debug(caller_id,
'Try release lock vmcreate')
399 log.debug(caller_id,
'Lock vmcreate released')
403 resp[
'messages'] = MESSAGES.copy()
405 if resp[
'status'] !=
'ok' and not log_enabled:
406 log.debug(caller_id,
'=' * 100)
407 log.debug(caller_id,
'Function: %s' % name)
408 log.debug(caller_id,
'ARGS: %s' % str(data))
409 if resp[
'status'] !=
'ok' or log_enabled:
411 log.exception(caller_id,
'General exception')
412 log.debug(caller_id,
'Response: %s' % resp
or 'None')
413 return HttpResponse(json.dumps(resp, default=json_convert))