diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100644 index 0000000..2af6343 Binary files /dev/null and b/assets/favicon.ico differ diff --git a/assets/style.css b/assets/style.css new file mode 100644 index 0000000..0505086 --- /dev/null +++ b/assets/style.css @@ -0,0 +1,67 @@ +.content { + /*display: flex;*/ + justify-content: center; + padding: 3rem; +} + +.main { + display: grid; + grid-template-areas: + "our_port search" + "servers sites" + "servers sites"; + grid-template-columns: 1fr 2fr; + grid-template-rows: auto auto; +} + +.our_port { + grid-area: our_port; + background: #53f453; + align-content: center; + border-radius: 0.4rem; + padding-left: 1rem; + padding-right: 1rem; + margin-right: 0.5rem; +} + +.servers { + grid-area: servers; +} + +.serv_elem { + background: #fff454; + align-content: center; + border-radius: 0.4rem; + padding-left: 1rem; + min-height: 2.2rem; + margin-top: 0.4rem; + margin-right: 0.5rem; +} + +.sites { + grid-area: sites; +} + +.sites_elem { + background: #abd4f9; + align-content: center; + border-radius: 0.4rem; + padding-left: 1rem; + min-height: 2.2rem; + margin-top: 0.4rem; +} + +.search { + grid-area: search; +} + + +/* Действия при разрешении телефона */ +@media (max-width: 900px) { + + .content { + display: flex; + padding: 0; + } + +} diff --git a/interface.py b/interface.py index 2a72f4d..9d38c3a 100644 --- a/interface.py +++ b/interface.py @@ -1,43 +1,62 @@ -import streamlit as st -import streamlit.components.v1 as components +from dash import Dash, dcc, html, Input, Output, callback +app = Dash(__name__, title='Jetwork', update_title=None) -from os import walk -from time import sleep from db import * +from os import walk -# Получаем порт со входа -from sys import argv -our_port = argv[1] - - -st.title('jetwork') - -ph = st.empty() - -while True: - # Боковая панель - with ph.container(): - # Столбцы для элементов - sidebar, space, main = st.columns([60, 10, 90]) - - - with sidebar: - st.success(f"Ваш порт: {our_port}") - - conf = read() - if 'ports' in conf: - ports = conf['ports'] - for i in ports: - st.warning(f"{i}") - - with main: - # Получаем все сайты - sites = next(walk('cached/'), (None, None, []))[1] - - for i in sites: - addr = f"http://127.0.0.1:8000/{i}" - st.info(f"[{i}]({addr})") - - sleep(3) - ph.empty() - st.rerun() +app.layout = html.Div([ html.Div([ + +html.Div([], id='our_port', className='our_port'), +html.Div([], id='servers', className='servers'), +html.Div([], id='sites', className='sites'), +#dcc.Input(className='search', type='search', list=[1,2,3]), +dcc.Dropdown(options=[], id='search', placeholder='Поиск...'), + +# TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO +dcc.Interval(id='interval-component', interval=1000*1000, n_intervals=0) + +], className='main')], className='content') + + + +# Обновление нашего порта (зачем?) +@callback(Output('our_port', 'children'), + Input('interval-component', 'n_intervals')) +def update_our_port(n): + return f"Ваш порт: {read()['our_port']}" + +# Обновление доступных узлов +@callback(Output('servers', 'children'), + Input('interval-component', 'n_intervals')) +def update_servers(n): + res = [] + for i in read()['ports']: + res.append(html.Div([i], className='serv_elem')) + return res + +# Обновление доступных сайтов +@callback(Output('sites', 'children'), + Input('interval-component', 'n_intervals'), + Input('search', 'value')) +def update_sites(n, s_val): + # Если есть элемент в поиске + if s_val: + return html.Div([s_val], className='sites_elem') + + res = [] + for i in next(walk('cached/'), (None, None, []))[1]: + res.append(html.Div([i], className='sites_elem')) + return res + +# Обновление доступных сайтов в поиске +@callback(Output('search', 'options'), + Input('interval-component', 'n_intervals')) +def update_search(n): + res = [] + for i in next(walk('cached/'), (None, None, []))[1]: + res.append(i) + return res + +#if __name__ == '__main__': +#app.run(debug=True, port = 9000) +app.run(debug=False, port = 9000) diff --git a/main.py b/main.py index 3d420cf..d98fd70 100644 --- a/main.py +++ b/main.py @@ -8,35 +8,41 @@ from network import * from updater import * from proxy import * from status import * +from db import * +# # Здесь общий запуск всех файлов и команд - - +# def main(): # Проверка обновлений from sys import argv if len(argv) == 1: - print("Проверка обновлений...") - system("git pull") - print("Перезагрузка скрипта...") - system("python main.py updated") + print('Проверка обновлений...') + system('git pull') + print('Перезагрузка скрипта...') + system('python main.py updated') exit() - print("\nУспешно перезагружено!") + print('\nУспешно перезагружено!') # Запуск прокси для сервисов # проксируем http сервер http_port = port_gen() - print(f"HTTP: {http_port}") + print(f'HTTP: {http_port}') rp_http = Thread(target = watch_http, args=(http_port,)) rp_http.start() # проксируем сервер обработки запросов serv_port = port_gen() - print(f"SERV: {serv_port}") + print(f'SERV: {serv_port}') rp_serv = Thread(target = watch_serv, args=(serv_port,)) rp_serv.start() + # Загружаем порт в конфиг + conf = read() + conf['our_port'] = serv_port + write(conf) + # Стартуем сервисы # http сервер http = Thread(target = server_http) @@ -49,11 +55,10 @@ def main(): updater = Thread(target = update_demon, args=(serv_port,)) updater.start() - # !!! ИДЁТ ПЕРЕРАБОТКА !!! # Стартуем интерфейс - system(f"python -m streamlit run --server.address=127.0.0.1 interface.py {serv_port}") + system('python interface.py') -if __name__ == "__main__": +if __name__ == '__main__': # Запускаем главный процесс, чтобы потом легко убить его p = Process(target=main) p.start() diff --git a/requirements.txt b/requirements.txt index 5cc3e49..c5f443e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ cryptography requests tqdm -streamlit +dash