Beispiel #1
0
        # NOTE(apugachev) for big this will fail to load and BrokenPipe
        # will be raised inside Flask
        return flask.jsonify({})

    @bp.route('progress/<uploaded_filename>/')
    def progress(uploaded_filename):
        r = flask.current_app.cache.get(uploaded_filename)
        return flask.jsonify(r or {})

    @bp.route('<image_id>/delete/', methods=['POST'])
    def delete(image_id):
        image = clients.admin_clients().glance.images.get(image_id)
        owner = getattr(image, 'owner')
        if owner == clients.get_systenant_id():
            principal.Permission(('role', 'admin')).test()
        else:
            principal.Permission(('role', 'member', owner)).test()
        form = forms.DeleteForm()
        if form.validate_on_submit():
            image.delete()
            flask.flash('Image successfully deleted', 'success')
        else:
            flask.flash('Invalid form', 'error')
        return flask.redirect(flask.url_for('.index'))

    return bp


ABP = environments.admin(get_bp('global_images'))
PBP = environments.project(get_bp('project_images'))
Beispiel #2
0
# You should have received a copy of the GNU Lesser General Public
# License along with this program. If not, see
# <http://www.gnu.org/licenses/>.

import flask
from flask import blueprints

from focus import clients

from focus.views import environments
from focus.views import forms
from focus.views import pagination

from openstackclient_base.exceptions import HttpException

bp = environments.admin(blueprints.Blueprint('networks', __name__))


@bp.route('')
def index():
    try:
        networks = clients.admin_clients().compute.networks.list()
    except HttpException as ex:
        networks = []
    tenants = clients.admin_clients().identity_admin.tenants.list()
    tenants = dict(((t.id, t.name) for t in tenants))
    p = pagination.Pagination(len(networks))
    offset = p.limit_offset()
    networks = [net._info for net in networks[offset[0]:offset[1]]]
    for net in networks:
        net["label"] = tenants.get(net["project_id"], net["label"])
Beispiel #3
0
import urllib

import flask
from flask import blueprints
from flaskext import wtf

from focus import utils

from focus.views import environments
from focus.views import forms
from focus.views import pagination

from openstackclient_base.exceptions import HttpException

bp = environments.admin(blueprints.Blueprint('notifications', __name__))


class CreateNotification(wtf.Form):
    name = wtf.SelectField('Name', [wtf.Required()], choices=[])
    is_minimized = wtf.BooleanField('Is minimized')

    def __init__(self, *args, **kwargs):
        super(CreateNotification, self).__init__(*args, **kwargs)
        parameters = utils.notifications_api_call("/parameter")
        item_list = utils.notifications_api_call("/item")
        created_keys = set([par["key_"] for par in parameters])
        choices_dict = dict(((item["key_"], item["name"]) for item in item_list
                             if item["key_"] not in created_keys))
        self.name.choices = sorted(choices_dict.iteritems(),
                                   key=lambda i: i[1])
Beispiel #4
0
# License along with this program. If not, see
# <http://www.gnu.org/licenses/>.

import flask
from flask import blueprints

from focus import clients

from focus.views import environments
from focus.views import forms
from focus.views import pagination

from openstackclient_base.exceptions import HttpException


bp = environments.admin(blueprints.Blueprint('networks', __name__))


@bp.route('')
def index():
    try:
        networks = clients.admin_clients().compute.networks.list()
    except HttpException as ex:
        networks = []
    tenants = clients.admin_clients().identity_admin.tenants.list()
    tenants = dict(((t.id, t.name) for t in tenants))
    p = pagination.Pagination(len(networks))
    offset = p.limit_offset()
    networks = [net._info for net in networks[offset[0]:offset[1]]]
    for net in networks:
        net["label"] = tenants.get(net["project_id"], net["label"])
Beispiel #5
0
import urllib

import flask
from flask import blueprints
from flaskext import wtf

from focus import utils

from focus.views import environments
from focus.views import forms
from focus.views import pagination

from openstackclient_base.exceptions import HttpException


bp = environments.admin(blueprints.Blueprint("notifications", __name__))


class CreateNotification(wtf.Form):
    name = wtf.SelectField("Name", [wtf.Required()], choices=[])
    is_minimized = wtf.BooleanField("Is minimized")

    def __init__(self, *args, **kwargs):
        super(CreateNotification, self).__init__(*args, **kwargs)
        parameters = utils.notifications_api_call("/parameter")
        item_list = utils.notifications_api_call("/item")
        created_keys = set([par["key_"] for par in parameters])
        choices_dict = dict(((item["key_"], item["name"]) for item in item_list if item["key_"] not in created_keys))
        self.name.choices = sorted(choices_dict.iteritems(), key=lambda i: i[1])

Beispiel #6
0
# You should have received a copy of the GNU Lesser General Public
# License along with this program. If not, see
# <http://www.gnu.org/licenses/>.


import flask
from flask import blueprints
from flaskext import principal

from focus.models import orm
from focus.views import forms
from focus.views import environments
from focus.views import pagination


bp = environments.admin(blueprints.Blueprint('invitation_domains', __name__))


@bp.before_request
def prepare():
    principal.Permission(('role', 'admin')).test()
    flask.g.store = orm.get_store('INVITATIONS')


@bp.route('')
def index():
    total_count = flask.g.store.execute(
        'SELECT count(*) from email_masks').get_one()[0]
    p = pagination.Pagination(total_count)
    rows = flask.g.store.execute(
        'SELECT * from email_masks ORDER BY email_mask LIMIT ?, ?',
Beispiel #7
0
"""
import flask
from flask import blueprints

from focus import clients
from focus import utils
from focus.models import orm
from focus.views import environments
from focus.views import forms
from focus.views import pagination


from openstackclient_base.exceptions import HttpException


bp = environments.admin(blueprints.Blueprint('projects', __name__))


@bp.route('')
def index():
    """List projects.

    List only enabled, sort by name.
    """

    tenants = utils.get_visible_tenants()
    ordered = sorted(tenants, key=lambda x: x.name)
    pagina = pagination.Pagination(ordered)
    delete_form = forms.DeleteForm()
    return {
        'objects': pagina.slice(ordered),
Beispiel #8
0
import contextlib
import datetime
import json
import re
import urllib
import urlparse

import flask

from flask import blueprints
from focus.models import orm
from focus.views import environments


bp = environments.admin(blueprints.Blueprint('load_history', __name__))


def baseurl():
    url = flask.current_app.config['ZABBIX_PROXY_BASEURL']
    if not url.endswith('/'):
        url += '/'
    return url


@bp.context_processor
def titles():
    return {
        'title': 'Load history',
        'subtitle': 'CPU/Load Avg./Mem/free space/io-wait history of every compute node'
        }
Beispiel #9
0
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program. If not, see
# <http://www.gnu.org/licenses/>.

import flask
from flask import blueprints
from flaskext import principal

from focus.models import orm
from focus.views import forms
from focus.views import environments
from focus.views import pagination

bp = environments.admin(blueprints.Blueprint('invitation_domains', __name__))


@bp.before_request
def prepare():
    principal.Permission(('role', 'admin')).test()
    flask.g.store = orm.get_store('INVITATIONS')


@bp.route('')
def index():
    total_count = flask.g.store.execute(
        'SELECT count(*) from email_masks').get_one()[0]
    p = pagination.Pagination(total_count)
    rows = flask.g.store.execute(
        'SELECT * from email_masks ORDER BY email_mask LIMIT ?, ?',
Beispiel #10
0
Admins can list users, delete user, grant or revoke admin permissions.
TODO(apugachev) Look for a simpler way of deciding if user is admin.
TODO(apugachev) Add warnings for destroying operations.
TODO(apugachev) Add navigation inside this blueprint's pages.
"""
import flask
from flask import blueprints

from focus import clients
from focus import utils
from focus.views import environments
from focus.views import forms
from focus.views import pagination


bp = environments.admin(
    blueprints.Blueprint('global_user_management', __name__))


@bp.route('', methods=['GET'])
def index():
    """List users.

    TODO(apugachev): find way to count users without fetching all users.
    This would allow to use marker and limit to fetch one page only.
    """
    identity_admin = clients.admin_clients().identity_admin
    users = sorted(
        identity_admin.users.list(limit=1000000),
        key=lambda x: x.name)
    p = pagination.Pagination(users)
    data = p.slice(users)
Beispiel #11
0
Admins can list users, delete user, grant or revoke admin permissions.
TODO(apugachev) Look for a simpler way of deciding if user is admin.
TODO(apugachev) Add warnings for destroying operations.
TODO(apugachev) Add navigation inside this blueprint's pages.
"""
import flask
from flask import blueprints

from focus import clients
from focus import utils
from focus.views import environments
from focus.views import forms
from focus.views import pagination

bp = environments.admin(
    blueprints.Blueprint('global_user_management', __name__))


@bp.route('', methods=['GET'])
def index():
    """List users.

    TODO(apugachev): find way to count users without fetching all users.
    This would allow to use marker and limit to fetch one page only.
    """
    identity_admin = clients.admin_clients().identity_admin
    users = sorted(identity_admin.users.list(limit=1000000),
                   key=lambda x: x.name)
    p = pagination.Pagination(users)
    data = p.slice(users)
    potential_admins = set([
Beispiel #12
0
from flask import blueprints
from flaskext import mail
from flaskext import principal

from focus import clients
from focus import utils
from focus.models import row_mysql_queries
from focus.views import dataset
from focus.views import environments
from focus.views import exporter
from focus.views import forms
from focus.views import generic_billing
from focus.views import pagination


bp = environments.admin(blueprints.Blueprint('global_views', __name__))


@bp.before_request
def authorize():
    principal.Permission(('role', 'admin')).test()


@bp.route('configured_hostname/', methods=['GET', 'POST'])
def configured_hostname():
    '''
    Set hostname to use in all links set via email.
    '''
    form = forms.ConfigureHostnameForm()
    if form.validate_on_submit():
        # save
Beispiel #13
0
"""List and update tariffs.

Restrict access of non-admin users.
"""
import sys

import flask
from flask import blueprints

from focus import clients
from focus.views import environments
from focus.views import forms
from focus.views import generic_billing


bp = environments.admin(blueprints.Blueprint('tariffs', __name__))


@bp.route('')
def index():
    """List tariffs"""
    tariffs = generic_billing.get_tariff_list()
    return {
        'tariffs': tariffs,
        'title': bp.name.replace('global_', '').replace('_', ' ').capitalize(),
        'subtitle': 'List of tariffs'
    }


@bp.route('<path:name>/', methods=['GET', 'POST'])
def edit(name):
Beispiel #14
0
        # NOTE(apugachev) for big this will fail to load and BrokenPipe
        # will be raised inside Flask
        return flask.jsonify({})

    @bp.route('progress/<uploaded_filename>/')
    def progress(uploaded_filename):
        r = flask.current_app.cache.get(uploaded_filename)
        return flask.jsonify(r or {})

    @bp.route('<image_id>/delete/', methods=['POST'])
    def delete(image_id):
        image = clients.admin_clients().glance.images.get(image_id)
        owner = getattr(image, 'owner')
        if owner == clients.get_systenant_id():
            principal.Permission(('role', 'admin')).test()
        else:
            principal.Permission(('role', 'member', owner)).test()
        form = forms.DeleteForm()
        if form.validate_on_submit():
            image.delete()
            flask.flash('Image successfully deleted', 'success')
        else:
            flask.flash('Invalid form', 'error')
        return flask.redirect(flask.url_for('.index'))

    return bp


ABP = environments.admin(get_bp('global_images'))
PBP = environments.project(get_bp('project_images'))
Beispiel #15
0
import contextlib
import datetime
import json
import re
import urllib
import urlparse

import flask

from flask import blueprints
from focus.models import orm
from focus.views import environments


bp = environments.admin(blueprints.Blueprint("load_history", __name__))


def baseurl():
    url = flask.current_app.config["ZABBIX_PROXY_BASEURL"]
    if not url.endswith("/"):
        url += "/"
    return url


@bp.context_processor
def titles():
    return {"title": "Load history", "subtitle": "CPU/Load Avg./Mem/free space/io-wait history of every compute node"}


COMPUTE_ON = 0