diff --git a/app/admin/routes.py b/app/admin/routes.py index dad6b08..ee35e05 100644 --- a/app/admin/routes.py +++ b/app/admin/routes.py @@ -154,11 +154,16 @@ def dashboard(user_pid=0): cuser = User.query.filter_by(pid=user_pid).first() inv_deployments = cuser.inv_deployments.filter_by(deleted=False).order_by(Deployment.date_created.desc()).all() + inv_legacy = cuser.inv_deployments.filter_by(deleted=False).filter_by(bridge_id=None).order_by(Deployment.date_created.desc()).all() + inv_deploycubeids = [] inv_deployments_list = [] for invcls in inv_deployments: inv_deploycubeids.extend([invcls.machine_id]) inv_deployments_list.extend([invcls.machine_alias]) + for invcls in inv_legacy: + if invcls.user_id == cuser.pid: + inv_deploycubeids.extend([invcls.machine_id]) inv_services = cuser.inv_services.filter_by(deleted=False).order_by(Service.date_last_charge.asc()).all() inv_services_list = [] @@ -205,6 +210,6 @@ def dashboard(user_pid=0): status = { unit_id : query['status'] } statuses.update(status) current_app.logger.info('[{}] Enabled deployments: {}, services: {}, domains: {}, bridges: {}, addresses: {}'.format(cuser.email, inv_deployments_list, inv_services_list, inv_domains_list, inv_bridges_list, inv_addresses_list)) - return render_template('main/dashboard.html', rrd=rrd, status=statuses, inv_deployments=inv_deployments, inv_services=inv_services, inv_domains=inv_domains, inv_bridges=inv_bridges, inv_addresses=inv_addresses, region=regions) + return render_template('main/dashboard.html', rrd=rrd, status=statuses, inv_deployments=inv_deployments, inv_legacy=inv_legacy, inv_services=inv_services, inv_domains=inv_domains, inv_bridges=inv_bridges, inv_addresses=inv_addresses, regions=regions) diff --git a/app/main/routes.py b/app/main/routes.py index 033b666..2c0d2c3 100644 --- a/app/main/routes.py +++ b/app/main/routes.py @@ -64,14 +64,19 @@ def dashboard(): inv_addresses = cuser.inv_addresses.order_by(Address.ip.asc()).all() inv_routers = cuser.inv_routers.order_by(Router.date_created.asc()).all() inv_deployments = cuser.inv_deployments.filter_by(deleted=False).order_by(Deployment.date_created.desc()).all() + inv_legacy = cuser.inv_deployments.filter_by(deleted=False).filter_by(bridge_id=None).order_by(Deployment.date_created.desc()).all() regions = {} for region in sys_regions: regions[region.pid] = region.description + inv_deploycubeids = [] for invcls in inv_deployments: if invcls.user_id == cuser.pid: inv_deploycubeids.extend([invcls.machine_id]) + for invcls in inv_legacy: + if invcls.user_id == cuser.pid: + inv_deploycubeids.extend([invcls.machine_id]) inv_services = cuser.inv_services.filter_by(deleted=False).order_by(Service.date_last_charge.asc()).all() inv_domains = cuser.inv_domains.filter_by(deleted=False).order_by(Domain.date_created.desc()).all() @@ -107,5 +112,5 @@ def dashboard(): send_email(current_app.config['MAIL_USERNAME'], 'Cube {} is unreachable'.format(unit_id), 'vmanager/email/adm_unreachable', user=current_user, unit_id=unit_id, error=str(e)) - return render_template('main/dashboard.html', sys_regions=sys_regions, inv_bridges=inv_bridges, inv_deployments=inv_deployments, inv_services=inv_services, inv_domains=inv_domains, inv_addresses=inv_addresses, rrd=rrd, status=statuses) + return render_template('main/dashboard.html', sys_regions=sys_regions, inv_bridges=inv_bridges, inv_deployments=inv_deployments, inv_legacy=inv_legacy, inv_services=inv_services, inv_domains=inv_domains, inv_addresses=inv_addresses, rrd=rrd, status=statuses, regions=regions) diff --git a/app/models.py b/app/models.py index 094a1f7..e715f67 100644 --- a/app/models.py +++ b/app/models.py @@ -56,7 +56,7 @@ class User(db.Model, UserMixin): pid = db.Column(db.Integer, primary_key=True) email = db.Column(db.String, unique=True, index=True) - role_id = db.Column(db.Integer, db.ForeignKey('roles.pid')) #FK + role_id = db.Column(db.ForeignKey('roles.pid')) #FK password_hash = db.Column(db.String) tokens = db.Column(db.Text) @@ -243,8 +243,8 @@ class Region(db.Model): class Bridge(db.Model): __tablename__ = 'bridges' pid = db.Column(db.Integer, primary_key=True) - user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK - region_id = db.Column(db.Integer, db.ForeignKey('regions.pid')) #FK + user_id = db.Column(db.ForeignKey('users.pid')) #FK + region_id = db.Column(db.ForeignKey('regions.pid')) #FK inv_routers = db.relationship('Router', backref='bridge', lazy='dynamic') inv_deployments = db.relationship('Deployment', backref='bridge', lazy='dynamic') @@ -255,8 +255,8 @@ class Bridge(db.Model): class Router(db.Model): __tablename__ = 'routers' pid = db.Column(db.Integer, primary_key=True) - user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK - bridge_id = db.Column(db.Integer, db.ForeignKey('bridges.pid')) #FK + user_id = db.Column(db.ForeignKey('users.pid')) #FK + bridge_id = db.Column(db.ForeignKey('bridges.pid')) #FK inv_addresses = db.relationship('Address', backref='router', lazy='dynamic') date_created = db.Column(db.DateTime, default=datetime.utcnow) @@ -267,8 +267,8 @@ class Router(db.Model): class Deployment(db.Model): __tablename__ = 'deployments' pid = db.Column(db.Integer, primary_key=True) - user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK - bridge_id = db.Column(db.Integer, db.ForeignKey('bridges.pid')) #FK + user_id = db.Column(db.ForeignKey('users.pid')) #FK + bridge_id = db.Column(db.ForeignKey('bridges.pid')) #FK date_created = db.Column(db.DateTime, default=datetime.utcnow) deleted = db.Column(db.Boolean, default=False) @@ -289,9 +289,9 @@ class Deployment(db.Model): class Address(db.Model): __tablename__ = 'address' pid = db.Column(db.Integer, primary_key=True) - user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK - region_id = db.Column(db.Integer, db.ForeignKey('regions.pid')) #FK - router_id = db.Column(db.Integer, db.ForeignKey('routers.pid')) #FK + user_id = db.Column(db.ForeignKey('users.pid')) #FK + region_id = db.Column(db.ForeignKey('regions.pid')) #FK + router_id = db.Column(db.ForeignKey('routers.pid')) #FK date_assigned = db.Column(db.DateTime, default=datetime.utcnow) enabled = db.Column(db.Boolean) @@ -325,7 +325,7 @@ class Address(db.Model): class Service(db.Model): __tablename__ = 'services' pid = db.Column(db.Integer, primary_key=True) #PK - user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK + user_id = db.Column(db.ForeignKey('users.pid')) #FK date_created = db.Column(db.DateTime, default=datetime.utcnow) deleted = db.Column(db.Boolean, default=False) @@ -342,7 +342,7 @@ class Service(db.Model): class Domain(db.Model): __tablename__ = 'domains' pid = db.Column(db.Integer, primary_key=True) - user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK + user_id = db.Column(db.ForeignKey('users.pid')) #FK date_created = db.Column(db.DateTime, default=datetime.utcnow) deleted = db.Column(db.Boolean, default=False) @@ -358,7 +358,7 @@ class Domain(db.Model): class Transaction(db.Model): __tablename__ = 'transaction' pid = db.Column(db.Integer, primary_key=True) - user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK + user_id = db.Column(db.ForeignKey('users.pid')) #FK date_created = db.Column(db.DateTime, default=datetime.utcnow) currency = db.Column(db.String, default='BGN') @@ -368,7 +368,7 @@ class Transaction(db.Model): class Invoice(db.Model): __tablename__ = 'invoice' pid = db.Column(db.Integer, primary_key=True) - user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK + user_id = db.Column(db.ForeignKey('users.pid')) #FK date_created = db.Column(db.DateTime, default=datetime.utcnow) invoice_number = db.Column(db.Integer, unique=True) @@ -398,7 +398,7 @@ class InvoiceItem(db.Model): __tablename__ = 'invoice_item' pid = db.Column(db.Integer, primary_key=True) item_number = db.Column(db.Integer) - invoice_id = db.Column(db.Integer, db.ForeignKey('invoice.pid')) #FK + invoice_id = db.Column(db.ForeignKey('invoice.pid')) #FK item_title = db.Column(db.Unicode) item_quantity = db.Column(db.Float) item_price = db.Column(db.Float) diff --git a/app/templates/main/dashboard.html b/app/templates/main/dashboard.html index 0e4a9e4..c852690 100644 --- a/app/templates/main/dashboard.html +++ b/app/templates/main/dashboard.html @@ -138,7 +138,37 @@ addEventListener("DOMContentLoaded", function() { {% endif %}
+ + {% for bridge in inv_bridges %} +
+
+
Private Network Manager #{{ bridge.bridge_id }}
+

+

+ {% for deploy in bridge.inv_deployments %} {% include "main/vdc_pool.html" %} + {% endfor %} +
+
+
+
+ {% endfor %} + + {% if inv_legacy != [] %} +
+
+
Network Manager
+

+

+ {% for deploy in inv_legacy %} + {% include "main/vdc_pool2.html" %} + {% endfor %} +
+
+
+
+ {% endif %} + {% if inv_domains != [] %}
@@ -222,7 +252,7 @@ addEventListener("DOMContentLoaded", function() { {% for address in inv_addresses %} {{ address.ip }} - {{ region[address.region_id] }} + {{ regions[address.region_id] }} {{ address.rdns }} {% endfor %} diff --git a/app/templates/main/vdc_pool.html b/app/templates/main/vdc_pool.html index 3313c8e..da7c9b2 100644 --- a/app/templates/main/vdc_pool.html +++ b/app/templates/main/vdc_pool.html @@ -1,10 +1,4 @@ -
-
-
Device Manager
-

- {% if inv_deployments != [] %} -

- {% for deploy in inv_deployments %} +{% block vdc_pool %} {% if deploy.enabled == False %}
{% else %} @@ -101,21 +95,11 @@
- {% endfor %} -
+ {% if inv_deployments != [] %} + {% else %} {% endif %} -
-
-
- - {% else %} - - {% endif %} -
- - - +{% endblock %} diff --git a/app/vmanager/routes.py b/app/vmanager/routes.py index 2222d3c..d5acd35 100644 --- a/app/vmanager/routes.py +++ b/app/vmanager/routes.py @@ -62,8 +62,8 @@ def createvm(): slave_name = query['slave'] bridge_id = query['unit_id'] bridge_phy_id = query['phy_id'] - bridge = Bridge(user_id=int(current_user.pid), bridge_id=bridge_id) - db.session.add(bridge) + selected_bridge = Bridge(user_id=int(current_user.pid), bridge_id=bridge_id) + db.session.add(selected_bridge) db.session.commit() flash('New point created successfully in region "{}".'.format(str(selected_region.description))) else: @@ -104,7 +104,7 @@ def createvm(): return redirect(url_for('main.dashboard')) if query['status'] == 'kvm_created': - deployment = Deployment(user_id=int(current_user.pid), machine_alias=str(form.servername.data), machine_id=query['unit_id'], machine_cpu=data['cpu'], machine_mem=data['mem'], machine_hdd=data['hdd'], enabled=True, protected=False, daysleft=15, warning=True, discount=0) + deployment = Deployment(user_id=int(current_user.pid), machine_alias=str(form.servername.data), machine_id=query['unit_id'], machine_cpu=data['cpu'], machine_mem=data['mem'], machine_hdd=data['hdd'], enabled=True, protected=False, daysleft=15, warning=True, discount=0, bridge_id=int(selected_bridge.pid)) db.session.add(deployment) db.session.commit() flash('New device created successfully in region "{}".'.format(str(selected_region.description))) diff --git a/manage.py b/manage.py index 5f0be64..39189f5 100644 --- a/manage.py +++ b/manage.py @@ -67,7 +67,7 @@ def autodisable(): lastcharge = deploy.date_last_charge expiry = lastcharge + relativedelta(lastcharge, months=+(deploy.period)) if today > expiry: - email_content = 'Deployment "' + deploy.machine_alias + '" is past expiration date and will be marked INACTIVE. Last charged: ' + lastcharge.strftime('%c') + ' expiry date: ' + expiry.strftime('%c') + email_content = '[!] Deployment "' + deploy.machine_alias + '" is past expiration date and will be marked INACTIVE. Last charged: ' + lastcharge.strftime('%c') + ' expiry date: ' + expiry.strftime('%c') print(str(email_content)) send_email(app.config['MAIL_USERNAME'], str(email_content), 'email/adm_logger', user=deploy.owner, content=str(email_content)) deploy.warning = False @@ -81,7 +81,7 @@ def autodisable(): lastcharge = service.date_last_charge expiry = lastcharge + relativedelta(lastcharge, months=+(service.period)) if today > expiry: - email_content = 'Service "' + service.description + '" is past expiration date and will be marked INACTIVE. Last charged: ' + lastcharge.strftime('%c') + ' expiry date: ' + expiry.strftime('%c') + email_content = '[!] Service "' + service.description + '" is past expiration date and will be marked INACTIVE. Last charged: ' + lastcharge.strftime('%c') + ' expiry date: ' + expiry.strftime('%c') print(str(email_content)) send_email(app.config['MAIL_USERNAME'], str(email_content), 'email/adm_logger', user=service.owner, content=str(email_content)) service.warning = False @@ -94,7 +94,7 @@ def autodisable(): for domain in domains_ena: expiry = domain.date_expire if today > expiry: - email_content = 'Domain "' + domain.fqdn + '" is past expiration date and will be marked as INACTIVE. Last charged: ' + lastcharge.strftime('%c') + ' expiry date: ' + expiry.strftime('%c') + email_content = '[!] Domain "' + domain.fqdn + '" is past expiration date and will be marked as INACTIVE. Last charged: ' + lastcharge.strftime('%c') + ' expiry date: ' + expiry.strftime('%c') print(str(email_content)) send_email(app.config['MAIL_USERNAME'], str(email_content), 'email/adm_logger', user=domain.owner, content=str(email_content)) domain.warning = False @@ -118,10 +118,11 @@ def autowarn(): deploy.daysleft = daysleft.days + 1 db.session.commit() warndays = deploy.period * 5 - if daysleft.days < warndays: - email_content = 'Deployment "' + deploy.machine_alias + '" is ' + str(daysleft.days) + ' days until expiration. Last charged: ' + lastcharge.strftime('%c') + ' expiry date: ' + expiry.strftime('%c') - print(str(email_content)) + email_content = 'Deployment "' + deploy.machine_alias + '" is ' + str(daysleft.days) + ' days until expiration. Last charged: ' + lastcharge.strftime('%c') + ' expiry date: ' + expiry.strftime('%c') + if daysleft.days == warndays or (daysleft.days / 2) == warndays: send_email(app.config['MAIL_USERNAME'], str(email_content), 'email/adm_logger', user=deploy.owner, content=str(email_content)) + if daysleft.days < warndays: + print(str(email_content)) deploy.warning = True db.session.commit() @@ -134,10 +135,11 @@ def autowarn(): service.daysleft = daysleft.days + 1 db.session.commit() warndays = service.period * 5 - if daysleft.days < warndays: - email_content = 'Service "' + service.description + '" is ' + str(daysleft.days) + ' days until expiration. Last charged: ' + lastcharge.strftime('%c') + ' expiry date: ' + expiry.strftime('%c') - print(str(email_content)) + email_content = 'Service "' + service.description + '" is ' + str(daysleft.days) + ' days until expiration. Last charged: ' + lastcharge.strftime('%c') + ' expiry date: ' + expiry.strftime('%c') + if daysleft.days == warndays or (daysleft.days / 2) == warndays: send_email(app.config['MAIL_USERNAME'], str(email_content), 'email/adm_logger', user=service.owner, content=str(email_content)) + if daysleft.days < warndays: + print(str(email_content)) service.warning = True db.session.commit() @@ -148,10 +150,11 @@ def autowarn(): domain.daysleft = daysleft.days + 1 db.session.commit() warndays = domain.period * 5 - if daysleft.days < warndays: - email_content = 'Domain "' + domain.fqdn + '" is ' + str(daysleft.days)+ ' days until expiration. Expiry date: ' + expiry.strftime('%c') - print(str(email_content)) + email_content = 'Domain "' + domain.fqdn + '" is ' + str(daysleft.days)+ ' days until expiration. Expiry date: ' + expiry.strftime('%c') + if daysleft.days == warndays or (daysleft.days / 2) == warndays: send_email(app.config['MAIL_USERNAME'], str(email_content), 'email/adm_logger', user=domain.owner, content=str(email_content)) + if daysleft.days < warndays: + print(str(email_content)) domain.warning = True db.session.commit()