From b0b82fc7e7b0dcdf136c692cc2b8a14c3db2572a Mon Sep 17 00:00:00 2001 From: deflax Date: Wed, 21 Feb 2018 18:01:35 +0200 Subject: [PATCH] order page phase 1 --- app/models.py | 5 +- app/panel/forms.py | 12 +- app/panel/routes.py | 20 +++- app/templates/panel/deploy.html | 115 ++++++++++++++++++++ app/templates/panel/email/adm_neworder.html | 5 + app/templates/panel/email/adm_neworder.txt | 4 + app/templates/panel/order_vm.html | 41 ------- 7 files changed, 153 insertions(+), 49 deletions(-) create mode 100644 app/templates/panel/deploy.html create mode 100644 app/templates/panel/email/adm_neworder.html create mode 100644 app/templates/panel/email/adm_neworder.txt delete mode 100644 app/templates/panel/order_vm.html diff --git a/app/models.py b/app/models.py index d3963d0..20c4aba 100644 --- a/app/models.py +++ b/app/models.py @@ -232,7 +232,10 @@ class Order(db.Model): pid = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.ForeignKey('users.pid')) #FK recipe_id = db.Column(db.ForeignKey('recipes.pid')) #FK - parameters = db.Column(db.String) + parameter1 = db.Column(db.String) + parameter2 = db.Column(db.String) + parameter3 = db.Column(db.String) + parameter4 = db.Column(db.String) class Recipe(db.Model): __tablename__ = 'recipes' diff --git a/app/panel/forms.py b/app/panel/forms.py index e885844..bb2ce7a 100644 --- a/app/panel/forms.py +++ b/app/panel/forms.py @@ -6,9 +6,17 @@ from wtforms.fields.html5 import EmailField, DecimalRangeField from .. import db class OrderForm(FlaskForm): - alias = StringField('Machine Alias:', [validators.Regexp(message='ex.: myservice1.com, myservice2.local', regex='^[a-zA-Z0-9][a-zA-Z0-9-_]{0,61}[a-zA-Z0-9]{0,1}\.([a-zA-Z]{1,6}|[a-zA-Z0-9-]{1,30}\.[a-zA-Z]{2,3})$'), validators.Length(6,64)]) + region_choices = [(1, 'Plovdiv, Bulgaria')] + region = SelectField('Region:', choices=region_choices, coerce=int) + + vmtype_choices = [(1, 'RootVPS')] + vmtype = SelectField('Type:', choices=vmtype_choices, coerce=int) + cpu = DecimalRangeField('Processor Cores', default=2) memory = DecimalRangeField('Memory', default=512) storage = DecimalRangeField('Storage', default=10) - submit = SubmitField('Create') + + alias = StringField('Machine Alias:', [validators.Regexp(message='ex.: myservice1.com, myservice2.local', regex='^[a-zA-Z0-9][a-zA-Z0-9-_]{0,61}[a-zA-Z0-9]{0,1}\.([a-zA-Z]{1,6}|[a-zA-Z0-9-]{1,30}\.[a-zA-Z]{2,3})$'), validators.Length(6,64)]) + + submit = SubmitField('DEPLOY') diff --git a/app/panel/routes.py b/app/panel/routes.py index 6dfca79..033e2b5 100644 --- a/app/panel/routes.py +++ b/app/panel/routes.py @@ -6,7 +6,7 @@ from . import panel from .forms import OrderForm from .. import db from ..email import send_email -from ..models import User, Permission, Server, Deployment, Service, Region, Address, Domain, contact_proxmaster +from ..models import User, Permission, Recipe, Order, Server, Deployment, Service, Region, Address, Domain, contact_proxmaster import base64 @@ -17,13 +17,23 @@ def after_request(response): current_app.logger.warning('Slow query: %s\nParameters: %s\nDuration: %fs\nContext: %s\n' % (query.statement, query.parameters, query.duration, query.context)) return response -@panel.route("/ordervm", methods=['GET', 'POST']) +@panel.route("/deploy", methods=['GET', 'POST']) @login_required -def order(): +def deploy(): + if current_user.name is None: + return redirect(url_for('settings.profile')) + form = OrderForm() if form.validate_on_submit(): - pass - return redirect('main.dashboard') + recipe = Recipe.query.filter_by(category='deploy').first() + new_order = Order(user_id=int(current_user.pid), recipe_id=int(recipe.pid), parameter1=str(form.alias.data), parameter2=str(form.cpu.data), parameter3=str(form.memory.data), parameter4=str(form.storage.data)) + db.session.add(new_order) + db.session.commit() + send_email(current_app.config['MAIL_USERNAME'], 'New order from {}'.format(current_user.email), + 'panel/email/adm_neworder', user=current_user) + return redirect(request.args.get('next') or url_for('panel.dashboard')) + + return render_template('panel/deploy.html', form=form) #DASHBOARD @panel.route("/dashboard", methods=['GET', 'POST']) diff --git a/app/templates/panel/deploy.html b/app/templates/panel/deploy.html new file mode 100644 index 0000000..917ac77 --- /dev/null +++ b/app/templates/panel/deploy.html @@ -0,0 +1,115 @@ +{% extends "base.html" %} +{% block title %}Deploy New Instance{% endblock %} + +{% block scripts %} +{{ super() }} + + +{% endblock %} + +{% block page_content %} +

Deploy new Server

+
+
+
+
+
1. Location
+
+

+ {{ form.region.label }}
{{ form.region }}
+ {% for error in form.region.errors %} + {{ error }}
+ {% endfor %} +

+
+
+
+
+
+
2. Type
+
+

+ {{ form.vmtype.label }}
{{ form.vmtype }}
+ {% for error in form.vmtype.errors %} + {{ error }}
+ {% endfor %} +

+
+
+
+
+
+
3. Size
+
+
+

+ {{ form.cpu.label }} + {{ form.cpu(min=2, max=16, step=2, oninput="cpuUpdate(value)") }} +

{{ form.cpu.data }} cores

+ {% for error in form.cpu.errors %} + {{ error }}
+ {% endfor %} +

+
+ +
+

+ {{ form.memory.label }}
{{ form.memory(min=512, max=16384, step=512, oninput="memoryUpdate(value)") }} +

{{ form.memory.data }} MB

+ {% for error in form.memory.errors %} + {{ error }}
+ {% endfor %} +

+
+ +
+

+ {{ form.storage.label }}
{{ form.storage(min=10, max=100, step=10, oninput="storageUpdate(value)") }} +

{{ form.storage.data }} GB

+ {% for error in form.storage.errors %} + {{ error }}
+ {% endfor %} +

+
+ +
+
+
+
+
+
4. Server Hostname
+
+

+ {{ form.alias.label }}
{{ form.alias }}
+ {% for error in form.alias.errors %} + {{ error }}
+ {% endfor %} +

+
+
+
+ +
+

+ {{ form.csrf_token() }} + {{ form.submit }} +

+
+ + +
+{% endblock %} + diff --git a/app/templates/panel/email/adm_neworder.html b/app/templates/panel/email/adm_neworder.html new file mode 100644 index 0000000..4c751ff --- /dev/null +++ b/app/templates/panel/email/adm_neworder.html @@ -0,0 +1,5 @@ +

{{ user.email }} have ordered a new deployment
+
+

+

Regards,
+Proxadmin

diff --git a/app/templates/panel/email/adm_neworder.txt b/app/templates/panel/email/adm_neworder.txt new file mode 100644 index 0000000..f608587 --- /dev/null +++ b/app/templates/panel/email/adm_neworder.txt @@ -0,0 +1,4 @@ +User {{ user.email }} have ordered a new deployment. + +Regards, +Proxadmin diff --git a/app/templates/panel/order_vm.html b/app/templates/panel/order_vm.html deleted file mode 100644 index 525a677..0000000 --- a/app/templates/panel/order_vm.html +++ /dev/null @@ -1,41 +0,0 @@ -{% extends "base.html" %} -{% block title %}Request new Server{% endblock %} - -{% block page_content %} -
-
-
Request new Server
-
- -

- {{ form.cpu.label }}
{{ form.cpu(min=2, max=16, step=2) }}
- {% for error in form.cpu.errors %} - {{ error }}
- {% endfor %} -

- -

- {{ form.memory.label }}
{{ form.memory(min=512, max=16384, step=512) }}
- {% for error in form.memory.errors %} - {{ error }}
- {% endfor %} -

- -

- {{ form.storage.label }}
{{ form.storage(min=10, max=100, step=10) }}
- {% for error in form.storage.errors %} - {{ error }}
- {% endfor %} -

- -

- {{ form.csrf_token() }} - {{ form.submit }} -

- -
- -
-
-{% endblock %} -