Reorganize code
This commit is contained in:
		
					parent
					
						
							
								7d683e1257
							
						
					
				
			
			
				commit
				
					
						96de92d312
					
				
			
		
					 1 changed files with 45 additions and 52 deletions
				
			
		|  | @ -42,6 +42,7 @@ from utils.forms import ( | |||
| from utils.hosting_utils import get_vm_price | ||||
| from utils.mailer import BaseEmail | ||||
| from utils.stripe_utils import StripeUtils | ||||
| from utils.tasks import send_plain_email_task | ||||
| from utils.views import ( | ||||
|     PasswordResetViewMixin, PasswordResetConfirmViewMixin, LoginViewMixin, | ||||
|     ResendActivationLinkViewMixin | ||||
|  | @ -1055,23 +1056,26 @@ class VirtualMachineView(LoginRequiredMixin, View): | |||
| 
 | ||||
|     def post(self, request, *args, **kwargs): | ||||
|         response = {'status': False} | ||||
|         admin_email_body = {} | ||||
|         owner = self.request.user | ||||
|         vm = self.get_object() | ||||
| 
 | ||||
|         opennebula_vm_id = self.kwargs.get('pk') | ||||
| 
 | ||||
|         # Cancel subscription | ||||
|         stripe_utils = StripeUtils() | ||||
|         error_msg_subject = ( | ||||
|             'Error canceling subscription for ' | ||||
|             '{user} and vm id {vm_id}'.format( | ||||
|                 user=owner.email, | ||||
|                 vm_id=opennebula_vm_id | ||||
|             ) | ||||
|         manager = OpenNebulaManager( | ||||
|             email=owner.email, | ||||
|             password=owner.password | ||||
|         ) | ||||
|         try: | ||||
|             vm_data = VirtualMachineSerializer(manager.get_vm(vm.id)).data | ||||
|             vm_name = vm_data.get('name') | ||||
|         except WrongIdError as wrong_id_err: | ||||
|             logger.error(str(wrong_id_err)) | ||||
|             return redirect(reverse('hosting:virtual_machines')) | ||||
| 
 | ||||
|         # Cancel Stripe subscription | ||||
|         stripe_utils = StripeUtils() | ||||
|         try: | ||||
|             hosting_order = HostingOrder.objects.get( | ||||
|                 vm_id=opennebula_vm_id | ||||
|                 vm_id=vm.id | ||||
|             ) | ||||
|             result = stripe_utils.unsubscribe_customer( | ||||
|                 subscription_id=hosting_order.subscription_id | ||||
|  | @ -1081,43 +1085,20 @@ class VirtualMachineView(LoginRequiredMixin, View): | |||
|             if (stripe_subscription_obj is None or | ||||
|                     stripe_subscription_obj.status != 'canceled'): | ||||
|                 error_msg = result.get('error') | ||||
|                 logger.error(error_msg_subject) | ||||
|                 logger.error( | ||||
|                     'Error canceling subscription for {user} and vm id ' | ||||
|                     '{vm_id}'.format(user=owner.email, vm_id=vm.id) | ||||
|                 ) | ||||
|                 logger.error(error_msg) | ||||
|                 email_data = { | ||||
|                     'subject': error_msg_subject, | ||||
|                     'from_email': settings.DCL_SUPPORT_FROM_ADDRESS, | ||||
|                     'to': settings.DCL_ERROR_EMAILS_TO_LIST, | ||||
|                     'body': error_msg, | ||||
|                 } | ||||
|                 email = EmailMessage(**email_data) | ||||
|                 email.send() | ||||
|                 admin_email_body['stripe_error_msg'] = error_msg | ||||
|         except HostingOrder.DoesNotExist: | ||||
|             error_msg = ( | ||||
|                 "HostingOrder corresponding to vm_id={vm_id} does" | ||||
|                 "not exist. Hence, can not find subscription to " | ||||
|                 "cancel ".format(vm_id=opennebula_vm_id) | ||||
|                 "cancel ".format(vm_id=vm.id) | ||||
|             ) | ||||
|             logger.error(error_msg) | ||||
|             email_data = { | ||||
|                 'subject': error_msg_subject, | ||||
|                 'from_email': settings.DCL_SUPPORT_FROM_ADDRESS, | ||||
|                 'to': settings.DCL_ERROR_EMAILS_TO_LIST, | ||||
|                 'body': error_msg, | ||||
|             } | ||||
|             email = EmailMessage(**email_data) | ||||
|             email.send() | ||||
| 
 | ||||
|         manager = OpenNebulaManager( | ||||
|             email=owner.email, | ||||
|             password=owner.password | ||||
|         ) | ||||
| 
 | ||||
|         try: | ||||
|             vm_data = VirtualMachineSerializer(manager.get_vm(vm.id)).data | ||||
|             vm_name = vm_data.get('name') | ||||
|         except WrongIdError as wrong_id_err: | ||||
|             logger.error(str(wrong_id_err)) | ||||
|             return redirect(reverse('hosting:virtual_machines')) | ||||
|             admin_email_body['stripe_error_msg'] = error_msg | ||||
| 
 | ||||
|         terminated = manager.delete_vm(vm.id) | ||||
| 
 | ||||
|  | @ -1126,26 +1107,24 @@ class VirtualMachineView(LoginRequiredMixin, View): | |||
|                 "manager.delete_vm returned False. Hence, error making " | ||||
|                 "xml-rpc call to delete vm failed." | ||||
|             ) | ||||
|             response['text'] = ugettext( | ||||
|                 'Error terminating VM') + opennebula_vm_id | ||||
|             response['text'] = ugettext('Error terminating VM') + vm.id | ||||
|         else: | ||||
|             for t in range(15): | ||||
|                 try: | ||||
|                     manager.get_vm(opennebula_vm_id) | ||||
|                     manager.get_vm(vm.id) | ||||
|                 except WrongIdError: | ||||
|                     response['status'] = True | ||||
|                     response['text'] = ugettext('Terminated') | ||||
|                     vm_detail_obj = VMDetail.objects.filter( | ||||
|                         vm_id=opennebula_vm_id | ||||
|                         vm_id=vm.id | ||||
|                     ).first() | ||||
|                     vm_detail_obj.terminated_at = datetime.utcnow() | ||||
|                     vm_detail_obj.save() | ||||
|                 except BaseException as base_exception: | ||||
|                     logger.error( | ||||
|                         "manager.get_vm returned exception: {details}. Hence, " | ||||
|                         "the vm with id {vm_id} is no more accessible".format( | ||||
|                             details=str(base_exception), | ||||
|                             vm_id=opennebula_vm_id | ||||
|                         "manager.get_vm({vm_id}) returned exception: " | ||||
|                         "{details}.".format( | ||||
|                             details=str(base_exception), vm_id=vm.id | ||||
|                         ) | ||||
|                     ) | ||||
|                     break | ||||
|  | @ -1153,10 +1132,12 @@ class VirtualMachineView(LoginRequiredMixin, View): | |||
|                     sleep(2) | ||||
|             context = { | ||||
|                 'vm_name': vm_name, | ||||
|                 'base_url': "{0}://{1}".format(self.request.scheme, | ||||
|                                                self.request.get_host()), | ||||
|                 'base_url': "{0}://{1}".format( | ||||
|                     self.request.scheme, self.request.get_host() | ||||
|                 ), | ||||
|                 'page_header': _('Virtual Machine %(vm_name)s Cancelled') % { | ||||
|                     'vm_name': vm_name} | ||||
|                     'vm_name': vm_name | ||||
|                 } | ||||
|             } | ||||
|             email_data = { | ||||
|                 'subject': context['page_header'], | ||||
|  | @ -1168,6 +1149,18 @@ class VirtualMachineView(LoginRequiredMixin, View): | |||
|             } | ||||
|             email = BaseEmail(**email_data) | ||||
|             email.send() | ||||
|         admin_email_body.update(response) | ||||
|         email_to_admin_data = { | ||||
|             'subject': "Deleted Subscription for VM: {vm_id} and " | ||||
|                        "user: {user}".format( | ||||
|                             vm_id=vm.id, user=owner.email | ||||
|                         ), | ||||
|             'from_email': settings.DCL_SUPPORT_FROM_ADDRESS, | ||||
|             'to': ['info@ungleich.ch'], | ||||
|             'body': "\n".join( | ||||
|                 ["%s=%s" % (k, v) for (k, v) in admin_email_body]), | ||||
|         } | ||||
|         send_plain_email_task.delay(email_to_admin_data) | ||||
|         return HttpResponse( | ||||
|             json.dumps(response), | ||||
|             content_type="application/json" | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue