Merge branch 'master' of giit.cyberia.club:~forest/capsul-flask
This commit is contained in:
@ -8,6 +8,8 @@ from flask import g
|
||||
from flask import request
|
||||
from flask import session
|
||||
from flask import render_template
|
||||
from flask import redirect
|
||||
from flask import url_for
|
||||
from flask_mail import Message
|
||||
from werkzeug.exceptions import abort
|
||||
from nanoid import generate
|
||||
@ -15,6 +17,7 @@ from nanoid import generate
|
||||
from capsulflask.metrics import durations as metric_durations
|
||||
from capsulflask.auth import account_required
|
||||
from capsulflask.db import get_model, my_exec_info_message
|
||||
from capsulflask.payment import poll_btcpay_session
|
||||
from capsulflask import cli
|
||||
|
||||
bp = Blueprint("console", __name__, url_prefix="/console")
|
||||
@ -41,6 +44,11 @@ def double_check_capsul_address(id, ipv4):
|
||||
@account_required
|
||||
def index():
|
||||
vms = get_vms()
|
||||
created = request.args.get('created')
|
||||
|
||||
# this is here to prevent xss
|
||||
if created and not re.match(r"^(cvm|capsul)-[a-z0-9]{10}$", created):
|
||||
created = '___________'
|
||||
|
||||
# for now we are going to check the IP according to the virt model
|
||||
# on every request. this could be done by a background job and cached later on...
|
||||
@ -59,7 +67,7 @@ def index():
|
||||
list(filter(lambda x: not x['deleted'], vms))
|
||||
))
|
||||
|
||||
return render_template("capsuls.html", vms=vms, has_vms=len(vms) > 0)
|
||||
return render_template("capsuls.html", vms=vms, has_vms=len(vms) > 0, created=created)
|
||||
|
||||
@bp.route("/<string:id>", methods=("GET", "POST"))
|
||||
@account_required
|
||||
@ -110,7 +118,6 @@ def create():
|
||||
account_balance = get_account_balance(get_vms(), get_payments(), datetime.utcnow())
|
||||
capacity_avaliable = current_app.config["VIRTUALIZATION_MODEL"].capacity_avaliable(512*1024*1024)
|
||||
errors = list()
|
||||
created_os = None
|
||||
|
||||
if request.method == "POST":
|
||||
|
||||
@ -171,7 +178,8 @@ def create():
|
||||
memory_mb=vm_sizes[size]['memory_mb'],
|
||||
ssh_public_keys=list(map(lambda x: x["content"], posted_keys))
|
||||
)
|
||||
created_os = os
|
||||
|
||||
return redirect(f"{url_for('console.index')}?created={id}")
|
||||
|
||||
affordable_vm_sizes = dict()
|
||||
for key, vm_size in vm_sizes.items():
|
||||
@ -186,7 +194,6 @@ def create():
|
||||
|
||||
return render_template(
|
||||
"create-capsul.html",
|
||||
created_os=created_os,
|
||||
capacity_avaliable=capacity_avaliable,
|
||||
account_balance=format(account_balance, '.2f'),
|
||||
ssh_public_keys=ssh_public_keys,
|
||||
@ -262,12 +269,18 @@ def get_payments():
|
||||
|
||||
average_number_of_days_in_a_month = 30.44
|
||||
|
||||
def get_vm_months_float(vm, as_of):
|
||||
end_datetime = vm["deleted"] if vm["deleted"] else as_of
|
||||
days = float((end_datetime - vm["created"]).total_seconds())/float(60*60*24)
|
||||
if days < 1:
|
||||
days = float(1)
|
||||
return days / average_number_of_days_in_a_month
|
||||
|
||||
def get_account_balance(vms, payments, as_of):
|
||||
|
||||
vm_cost_dollars = 0.0
|
||||
for vm in vms:
|
||||
end_datetime = vm["deleted"] if vm["deleted"] else as_of
|
||||
vm_months = ( end_datetime - vm["created"] ).days / average_number_of_days_in_a_month
|
||||
vm_months = get_vm_months_float(vm, as_of)
|
||||
vm_cost_dollars += vm_months * float(vm["dollars_per_month"])
|
||||
|
||||
payment_dollars_total = float( sum(map(lambda x: 0 if x["invalidated"] else x["dollars"], payments)) )
|
||||
@ -277,6 +290,12 @@ def get_account_balance(vms, payments, as_of):
|
||||
@bp.route("/account-balance")
|
||||
@account_required
|
||||
def account_balance():
|
||||
|
||||
payment_sessions = get_model().list_payment_sessions_for_account(session['account'])
|
||||
for payment_session in payment_sessions:
|
||||
if payment_session['type'] == 'btcpay':
|
||||
poll_btcpay_session(payment_session['id'])
|
||||
|
||||
payments = get_payments()
|
||||
vms = get_vms()
|
||||
balance_1w = get_account_balance(vms, payments, datetime.utcnow() + timedelta(days=7))
|
||||
@ -298,9 +317,7 @@ def account_balance():
|
||||
vms_billed = list()
|
||||
|
||||
for vm in get_vms():
|
||||
end_datetime = vm["deleted"] if vm["deleted"] else datetime.utcnow()
|
||||
|
||||
vm_months = (end_datetime - vm["created"]).days / average_number_of_days_in_a_month
|
||||
vm_months = get_vm_months_float(vm, datetime.utcnow())
|
||||
vms_billed.append(dict(
|
||||
id=vm["id"],
|
||||
dollars_per_month=vm["dollars_per_month"],
|
||||
|
Reference in New Issue
Block a user