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)
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()
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()
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()
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))
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'))
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))
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)
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
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)
def get_cell_name(self, id): cell = Cell.get(Cell.id == id) return cell.name
def _exists_cell(id): try: cell = Cell.get(Cell.id == id) except Cell.DoesNotExist: return False return True
def api_cell_get(id): cell = Cell.get(Cell.id == id) return cell_get(cell)
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)
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)