This commit is contained in:
Vyacheslav Anzhiganov 2015-12-14 01:49:38 +03:00
parent 3ca08bfb37
commit f26e36daf1
13 changed files with 161 additions and 38 deletions

View file

@ -1 +1,9 @@
__author__ = 'vanzhiganov'
from app import models
class ControllerManageIPs:
def items_get(self):
return {
'total': models.Ips.select().count(),
'items': models.Ips.select()
}

View file

@ -0,0 +1,6 @@
from app import models
class ControllerServerServerAPI:
def report_set(self):
pass

View file

@ -19,6 +19,7 @@ from app.cloud.controllers.datacenters.manage import ControllerManageDatacenters
from app.cloud.controllers.servers.manage import ControllerManageServer
from app.cloud.controllers.billing import ControllerBilling
from app.cloud.controllers.containers.manage import ControllerManageContainers
from app.cloud.controllers.ips.manage import ControllerManageIPs
viewAdministrator = Blueprint('administrator', __name__, url_prefix='/administrator')
@ -128,7 +129,10 @@ def containers():
return redirect(url_for("administrator.logout"))
# формируем список правил
rules_items = ControllerManageContainers().get_all_items()
return render_template('administrator/containers/index.html', rules=rules_items)
return render_template(
'administrator/containers/index.html',
containers=rules_items
)
@viewAdministrator.route('/payments')
@ -220,10 +224,26 @@ def servers_index():
# auth user
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
return redirect(url_for("administrator.logout"))
#
return render_template(
'administrator/servers/index.html',
servers=ControllerManageServer().items_get()
)
servers_items = ControllerManageServer().items_get()
return render_template('administrator/servers/index.html', servers=servers_items)
@viewAdministrator.route('/ips/')
def ips_index():
# check session
if not ControllerAdministrators().check_session():
return redirect(url_for("administrator.logout"))
# auth user
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
return redirect(url_for("administrator.logout"))
#
return render_template(
'administrator/ips/index.html',
ips=ControllerManageIPs().items_get()
)
@viewAdministrator.route('/servers/create', methods=['GET', 'POST'])

View file

@ -1,14 +1,12 @@
# coding: utf-8
import json
import uuid
from flask import Response
# import uuid
# from flask import Response
from flask import request
from flask import Blueprint
from flask import jsonify
from app import models
# from app import models
from app.cloud.controllers.tasks.server import ControllerTasksServer
# from .controllers import ControllerRulesStatistics
@ -61,3 +59,28 @@ def task_status_update():
server_api.update(task_id, status)
return jsonify({'status': 0})
@viewServerAPI.route('/report/container_status', methods=['POST'])
def report_container_status():
node_id = request.args.get('node_id')
node_secret = request.args.get('node_secret')
server_api = ControllerTasksServer(node_id, node_secret)
# auth request
if not server_api.auth():
# status: 403 - access denied
return jsonify({'status': 403})
"""
{
"cpu_use": 644394623336,
"memory_use": 614473728,
"link": "vethB2RLMU"
"tx_bytes": 48337383,
"rx_bytes": 1049439046,
"total_bytes": 1097776429
}
"""
status = json.loads(request.form['status'])
return jsonify({})

View file

@ -77,6 +77,8 @@ class UsersSecrets(PgSQLModel):
user = ForeignKeyField(Users, related_name='userssecrets')
secret = CharField(unique=True, null=False)
acl = TextField()
# 0 - inactive
# 1 - active
status = IntegerField()

View file

@ -117,7 +117,7 @@
<ul>
<li><a href="{{ url_for('administrator.datacenters') }}"><i class="fa fa-fw fa-table"></i> Datacenters</a></li>
<li><a href="{{ url_for('administrator.servers_index') }}"><i class="fa fa-fw fa-table"></i> Servers</a></li>
<li><a href="{{ url_for('administrator.servers_index') }}"><i class="fa fa-fw fa-table"></i> IPs</a></li>
<li><a href="{{ url_for('administrator.ips_index') }}"><i class="fa fa-fw fa-table"></i> IPs</a></li>
</ul>
</li>
<li><a href="{{ url_for('administrator.settings_index') }}"><i class="fa fa-fw fa-table"></i> Settings</a></li>

View file

@ -1,35 +1,38 @@
{% extends 'administrator/_layout.auth.html' %}
{% block title %}Rules{% endblock %}
{% block title %}Containers{% endblock %}
{% block subtitle %}Rules list{% endblock %}
{% block subtitle %}Containers list{% endblock %}
{% block content %}
Total: {{ rules.total }}
Total: {{ containers.total }}
<table class="table table-bordered">
<thead>
<tr>
<th>Id</th>
<th>Email</th>
<th>Datacenter</th>
<th>Server</th>
<th>User</th>
<th>IPv4</th>
<th>IPv6</th>
<th>Status</th>
<th>Source</th>
<th>Alias</th>
<th>Action</th>
</tr>
</thead>
<tbody>
{% if rules.total == 0 %}
{% if containers.total == 0 %}
<tr>
<td colspan="6">Нет ни одного правила</td>
</tr>
{% else %}
{% for rule in rules['items'] %}
{% for container in containers['items'] %}
<tr>
<td>{{ rule.id }}</td>
<td>{{ rule.user.email }}</td>
<td>{{ rule.status }}</td>
<td>{{ rule.source }}</td>
<td>{{ rule.alias }}</td>
<td>{{ container.id }}</td>
<td>{{ container.datacenter.name }}</td>
<td>{{ container.server.hostname }}</td>
<td>{{ container.user.email }}</td>
<td>{{ container.ipv4 }}</td>
<td>{{ container.ipv6 }}</td>
<td>{{ container.status }}</td>
<td><a href="#">Edit</a></td>
</tr>
{% endfor %}

View file

@ -0,0 +1,51 @@
{% extends 'administrator/_layout.auth.html' %}
{% block title %}IPs{% endblock %}
{% block subtitle %}IPs list{% endblock %}
{% block content %}
Total: {{ ips['total'] }}
<table class="table table-bordered">
<thead>
<tr>
<th>Id</th>
<th>Data center</th>
<th>Server</th>
<th>IPv4</th>
<th>IPv4 gateway</th>
<th>IPv6</th>
<th>IPv6 gateway</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
{% if ips['total'] == 0 %}
<tr>
<td colspan="6">Нет ни одного правила</td>
</tr>
{% else %}
{% for ip in ips['items'] %}
<tr>
<td>{{ ip.id }}</td>
<td><a href="#">{{ ip.datacenter.name }}</a></td>
<td><a href="#">{{ ip.server.hostname }}</a></td>
<td>{{ ip.ipv4 }}</td>
<td>{{ ip.ipv4_gateway }}</td>
<td>{{ ip.ipv6 }}</td>
<td>{{ ip.ipv6_gateway }}</td>
<td>
{% if ip.status == 0 %}
<span class="label label-default">Free</span>
{% else %}
<span class="label label-primary">Busy</span>
{% endif %}
</td>
<td><a href="#">Edit</a></td>
</tr>
{% endfor %}
{% endif %}
</tbody>
</table>
{% endblock %}

View file

@ -26,7 +26,13 @@
<td>{{ payment.id }}</td>
<td>{{ payment.user.email }}</td>
<td>{{ payment.amount }}</td>
<td>{{ payment.status }}</td>
<td>
{% if payment.status == 'process' %}
<span class="label label-info">{{ payment.status }}</span>
{% elif payment.status == 'success' %}
<span class="label laber-success">{{ payment.status }}</span>
{% endif %}
</td>
<td>{{ payment.notified }}</td>
<td>{{ payment.created }}</td>
<td><a href="">edit</a></td>

View file

@ -22,7 +22,13 @@
<tr>
<td>{{ user.id }}</td>
<td>{{ user.email }}</td>
<td>{{ user.status }}</td>
<td>
{% if user.status == 0 %}
<span class="label label-alert">Inactive</span>
{% else %}
<span class="label label-success">Active</span>
{% endif %}
</td>
<td>
<a href="{{ url_for('administrator.user_details', user_id=user.id) }}">Edit</a>
</td>

View file

@ -21,3 +21,6 @@ for item in items:
print 'id: %s code: %s name: %s country: %s, city: %s, status: %s' % (
item.id, item.code, item.name, item.country, item.city, item.status
)
print '---'
print 'if you want to add a new data center, use cli-dc-add.py --'

View file

@ -2,6 +2,7 @@ import argparse
from uuid import uuid4
from hashlib import md5
from app import models
from app.cloud.controllers.servers.manage import ControllerManageServer
__author__ = 'vanzhiganov'
@ -17,17 +18,10 @@ args = parser.parse_args()
server_id = uuid4()
if models.Servers.select().where(
(models.Servers.ip == args.ip) |
(models.Servers.hostname == args.hostname)
).count() == 0:
models.Servers.create(
id=server_id,
datacenter=args.datacenter,
secret=args.secret,
ip=args.ip,
hostname=args.hostname,
status=args.status
if not ControllerManageServer().check_exists(args.ip, None, args.hostname):
ControllerManageServer().item_create(
args.datacenter, server_id, args.secret, args.hostname,
args.ip, None, args.status
)
else:
print 'fail'

View file

@ -1,7 +1,8 @@
Flask==0.10.1
Flask-Markdown==0.3
psycopg2==2.6.1
requests==2.7.0
uWSGI==2.0.11.1
wsgiref==0.1.2
validators
sshpubkeys
sshpubkeys