yandex_logger поменял на FinanceLogger

remotes/origin/revert-6d879fe8
wad 8 years ago
parent 713e878a25
commit ad10e269d8
  1. 5
      config_app/management/commands/for_test.py
  2. 12
      finance/loggers.py
  3. 7
      finance/management/commands/yandex_repeat_payment.py
  4. 16
      finance/tasks.py
  5. 105
      finance/views.py

@ -1,17 +1,16 @@
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from finance.loggers import FinanceLogger
class Command(BaseCommand): class Command(BaseCommand):
help = 'Команда для тестов' help = 'Команда для тестов'
def handle(self, *args, **options): def handle(self, *args, **options):
from finance.loggers import FinanceLogger
logger = FinanceLogger() logger = FinanceLogger()
try: try:
10 / 0 10 / 0
except Exception as exc: except Exception as exc:
logger.exception('logger_yandex test log record', extra={'asdf': 3246523}, logger.exception('FinanceLogger test log record', extra={'asdf': 3246523},
invoice_id=42, exc={'a': 1, 'b': 3, 'привет': 'медвед'} invoice_id=42, exc={'a': 1, 'b': 3, 'привет': 'медвед'}
) )

@ -11,8 +11,16 @@ class FinanceLogger:
'format': '%(asctime)s - %(levelname)s - %(message)s - %(finance_data)s' 'format': '%(asctime)s - %(levelname)s - %(message)s - %(finance_data)s'
""" """
def __init__(self, prefix=None):
self.prefix = prefix
def log(self, level, msg, *args, **kwargs): def log(self, level, msg, *args, **kwargs):
_logger.log(level=level, msg=msg, *args, **self._make_kwargs(kwargs)) _logger.log(level=level, msg=self._get_msg(msg), *args, **self._make_kwargs(kwargs))
def _get_msg(self, msg):
if self.prefix:
msg = '{}: {}'.format(self.prefix, msg)
return msg
def _make_kwargs(self, kwargs): def _make_kwargs(self, kwargs):
new_kwargs = {} new_kwargs = {}
@ -45,4 +53,4 @@ class FinanceLogger:
def exception(self, msg, *args, **kwargs): def exception(self, msg, *args, **kwargs):
kwargs['stack_info'] = True kwargs['stack_info'] = True
_logger.exception(msg, *args, **self._make_kwargs(kwargs)) _logger.exception(self._get_msg(msg), *args, **self._make_kwargs(kwargs))

@ -1,15 +1,14 @@
import logging
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from finance.loggers import FinanceLogger
from finance.tasks import periodic_billing from finance.tasks import periodic_billing
logger_yandex = logging.getLogger('yandex_money') finance_logger = FinanceLogger() # prefix='YandexMoney'
class Command(BaseCommand): class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
logger_yandex.info("start console repeat payment command") finance_logger.info("start console repeat payment command")
print('Started') print('Started')
periodic_billing() periodic_billing()

@ -7,15 +7,15 @@ from django.db import transaction
from django.utils import timezone from django.utils import timezone
from yandex_money.models import Payment from yandex_money.models import Payment
from finance.loggers import FinanceLogger
from finance.models import InvoiceRebilling from finance.models import InvoiceRebilling
from lms import celery_app from lms import celery_app
logger_yandex = logging.getLogger('yandex_money') finance_logger = FinanceLogger()
@celery_app.task @celery_app.task
def periodic_billing(): def periodic_billing():
logger_yandex.info("start periodic billing task") finance_logger.info("start periodic billing task")
invoices = InvoiceRebilling.objects.filter(method='Y').exclude(status='F') invoices = InvoiceRebilling.objects.filter(method='Y').exclude(status='F')
for invoice in invoices.filter(expected_date__lt=timezone.now()): for invoice in invoices.filter(expected_date__lt=timezone.now()):
# выбираем все необработанные из прошлого # выбираем все необработанные из прошлого
@ -23,9 +23,7 @@ def periodic_billing():
try: try:
_yandex_repeat_card_payment(invoice) _yandex_repeat_card_payment(invoice)
except Exception as exc: except Exception as exc:
logger_yandex.critical('periodic billing Exception', exc_info=True, extra={ finance_logger.exception('YandexMoney repeatCardPayment Exception', invoice_id=invoice.id)
'invoice id': invoice.id, 'exc': exc
})
invoice.comment = 'Ошибка при попытке повторного платежа, свяжитесь с клиентской службой' invoice.comment = 'Ошибка при попытке повторного платежа, свяжитесь с клиентской службой'
invoice.save() invoice.save()
@ -42,6 +40,7 @@ def _yandex_repeat_card_payment(invoice):
) )
invoice.yandex_pay = yandex_pay invoice.yandex_pay = yandex_pay
finance_logger.info('YandexMoney repeatCardPayment start', invoice_id=invoice.id)
resp = requests.post( resp = requests.post(
url=settings.YANDEX_MONEY_MWS_URL + 'repeatCardPayment', url=settings.YANDEX_MONEY_MWS_URL + 'repeatCardPayment',
data={ data={
@ -57,6 +56,5 @@ def _yandex_repeat_card_payment(invoice):
verify=os.path.join(settings.SSL_ROOT, 'yamoney_chain.cer') verify=os.path.join(settings.SSL_ROOT, 'yamoney_chain.cer')
) )
# TODO тут проверять нет ли ошибки яндекса (даже при 200 ответе) # TODO тут проверять нет ли ошибки яндекса (даже при 200 ответе)
logger_yandex.info('periodic billing finish', exc_info=True, extra={ finance_logger.info('YandexMoney repeatCardPayment ended',
'response': resp.text, 'code': resp.status_code, invoice_id=invoice.id, response=resp.text, code=resp.status_code, )
})

@ -1,32 +1,32 @@
import csv import csv
import logging import uuid
import requests import requests
from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
from django.core.mail import EmailMultiAlternatives
from django.db import IntegrityError from django.db import IntegrityError
from django.db.models import Q from django.db.models import Q
from django.http import HttpResponse, HttpResponseForbidden from django.http import HttpResponse, HttpResponseForbidden
from django.shortcuts import redirect, render_to_response from django.shortcuts import redirect, render_to_response
from django.template.loader import render_to_string
from django.utils import timezone
from django.utils.html import strip_tags
from rest_framework.renderers import JSONRenderer from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework.views import APIView
from yandex_money.models import Payment from yandex_money.models import Payment
from django.conf import settings
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from courses.models import Course
from courses.api import CourseParamsApi from courses.api import CourseParamsApi
from courses.models import Course
from finance.loggers import FinanceLogger
from finance.models import Bill, Invoice, InvoiceRebilling from finance.models import Bill, Invoice, InvoiceRebilling
from finance.serializers import BillSerializer, InvoiceSerializer from finance.serializers import BillSerializer, InvoiceSerializer
from lms.global_decorators import transaction_decorator from lms.global_decorators import transaction_decorator
from lms.tools import get_real_name from lms.tools import get_real_name
from django.utils import timezone
import uuid
logger_yandex = logging.getLogger('yandex_money') finance_logger = FinanceLogger() # prefix='YandexMoney'
def test_pay(request): def test_pay(request):
@ -337,9 +337,7 @@ class YandexPay(APIView):
msg.send() msg.send()
except Exception as exc: except Exception as exc:
logger_yandex.error('YandexPay: Email not sended', exc_info=True, extra={ finance_logger.exception('YandexPay: Email not sended')
'exc': exc
})
return redirect(r.url) return redirect(r.url)
@ -395,41 +393,35 @@ class YandexCheckView(APIView):
val = i.split('=')[1] val = i.split('=')[1]
data[key] = val data[key] = val
logger_yandex.info('Проверка платежа запрос', exc_info=True, extra={ finance_logger.info('Проверка платежа запрос', request=data)
'request': data,
})
order_number = data['orderNumber']
try: try:
pay = Payment.objects.get(order_number=data['orderNumber']) pay = Payment.objects.get(order_number=order_number)
except Payment.DoesNotExist: except Payment.DoesNotExist:
logger_yandex.error('Ошибка проверки платежа', exc_info=True, extra={ finance_logger.error('Ошибка проверки платежа', exc_info=True,
'request': "Payment with id=%s not found" % data['orderNumber'], request="Payment with id=%s not found" % order_number)
})
return Response(status=204) return Response(status=204)
if not pay.status == Payment.STATUS.PROCESSED: if not pay.status == Payment.STATUS.PROCESSED:
logger_yandex.error('Ошибка проверки платежа', exc_info=True, extra={ finance_logger.error('Ошибка проверки платежа',
'request': "Payment with id=%s have status %s" % (data['orderNumber'], pay.status), order_number=order_number,
}) request="Payment with id=%s have status %s" % (order_number, pay.status))
return Response(status=204) return Response(status=204)
if not pay.shop_id == int(data['shopId']): if not pay.shop_id == int(data['shopId']):
logger_yandex.error('Ошибка проверки платежа', exc_info=True, extra={ finance_logger.error('Ошибка проверки платежа',
'request': "ShopId=%s not match" % (data['shopId'],), request="ShopId=%s not match" % (data['shopId'],))
})
return Response(status=204) return Response(status=204)
if not pay.scid == int(data['scid']): if not pay.scid == int(data['scid']):
logger_yandex.error('Ошибка проверки платежа', exc_info=True, extra={ finance_logger.error('Ошибка проверки платежа',
'request': "scid=%s not match" % (data['scid'],) request="scid=%s not match" % (data['scid'],))
})
return Response(status=204) return Response(status=204)
if not pay.order_amount == float(data['orderSumAmount']): if not pay.order_amount == float(data['orderSumAmount']):
logger_yandex.error('Ошибка проверки платежа', exc_info=True, extra={ finance_logger.error('Ошибка проверки платежа',
'request': "Expected amount is %s received amount is %s" request="Expected amount is %s received amount is %s" % (pay.order_amount, data['orderSumAmount']))
% (pay.order_amount, data['orderSumAmount']),
})
return Response(status=204) return Response(status=204)
now = timezone.now() now = timezone.now()
@ -439,9 +431,7 @@ class YandexCheckView(APIView):
xml_res = """<checkOrderResponse performedDatetime="%s" code="0" invoiceId="%s" shopId="%s"/> xml_res = """<checkOrderResponse performedDatetime="%s" code="0" invoiceId="%s" shopId="%s"/>
""" % (pay.performed_datetime, str(data['invoiceId']), str(pay.shop_id)) """ % (pay.performed_datetime, str(data['invoiceId']), str(pay.shop_id))
logger_yandex.info('Проверка платежа ответ', exc_info=True, extra={ finance_logger.info('Проверка платежа ответ', response=xml_res)
'response': xml_res,
})
return HttpResponse(xml_res, content_type='application/xml') return HttpResponse(xml_res, content_type='application/xml')
@ -457,17 +447,16 @@ class YandexAvisoView(APIView):
val = i.split('=')[1] val = i.split('=')[1]
data[key] = val data[key] = val
order_number = data['orderNumber']
try: try:
pay = Payment.objects.get(order_number=data['orderNumber']) pay = Payment.objects.get(order_number=order_number)
except Payment.DoesNotExist: except Payment.DoesNotExist:
logger_yandex.error('Ошибка подтверждения платежа', exc_info=True, extra={ finance_logger.error('Ошибка подтверждения платежа', exc_info=True,
'request': "Payment with invoice_id=%s not found" % data['orderNumber'], request="Payment with invoice_id=%s not found" % order_number)
})
return Response(status=204) return Response(status=204)
logger_yandex.info('Подтверждение платежа запрос', exc_info=True, extra={ finance_logger.info('Подтверждение платежа запрос',
'request': 'Get success pay with invoice_id(yandex) %s' % str(data['invoiceId']), request='Get success pay with invoice_id(yandex) %s' % str(data['invoiceId']))
})
pay.shop_amount = data['shopSumAmount'] pay.shop_amount = data['shopSumAmount']
# invoice = pay.invoice # invoice = pay.invoice
@ -481,9 +470,7 @@ class YandexAvisoView(APIView):
xml_res = """<paymentAvisoResponse performedDatetime="%s" code="0" invoiceId="%s" shopId="%s"/> xml_res = """<paymentAvisoResponse performedDatetime="%s" code="0" invoiceId="%s" shopId="%s"/>
""" % (pay.performed_datetime, str(data['invoiceId']), str(pay.shop_id)) """ % (pay.performed_datetime, str(data['invoiceId']), str(pay.shop_id))
logger_yandex.info('Подтверждение платежа ответ', exc_info=True, extra={ finance_logger.info('Подтверждение платежа ответ', response=xml_res)
'response': xml_res,
})
context = { context = {
'user_email': pay.invoice.bill.user.email, 'user_email': pay.invoice.bill.user.email,
@ -518,7 +505,7 @@ class YandexFailView(APIView):
val = i.split('=')[1] val = i.split('=')[1]
data[key] = val data[key] = val
logger_yandex.error(data) finance_logger.error('YandexFailView', data=data)
return redirect(to=settings.DOMAIN) return redirect(to=settings.DOMAIN)
@ -536,12 +523,10 @@ class DemoYandexCheckView(APIView):
val = i.split('=')[1] val = i.split('=')[1]
data[key] = val data[key] = val
logger_yandex.info('Проверка демо платежа запрос', exc_info=True, extra={ finance_logger.info('Проверка демо платежа запрос', request=data)
'request': data,
})
except IndexError: except IndexError:
logger_yandex.error("Непредвиденная ошибка проверки тестогого платежа") finance_logger.exception("Непредвиденная ошибка проверки тестогого платежа")
return Response(status=204) return Response(status=204)
now = timezone.now() now = timezone.now()
@ -552,14 +537,10 @@ class DemoYandexCheckView(APIView):
else: else:
xml_res = """<checkOrderResponse performedDatetime="%s" code="100" invoiceId="%s" shopId="%s" xml_res = """<checkOrderResponse performedDatetime="%s" code="100" invoiceId="%s" shopId="%s"
message="Неверный номер ордера"/>""" % (now.isoformat(), str(data['invoiceId']), str(data['shopId'])) message="Неверный номер ордера"/>""" % (now.isoformat(), str(data['invoiceId']), str(data['shopId']))
logger_yandex.warning( finance_logger.warning("Ошибка проверки тестового платежа", response=xml_res)
"Ошибка проверки тестогого платежа" , exc_info=True, extra={
"response": xml_res
}
)
return HttpResponse(xml_res, content_type='application/xml') return HttpResponse(xml_res, content_type='application/xml')
except KeyError: except KeyError:
logger_yandex.error('Ошибка в данных checkYandex') finance_logger.exception('Ошибка в данных checkYandex')
return Response(status=204) return Response(status=204)
@ -567,7 +548,7 @@ class DemoYandexAvisoView(APIView):
@staticmethod @staticmethod
def post(request): def post(request):
logger_yandex.info('Начало тестирования avisoYandex') finance_logger.info('Начало тестирования avisoYandex')
data = dict() data = dict()
for i in request.body.decode('utf-8').split('&'): for i in request.body.decode('utf-8').split('&'):
key = i.split('=')[0] key = i.split('=')[0]
@ -578,17 +559,11 @@ class DemoYandexAvisoView(APIView):
if float(data['orderSumAmount']) < 1001: if float(data['orderSumAmount']) < 1001:
xml_res = """<paymentAvisoResponse performedDatetime="%s" code="0" invoiceId="%s" shopId="%s"/> xml_res = """<paymentAvisoResponse performedDatetime="%s" code="0" invoiceId="%s" shopId="%s"/>
""" % (now.isoformat(), str(data['invoiceId']), str(data['shopId'])) """ % (now.isoformat(), str(data['invoiceId']), str(data['shopId']))
logger_yandex.info('Подтверждение демо платежа ответ', exc_info=True, extra={ finance_logger.info('Подтверждение демо платежа ответ', response=xml_res)
'response': xml_res,
})
else: else:
xml_res = """<paymentAvisoResponse performedDatetime="%s" code="100" invoiceId="%s" shopId="%s" xml_res = """<paymentAvisoResponse performedDatetime="%s" code="100" invoiceId="%s" shopId="%s"
message="Нам не позволяет совесть принять от вас более 1000 рублей"/ message="Нам не позволяет совесть принять от вас более 1000 рублей"/
>""" % (now.isoformat(), str(data['invoiceId']), str(data['shopId'])) >""" % (now.isoformat(), str(data['invoiceId']), str(data['shopId']))
logger_yandex.warning( finance_logger.warning("Ошибка подтверждения тестогого платежа", response=xml_res)
"Ошибка подтверждения тестогого платежа", exc_info=True, extra={
"response": xml_res
}
)
return HttpResponse(xml_res, content_type='application/xml') return HttpResponse(xml_res, content_type='application/xml')
Loading…
Cancel
Save