Example #1
0
def api_cell_misc_data(cid, dtype):
    cell = Cell.get(Cell.id == cid)
    g = [node.get_misc_info_async(dtype) for node in cell.nodes]
    gevent.joinall(g)
    ret = []
    for x in g:
        ret.extend(x.get())
    logger.debug("RET: {}".format(ret))
    return jsonify(ret)
Example #2
0
def api_cell_misc_data(cid, dtype):
    cell = Cell.get(Cell.id == cid)
    g = [node.get_misc_info_async(dtype) for node in cell.nodes]
    gevent.joinall(g)
    ret = []
    for x in g:
        ret.extend(x.get())
    logger.debug("RET: {}".format(ret))
    return jsonify(ret)
Example #3
0
 def delete(cls, id):
     with database.database.atomic():
         cell = Cell.get(Cell.id == id)
         try:
             from .ras.forms import RasTargetForm
             RasTargetForm.delete_nonexists_target('cell', cell.name)
         except Exception as e:
             logger.exception(e)
         cell.delete_instance()
         CellNode.delete().where(CellNode.cell == id).execute()
Example #4
0
 def delete(cls, id):
     with database.database.atomic():
         cell = Cell.get(Cell.id == id)
         try:
             from .ras.forms import RasTargetForm
             RasTargetForm.delete_nonexists_target('cell', cell.name)
         except Exception as e:
             logger.exception(e)
         cell.delete_instance()
         CellNode.delete().where(CellNode.cell == id).execute()
Example #5
0
 def create(self, grpid):
     logger.debug("CREATE: {}".format(grpid))
     tgt = RasTarget()
     cell = Cell.get(Cell.id == self.cell.data)
     tgt.name = cell.name
     tgt.group = grpid
     tgt.type = 'cell'
     tgt.path = '{app}/{cell}'.format(
         app=cell.get_appname(), cell=cell.name)
     tgt.comment = self.comment.data
     tgt.save()
Example #6
0
 def create(self, grpid):
     logger.debug("CREATE: {}".format(grpid))
     tgt = RasTarget()
     cell = Cell.get(Cell.id == self.cell.data)
     tgt.name = cell.name
     tgt.group = grpid
     tgt.type = 'cell'
     tgt.path = '{app}/{cell}'.format(app=cell.get_appname(),
                                      cell=cell.name)
     tgt.comment = self.comment.data
     tgt.save()
Example #7
0
def cell_event(id):
    cell = Cell.get(Cell.id == id)
    logger.debug("REQUEST: {}".format(cell.name))
    listener = EventListener('cell:status_detail', source=cell.name)
    ev = {'name': 'status_detail', 'target': cell}

    def setup(_callback):
        listener.regist(_callback)
        listener.enable(ev)

    def teardown(_callback):
        listener.unregist(_callback)
        listener.disable(ev)

    return _make_sse_response(_generator(setup, teardown))
Example #8
0
def cell_event(id):
    cell = Cell.get(Cell.id == id)
    logger.debug("REQUEST: {}".format(cell.name))
    listener = EventListener('cell:status_detail', source=cell.name)
    ev = {'name': 'status_detail', 'target': cell}

    def setup(_callback):
        listener.regist(_callback)
        listener.enable(ev)

    def teardown(_callback):
        listener.unregist(_callback)
        listener.disable(ev)

    return _make_sse_response(_generator(setup, teardown))
Example #9
0
def cell_detail(id):
    if request.method == 'GET':
        cell = Cell.get(Cell.id == id)
        nstatus = cell.get_node_status()
        nodes = [v for k, v in sorted(nstatus.iteritems())]
        return render_template('cell_show.html', cell=cell, nodes=nodes)
    elif request.method == 'POST':
        if request.form['operation'] == 'Update':
            form = CellForm(request.form)
            if not (form.validate() and form.update(id)):
                return render_template('cell_update.html', form=form, id=id)
        elif request.form['operation'] == 'Delete':
            CellForm.delete(id)
        else:
            abort(400)
        return redirect(url_for('cell_list'))
Example #10
0
def cell_detail(id):
    if request.method == 'GET':
        cell = Cell.get(Cell.id == id)
        nstatus = cell.get_node_status()
        nodes = [v for k, v in sorted(nstatus.iteritems())]
        return render_template('cell_show.html', cell=cell, nodes=nodes)
    elif request.method == 'POST':
        if request.form['operation'] == 'Update':
            form = CellForm(request.form)
            if not (form.validate() and form.update(id)):
                return render_template('cell_update.html', form=form, id=id)
        elif request.form['operation'] == 'Delete':
            CellForm.delete(id)
        else:
            abort(400)
        return redirect(url_for('cell_list'))
Example #11
0
def api_cell_op(id, op, params=None):
    cell = Cell.get(Cell.id == id)
    if op == 'start':
        cell.start(params)
        return make_response('', 204)
    elif op == 'stop':
        cell.stop(params)
        return make_response('', 204)
    elif op == 'deploy config':
        cell.deploy_conf()
        return make_response('', 204)
    elif op == 'deploy core':
        for cnode in cell.nodes:
            cnode.node.deploy()
        return make_response('', 204)
    else:
        abort(400, 'bad operation "{0}"'.format(op))
Example #12
0
def api_cell_op(id, op, params=None):
    cell = Cell.get(Cell.id == id)
    if op == 'start':
        cell.start(params)
        return make_response('', 204)
    elif op == 'stop':
        cell.stop(params)
        return make_response('', 204)
    elif op == 'deploy config':
        cell.deploy_conf()
        return make_response('', 204)
    elif op == 'deploy core':
        for cnode in cell.nodes:
            cnode.node.deploy()
        return make_response('', 204)
    else:
        abort(400, 'bad operation "{0}"'.format(op))
Example #13
0
def api_cell_detail(id):
    if request.method == 'GET':
        return api_cell_get(id)
    elif request.method == 'DELETE':
        with database.database.atomic():
            cell = Cell.get(Cell.id == id)
            cell.delete_instance(recursive=True)
        return make_response('', 204)
    elif request.method == 'PUT':
        params = request.get_json()
        logger.debug("PUT: {}".format(params))
        if 'op' in params:
            return api_cell_op(id, params['op'], params)
        elif 'cell' in params:
            return api_cell_update(id, params['cell'])
        else:
            abort(400)
    else:
        abort(405)
Example #14
0
def api_cell_detail(id):
    if request.method == 'GET':
        return api_cell_get(id)
    elif request.method == 'DELETE':
        with database.database.atomic():
            cell = Cell.get(Cell.id == id)
            cell.delete_instance(recursive=True)
        return make_response('', 204)
    elif request.method == 'PUT':
        params = request.get_json()
        logger.debug("PUT: {}".format(params))
        if 'op' in params:
            return api_cell_op(id, params['op'], params)
        elif 'cell' in params:
            return api_cell_update(id, params['cell'])
        else:
            abort(400)
    else:
        abort(405)
Example #15
0
def api_cell_update(id, jcell):
    with database.database.atomic():
        cell = Cell.get(Cell.id == id)
        jnodes = jcell['nodes']
        del jcell['nodes']
        _update_model(Cell, cell, jcell)
        cell.save()
        cnids = [jcnode['id'] for jcnode in jnodes if 'id' in jcnode]
        for cnode in cell.nodes:
            if cnode.id not in cnids:
                cnode.delete_instance()
        for jcnode in jnodes:
            if 'id' in jcnode:
                cnode = CellNode.get(CellNode.id == jcnode['id'])
                _update_model(CellNode, cnode, jcnode)
            else:
                jcnode['cell'] = cell.id
                cnode = dict_to_model(CellNode, jcnode)
            cnode.save()
        resp = jsonify(cell=_cell_to_dict(cell))
        return resp
Example #16
0
def api_cell_update(id, jcell):
    with database.database.atomic():
        cell = Cell.get(Cell.id == id)
        jnodes = jcell['nodes']
        del jcell['nodes']
        _update_model(Cell, cell, jcell)
        cell.save()
        cnids = [jcnode['id'] for jcnode in jnodes if 'id' in jcnode]
        for cnode in cell.nodes:
            if cnode.id not in cnids:
                cnode.delete_instance()
        for jcnode in jnodes:
            if 'id' in jcnode:
                cnode = CellNode.get(CellNode.id == jcnode['id'])
                _update_model(CellNode, cnode, jcnode)
            else:
                jcnode['cell'] = cell.id
                cnode = dict_to_model(CellNode, jcnode)
            cnode.save()
        resp = jsonify(cell=_cell_to_dict(cell))
        return resp
Example #17
0
def cell_misc(id):
    cell = Cell.get(Cell.id == id)
    target = request.args['target']

    info0 = []
    if target == 'accept':
        title = (u'クライアント情報', u'クライアント一覧')
        label = [
            u'#', u'サーバ', u'クライアントアドレス', u'クライアントポート', u'プロセスID', u'セッション番号',
            u'リクエスト順番号', u'再接続番号', u'試行回数', u'参照数', u'fd', u'接続状態',
            u'処理開始リクエスト順番号', u'処理終了リクエスト順番号', u'応答済リクエスト順番号', u'コマンド番号',
            u'送信待ちイベント数', u'イベント即送信可能性', u'生成時刻', u'アクセス時刻'
        ]
    elif target == 'FdEvent':
        title = (u'FDイベント情報', u'FDイベント情報')
        label = [u'#', u'サーバ', u'fd', u'FDイベントフラグ']
    elif target == 'out_of_band':
        title = (u'帯域外データ情報', u'帯域外データ一覧')
        label = [
            u'#', u'サーバ', u'クライアントアドレス', u'クライアントポート', u'プロセスID', u'セッション番号',
            u'リクエスト順番号', u'再接続番号', u'試行回数', u'検証済', u'データのメモリアドレス', u'PAXOS順番号'
        ]
    elif target == 'path':
        title = (u'ディレクトリイベント情報', u'イベント受付先のクライアント一覧')
        label = [
            u'#', u'サーバ', u'ディレクトリ名', u'参照数', u'クライアントアドレス', u'クライアントポート',
            u'プロセスID', u'セッション番号', u'リクエスト順番号', u'再接続番号', u'試行回数', u'参照数',
            u'fd', u'接続状態', u'処理開始リクエスト順番号', u'処理終了リクエスト順番号', u'応答済みリクエスト順番号',
            u'コマンド番号', u'送信待ちイベント数', u'イベント即送信可能性', u'生成時刻', u'アクセス時刻',
            u'FD番号', u'イベントビット'
        ]
    elif target == 'lock':
        title = (u'ロックイベント情報', u'ロックイベント一覧')
        label = [
            u'#', u'サーバ', u'ロック名', u'ロック保有者数', u'保有/待機', u'クライアントアドレス',
            u'クライアントポート', u'プロセスID', u'セッション番号', u'リクエスト順番号', u'再接続番号',
            u'試行回数', u'参照数', u'fd', u'接続状態', u'処理開始リクエスト順番号', u'処理終了リクエスト順番号',
            u'応答済みリクエスト順番号', u'コマンド番号', u'送信待ちイベント数', u'イベント即送信可能性', u'生成時刻',
            u'アクセス時刻', u'FD番号', u'イベントビット'
        ]
    elif target == 'queue':
        title = (u'キューイベント一覧', u'キューデータ一覧', u'待機クライアント一覧')
        label = [[u'#', u'サーバ', u'キュー名', u'キューデータ数', u'ACK待ち', u'データ長'],
                 [
                     u'#', u'サーバ', u'キュー名', u'キューデータ数', u'ACK待ち', u'待機種',
                     u'クライアントアドレス', u'クライアントポート', u'プロセスID', u'セッション番号',
                     u'リクエスト順番号', u'再接続番号', u'試行回数', u'参照数', u'fd', u'接続状態',
                     u'処理開始リクエスト順番号', u'処理終了リクエスト順番号', u'応答済みリクエスト順番号',
                     u'コマンド番号', u'送信待ちイベント数', u'イベント即送信可能性', u'生成時刻',
                     u'アクセス時刻', u'FD番号', u'イベントビット'
                 ]]
        info0 = cell.get_misc_info(target).data
    elif target == 'meta':
        title = (u'メタデータ情報', u'メタデータ一覧')
        label = [
            u'#', u'サーバ', u'メモリアドレス', u'参照数', u'メタデータ(ファイル)名', u'fd番号',
            u'ファイルサイズ'
        ]
    elif target == 'fd':
        title = (u'Fdデータ情報', u'Fdデータ一覧')
        label = [
            u'#', u'サーバ', u'メモリアドレス', u'参照数', u'fdデータ(ファイル)名',
            u'実ファイルのディレクトリ名', u'実ファイルのファイル名(basename)', u'fd番号'
        ]
    elif target == 'block':
        title = (u'ブロックキャッシュデータ情報', u'ブロックキャッシュデータ一覧')
        label = [
            u'#', u'サーバ', u'メモリアドレス', u'参照数', u'ファイル名', u'開始オフセット(バイト)',
            u'データ長(バイト)', u'フラグ'
        ]
    elif target == 'df':
        title = (u'領域空き情報', u'領域空き状態')
        label = [
            u'#', u'サーバ', u'ファイルシステム', u'総量', u'使用済', u'未使用', u'使用%',
            u'マウントポイント'
        ]
    else:
        abort(400)

    if isinstance(info0, tuple):
        tbl = []
        for i, v in enumerate(info0):
            tbl.append(
                dict(
                    title=title[i + 1],
                    label=label[i],
                    info=sorted(v, key=lambda x: int(x[0])),
                ))
        return render_template('cell_misc2.html',
                               cell=cell,
                               title=title[0],
                               table=tbl)
    else:
        info = sorted(info0, key=lambda x: int(x[0]))
        return render_template('cell_misc.html',
                               cell=cell,
                               title=title,
                               label=label,
                               info=info)
Example #18
0
 def get_cell_name(self, id):
     cell = Cell.get(Cell.id == id)
     return cell.name
Example #19
0
def _exists_cell(id):
    try:
        cell = Cell.get(Cell.id == id)
    except Cell.DoesNotExist:
        return False
    return True
Example #20
0
def api_cell_get(id):
    cell = Cell.get(Cell.id == id)
    return cell_get(cell)
Example #21
0
def cell_misc(id):
    cell = Cell.get(Cell.id == id)
    target = request.args['target']

    info0 = []
    if target == 'accept':
        title = (u'クライアント情報', u'クライアント一覧')
        label = [u'#', u'サーバ', u'クライアントアドレス',
                 u'クライアントポート', u'プロセスID', u'セッション番号',
                 u'リクエスト順番号', u'再接続番号', u'試行回数', u'参照数',
                 u'fd', u'接続状態', u'処理開始リクエスト順番号',
                 u'処理終了リクエスト順番号', u'応答済リクエスト順番号',
                 u'コマンド番号', u'送信待ちイベント数',
                 u'イベント即送信可能性', u'生成時刻', u'アクセス時刻']
    elif target == 'FdEvent':
        title = (u'FDイベント情報', u'FDイベント情報')
        label = [u'#', u'サーバ', u'fd', u'FDイベントフラグ']
    elif target == 'out_of_band':
        title = (u'帯域外データ情報', u'帯域外データ一覧')
        label = [u'#', u'サーバ', u'クライアントアドレス',
                 u'クライアントポート', u'プロセスID', u'セッション番号',
                 u'リクエスト順番号', u'再接続番号', u'試行回数', u'検証済',
                 u'データのメモリアドレス', u'PAXOS順番号']
    elif target == 'path':
        title = (u'ディレクトリイベント情報',
                 u'イベント受付先のクライアント一覧')
        label = [u'#', u'サーバ', u'ディレクトリ名', u'参照数',
                 u'クライアントアドレス', u'クライアントポート',
                 u'プロセスID', u'セッション番号', u'リクエスト順番号',
                 u'再接続番号', u'試行回数', u'参照数', u'fd', u'接続状態',
                 u'処理開始リクエスト順番号', u'処理終了リクエスト順番号',
                 u'応答済みリクエスト順番号', u'コマンド番号',
                 u'送信待ちイベント数', u'イベント即送信可能性',
                 u'生成時刻', u'アクセス時刻', u'FD番号', u'イベントビット']
    elif target == 'lock':
        title = (u'ロックイベント情報', u'ロックイベント一覧')
        label = [u'#', u'サーバ', u'ロック名', u'ロック保有者数',
                 u'保有/待機', u'クライアントアドレス', u'クライアントポート',
                 u'プロセスID', u'セッション番号', u'リクエスト順番号',
                 u'再接続番号', u'試行回数', u'参照数', u'fd', u'接続状態',
                 u'処理開始リクエスト順番号', u'処理終了リクエスト順番号',
                 u'応答済みリクエスト順番号', u'コマンド番号',
                 u'送信待ちイベント数', u'イベント即送信可能性',
                 u'生成時刻', u'アクセス時刻', u'FD番号', u'イベントビット']
    elif target == 'queue':
        title = (u'キューイベント一覧', u'キューデータ一覧',
                 u'待機クライアント一覧')
        label = [[u'#', u'サーバ', u'キュー名', u'キューデータ数', u'ACK待ち',
                  u'データ長'],
                 [u'#', u'サーバ', u'キュー名', u'キューデータ数', u'ACK待ち',
                  u'待機種', u'クライアントアドレス', u'クライアントポート',
                  u'プロセスID', u'セッション番号', u'リクエスト順番号',
                  u'再接続番号', u'試行回数', u'参照数', u'fd', u'接続状態',
                  u'処理開始リクエスト順番号', u'処理終了リクエスト順番号',
                  u'応答済みリクエスト順番号', u'コマンド番号',
                  u'送信待ちイベント数', u'イベント即送信可能性',
                  u'生成時刻', u'アクセス時刻', u'FD番号', u'イベントビット']]
        info0 = cell.get_misc_info(target).data
    elif target == 'meta':
        title = (u'メタデータ情報', u'メタデータ一覧')
        label = [u'#', u'サーバ', u'メモリアドレス', u'参照数',
                 u'メタデータ(ファイル)名', u'fd番号', u'ファイルサイズ']
    elif target == 'fd':
        title = (u'Fdデータ情報', u'Fdデータ一覧')
        label = [u'#', u'サーバ', u'メモリアドレス', u'参照数',
                 u'fdデータ(ファイル)名', u'実ファイルのディレクトリ名',
                 u'実ファイルのファイル名(basename)', u'fd番号']
    elif target == 'block':
        title = (u'ブロックキャッシュデータ情報',
                 u'ブロックキャッシュデータ一覧')
        label = [u'#', u'サーバ', u'メモリアドレス', u'参照数', u'ファイル名',
                 u'開始オフセット(バイト)', u'データ長(バイト)', u'フラグ']
    elif target == 'df':
        title = (u'領域空き情報', u'領域空き状態')
        label = [u'#', u'サーバ', u'ファイルシステム', u'総量', u'使用済',
                 u'未使用', u'使用%', u'マウントポイント']
    else:
        abort(400)

    if isinstance(info0, tuple):
        tbl = []
        for i, v in enumerate(info0):
            tbl.append(dict(
                title=title[i + 1],
                label=label[i],
                info=sorted(v, key=lambda x: int(x[0])),
            ))
        return render_template('cell_misc2.html', cell=cell, title=title[0],
                               table=tbl)
    else:
        info = sorted(info0, key=lambda x: int(x[0]))
        return render_template('cell_misc.html', cell=cell, title=title,
                               label=label, info=info)
Example #22
0
def api_cell_get(id):
    cell = Cell.get(Cell.id == id)
    return cell_get(cell)
Example #23
0
def _exists_cell(id):
    try:
        cell = Cell.get(Cell.id == id)
    except Cell.DoesNotExist:
        return False
    return True
Example #24
0
def cell_delete(id):
    cell = Cell.get(Cell.id == id)
    form = CellForm(obj=cell)
    form.populate_cellnodes(cell.nodes)
    return render_template('cell_delete.html', form=form, id=id)
Example #25
0
 def get_cell_name(self, id):
     cell = Cell.get(Cell.id == id)
     return cell.name
Example #26
0
def cell_delete(id):
    cell = Cell.get(Cell.id == id)
    form = CellForm(obj=cell)
    form.populate_cellnodes(cell.nodes)
    return render_template('cell_delete.html', form=form, id=id)