from amis import Page, PageSchema, Html, Property, Service, Flex, ActionType, LevelEnum, Divider, Log, Alert, Form, \ Dialog, Select, Group, InputText, DisplayModeEnum, Horizontal from pagermaid.config import Config from pagermaid.web.html import get_logo logo = Html(html=get_logo()) select_log_num = Select( label='日志数量', name='log_num', value=100, options=[ { 'label': 100, 'value': 100 }, { 'label': 200, 'value': 200 }, { 'label': 300, 'value': 300 }, { 'label': 400, 'value': 400 }, { 'label': 500, 'value': 500 } ] ) log_page = Log( autoScroll=True, placeholder='暂无日志数据...', operation=['stop', 'showLineNumber', 'filter'], source={ 'method': 'get', 'url': '/pagermaid/api/log?num=${log_num | raw}', 'headers': { 'token': Config.WEB_SECRET_KEY } } ) cmd_input = Form( mode=DisplayModeEnum.horizontal, horizontal=Horizontal(left=0), wrapWithPanel=False, body=[ InputText(name='command', required=True, clearable=True, addOn=ActionType.Dialog( label='执行', level=LevelEnum.primary, dialog=Dialog( title='命令执行结果', size='xl', body=Log( autoScroll=True, placeholder='执行命令中,请稍候...', operation=['stop', 'showLineNumber', 'filter'], source={ 'method': 'get', 'url': '/pagermaid/api/run_sh?cmd=${command | raw}', 'headers': { 'token': Config.WEB_SECRET_KEY } }), ) )) ] ) eval_input = Form( mode=DisplayModeEnum.horizontal, horizontal=Horizontal(left=0), wrapWithPanel=False, body=[ InputText(name='command', required=True, clearable=True, addOn=ActionType.Dialog( label='执行', level=LevelEnum.primary, dialog=Dialog( title='命令执行结果', size='xl', body=Log( autoScroll=True, placeholder='执行命令中,请稍候...', operation=['stop', 'showLineNumber', 'filter'], source={ 'method': 'get', 'url': '/pagermaid/api/run_eval?cmd=${command | raw}', 'headers': { 'token': Config.WEB_SECRET_KEY } }), ) )) ] ) operation_button = Flex(justify='center', items=[ ActionType.Ajax( label='更新', api='/pagermaid/api/bot_update', confirmText='该操作会更新 PagerMaid-Pyro ,请在更新完成后手动重启,请确认执行该操作', level=LevelEnum.info ), ActionType.Ajax( label='重启', className='m-l', api='/pagermaid/api/bot_restart', confirmText='该操作会重启 PagerMaid-Pyro ,请耐心等待重启', level=LevelEnum.danger ), ActionType.Dialog( label='日志', className='m-l', level=LevelEnum.primary, dialog=Dialog(title='查看日志', size='xl', actions=[], body=[ Alert(level=LevelEnum.info, body='查看最近最多500条日志,不会自动刷新,需要手动点击两次"暂停键"来进行刷新。'), Form( body=[Group(body=[select_log_num]), log_page] )]) ), ActionType.Dialog( label='shell', className='m-l', level=LevelEnum.warning, dialog=Dialog(title='shell', size='lg', actions=[], body=[cmd_input]) ), ActionType.Dialog( label='eval', className='m-l', level=LevelEnum.warning, dialog=Dialog(title='eval', size='lg', actions=[], body=[eval_input]) ) ]) status = Service( api='/pagermaid/api/status', body=Property( title='运行信息', column=2, items=[ Property.Item( label='Bot 运行时间', content='${run_time}' ), Property.Item( label='CPU占用率', content='${cpu_percent}' ), Property.Item( label='RAM占用率', content='${ram_percent}' ), Property.Item( label='SWAP占用率', content='${swap_percent}', span=2 ), ] ) ) page_detail = Page(title='', body=[logo, operation_button, Divider(), status]) page = PageSchema(url='/home', label='首页', icon='fa fa-home', isDefaultPage=True, schema=page_detail)