浏览代码

[IMP] mails send

Gogs 7 年之前
父节点
当前提交
7e9a16dc88
共有 3 个文件被更改,包括 59 次插入11 次删除
  1. 15 4
      api/resources/odoo_resource.py
  2. 34 4
      api/utils/docker_api.py
  3. 10 3
      api/utils/email.py

+ 15 - 4
api/resources/odoo_resource.py

@@ -219,9 +219,21 @@ class OdooResource(Resource):
         r.status = 4
         r.save()
 
-        # Send email
+        # 11. Get internal IP
+        internal_ip = get_odoo_internal_ip(name)
+
+        # 12. Send email
         email_sended = send_email(
-            'Has creado exitosamente un nuevo sistema Odoo\n *** Datos *** \n-\tNombre:\t%s\nIP externo:\t%s\nPuerto externo:%s\n' % (name, settings.EXTERNAL_IP, port),
+            '''
+                El usuario %s ha creado exitosamente un nuevo sistema Odoo\n\n
+                ------------------- Datos -------------------\n
+                -\tNombre del Sistema:\t%s\n
+                -\tIP Externo:\t%s\n
+                -\tPuerto Externo:\t%s\n
+                -\tIP Interno:\t%s\n
+                ---------------------------------------------\n\n
+                Obs.: Estos datos pueden ser usados para generar el subdominio del sistema
+            ''' % (user.username, name, settings.EXTERNAL_IP, port, internal_ip),
             user.username
         )
 
@@ -230,9 +242,8 @@ class OdooResource(Resource):
         else:
             info('%s email sended' % user.username)
         
-
+        # 13. Send response
         info('%s: odoo creation is ok' % name)
-        
         return self.create_response(request, {
             'action': {
                 'type': 'redirect',

+ 34 - 4
api/utils/docker_api.py

@@ -63,7 +63,7 @@ def get_all_containers():
 def get_all_external_ports():
     ports = []
 
-    for m in map(lambda x: x['attrs']['NetworkSettings']['Ports'], get_all_containers()):
+    for m in map(lambda x: x.get('attrs').get('NetworkSettings').get('Ports'), get_all_containers()):
         if not m:
             continue
 
@@ -76,21 +76,51 @@ def get_all_external_ports():
 
     return ports
 
+'''
+'''
+def get_network(name=None):
+    if not name:
+        return None
+
+    client = get_docker_client()
+
+    if not client:
+        return None
+
+    try:
+        network = client.networks.get(name)
+
+        return {
+            'id': network.id,
+            'short_id': network.short_id,
+            'name': network.name,
+            'attrs': network.attrs
+        }
+    except (NotFound, APIError):
+        return None
+
 '''
 '''
 def get_internal_ip(container_name_or_id=None):
+    # check name
     if not container_name_or_id:
         return None
 
+    # check client
     client = get_docker_client()
-
     if not client:
         return None
 
+    # check network
+    network = get_network(settings.INTERNAL_NETWORK_NAME)
+    if not network:
+        return None
+
     try:
         container = client.containers.get(container_name_or_id)
-
-        import pdb; pdb.set_trace()
+        internal_ip = container.attrs.get('NetworkSettings').get('Networks').get(network.get('name')).get('IPAddress')
+        
+        return str(internal_ip)
     except (NotFound, APIError):
         return None
 

+ 10 - 3
api/utils/email.py

@@ -11,16 +11,23 @@ def send_email(message, username):
     if not settings.SEND_EMAIL:
         return False
 
-    user = User.objects.get(username=username)
+    users = User.objects.all()
+    user = users.get(username=username)
 
     if not user:
         return False
+    
+    mails = []
+    mails.append(user.email)
+
+    for admin in users.filter(is_superuser=True).exclude(username=username).all():
+        mails.append(admin.email)
 
     send_mail(
         settings.SYSTEM_NAME,
         message,
         settings.EMAIL_FROM,
-        [user.email]
+        mails
     )
 
-    return True
+    return True