изменили работу status, изменили reconf, rename, printline

This commit is contained in:
Евгений Храмов 2023-06-06 23:08:00 +03:00
parent 09edcffd1f
commit 4fed6b897c

131
hlna.py

@ -1,11 +1,13 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os import os
import pprint
import re import re
import sys import sys
import zlib import zlib
import time import time
import struct import struct
import curses import curses
import pprint
import tarfile import tarfile
import logging import logging
import datetime import datetime
@ -155,9 +157,10 @@ def print_line(*text, flag="", sep=" ", end="\n"):
color = colorama.Fore.CYAN color = colorama.Fore.CYAN
else: else:
color = colorama.Fore.WHITE color = colorama.Fore.WHITE
len_text = str(text)
len_text = str(*text)
len_text = len_text.split("\n") len_text = len_text.split("\n")
max_length = max(len(string) for string in len_text) + 2 max_length = max(len(str(string)) for string in len_text) + 2
print(color + "." * max_length) print(color + "." * max_length)
print(color, *text, sep=sep, end=end) print(color, *text, sep=sep, end=end)
print(color + "." * max_length + colorama.Style.RESET_ALL) print(color + "." * max_length + colorama.Style.RESET_ALL)
@ -288,11 +291,11 @@ def ports(port, ports_arr, flag):
port = 27015 port = 27015
elif flag == 2: elif flag == 2:
port = 23331 port = 23331
print_line("Port=", port, flag="CYAN") print_line(f"Port={port}", flag="CYAN")
return port return port
else: else:
port = max(ports_arr) + 2 port = max(ports_arr) + 2
print_line("Port=", port, flag="CYAN") print_line(f"Port={port}", flag="CYAN")
if port in ports_arr: if port in ports_arr:
print_line("Порт уже занят", flag="RED") print_line("Порт уже занят", flag="RED")
port = check_int("Введите новый порт") port = check_int("Введите новый порт")
@ -388,10 +391,7 @@ def config_maps(i):
def config_nameserver(map_s): def config_nameserver(map_s):
while True: while True:
name_exist_server = choose_map(g="ark", m=map_s)[-1] # вызывается когда не нужен, затем когда доходит до создания юнита в config_ark туда приходит не то имя, которое ожидалось
name_server = input("Укажите название Сервера: \n") name_server = input("Укажите название Сервера: \n")
if name_exist_server != name_server:
os.system(f"mv {dir_unit}ark_{name_exist_server}.service {dir_unit}ark_{name_server}.service")
if name_server == "": if name_server == "":
if map_s in list_config: if map_s in list_config:
count = 1 count = 1
@ -414,9 +414,21 @@ def config_nameserver(map_s):
if choose_reconf == "" or choose_reconf == "3": if choose_reconf == "" or choose_reconf == "3":
exit() exit()
elif choose_reconf == "1": elif choose_reconf == "1":
new_nameserver = input("Укажите название Сервера: \n")
try:
if new_nameserver != name_server:
os.system(f"systemctl --user disable {dir_unit}ark_{name_server.lower()}.service")
os.system(f"rm {dir_unit}ark_{name_server.lower()}.service")
os.system(f"mv {dir_maps_ark}{name_server} {dir_maps_ark}{new_nameserver}")
return new_nameserver, True
else:
print_line("Вы ввели тоже имя.")
continue continue
except Exception:
print_line(Exception)
elif choose_reconf == "2": elif choose_reconf == "2":
config_ark(flag=True) config_ark(flag=False)
break
else: else:
print_line("Выберите ВОЗМОЖНОЕ действие") print_line("Выберите ВОЗМОЖНОЕ действие")
else: else:
@ -486,19 +498,20 @@ def config_ark(list_config=list_config, flag=False):
id_mods_ark = "" id_mods_ark = ""
cluster_server, cluster_id, cluster_dir_override = config_cluster() cluster_server, cluster_id, cluster_dir_override = config_cluster()
count_maps = config_nummap()
if list_config: if list_config:
print_line("Уже установленные карты: ", flag="CYAN") print_line("Существующие активные карты: ", flag="CYAN")
for i in list_config: for i in list_config:
data = read_yaml(g="ark", m=i) data = read_yaml(g="ark", m=i)
print_line(f"Карта - {i} : Имя сервера {data['SessionName']}", flag="CYAN") print_line(f"Карта - {data['map']} : Имя сервера {i}", flag="CYAN")
count_maps = config_nummap()
for i in range(count_maps): for i in range(count_maps):
map_s, port_s, query_p, rcon_p = config_maps(i) map_s, port_s, query_p, rcon_p = config_maps(i)
if flag: if flag == True:
list_config = [reconf_yaml()] reconf_yaml()
break
else: else:
list_config = config_nameserver(map_s) name_server, flag = config_nameserver(map_s)
if flag == False:
port_server = config_ports(port_s) port_server = config_ports(port_s)
query_port = config_query(query_p) query_port = config_query(query_p)
rcon_port = config_rcon(rcon_p) rcon_port = config_rcon(rcon_p)
@ -508,9 +521,14 @@ def config_ark(list_config=list_config, flag=False):
max_players = config_players() max_players = config_players()
listen_server = config_listen() listen_server = config_listen()
yaml_create("ark", "", cluster_server, map_s, list_config[-1], port_server, query_port, yaml_create("ark", "", cluster_server, map_s, name_server, port_server, query_port,
rcon_enabled, rcon_port, adminpassword_server, password_server, max_players, rcon_enabled, rcon_port, adminpassword_server, password_server, max_players,
id_mods_ark, cluster_id, cluster_dir_override, listen_server) id_mods_ark, cluster_id, cluster_dir_override, listen_server)
data = read_yaml(g="ark", m=map_s)
yaml_create("ark", data['ServerPath'], data['Cluster'], data['map'], name_server, data['Port'],
data['QueryPort'], data['RCONEnabled'], data['RCONPort'], data['ServerAdminPassword'],
data['ServerPassword'],data['MaxPlayers'], id_mods_ark, data['clusterid'], data['clusterdir'],
data['Listen'])
def config_7daystodie(): def config_7daystodie():
@ -533,7 +551,7 @@ def config_7daystodie():
@click.argument('g', nargs=1) @click.argument('g', nargs=1)
@click.option('-m', default='all', help="Название карты для запуска или all для запуска всех карт") @click.option('-m', default='all', help="Название карты для запуска или all для запуска всех карт")
def config_backup(g, m): def config_backup(g, m):
if g == "ark": if g.lower() == "ark":
name_server = choose_map(g, m) name_server = choose_map(g, m)
if m == "all": if m == "all":
all_empty = True # флаг all_empty = True # флаг
@ -889,44 +907,16 @@ def switch(g, m, e): # добавить all
print_line("ошибка операции", flag="RED") print_line("ошибка операции", flag="RED")
# Добавить возможность вывода информации по запрошенной игре + карте (серверу), а так же по всем.
@hlna.command(help='Выводит статус настроеных серверов') @hlna.command(help='Выводит статус настроеных серверов')
def status(list_config=list_config): @click.argument('g', nargs=1)
ext_ip = get_external_ip() @click.option("-m", default='all', help="Название cервера")
if list_config == [] and delist_config == []: def status(g, m="all", list_config=list_config):
print_line("Сервера не сконфигурированы", flag="RED") """print_status делает вывод, flag - отвечает за показ активных/неактивных, под 7days надо будет дописать"""
else: def print_status(g, status_map, flag=True):
for i in list_config: data = status_map
data = read_yaml(g="ark", m=i) print_line(data["status"], flag=("YELLOW", "RED")[flag] if data['status'] == "Не запущен" else "GREEN")
x = os.system(f"lsof -w -i :{data['Port']}")
if x == 0:
print_line("Сервер запущен", flag="GREEN")
else:
print_line("Сервер не запущен", flag="RED")
# этот принт надо отдельной функцией сделать, чтобы убрать дублирование текста
print_line(f""" print_line(f"""
Имя сервера: {i} Имя сервера: {data['SessionName']}
Карта: {data['map']}
Моды: {data['ModsId']}
Пароль: {data['ServerPassword']}S
Кластер: {data['Cluster']}
Кластер id: {data['clusterid']}
Query порт: {data['QueryPort']}
Порт сервера: {data['Port']}
Rcon включен: {data['RCONEnabled']}
Rcon порт : {data['RCONPort']}
Максимальное кол-во игроков: {data['MaxPlayers']}
steam://connect/{ext_ip}:{data['QueryPort']}""", flag="CYAN")
if delist_config != []:
x = input("Есть неактивные сервера, показать Y/n: ")
if x != "n":
for i in delist_config:
data = read_yaml(m=i,g="ark", flag=False)
print_line(f"""
Имя сервера: {i}
Карта: {data['map']} Карта: {data['map']}
Моды: {data['ModsId']} Моды: {data['ModsId']}
Пароль: {data['ServerPassword']} Пароль: {data['ServerPassword']}
@ -936,8 +926,35 @@ def status(list_config=list_config):
Порт сервера: {data['Port']} Порт сервера: {data['Port']}
Rcon включен: {data['RCONEnabled']} Rcon включен: {data['RCONEnabled']}
Rcon порт : {data['RCONPort']} Rcon порт : {data['RCONPort']}
Максимальное кол-во игроков: {data['MaxPlayers']}""", flag="YELLOW") Максимальное кол-во игроков: {data['MaxPlayers']}
steam://connect/{get_external_ip()}:{data['QueryPort']}""", flag=("YELLOW","CYAN")[flag])
def get_param(g, list_con, flag=True):
for i in list_con:
data = read_yaml(g=g, m=i, flag=flag)
status_map["ark"][flag][data["SessionName"]] = data
status_map["ark"][flag][data["SessionName"]]['status'] = "Не запущен" if os.system(f"lsof -w -i :{data['Port']}") else "Запущен"
if list_config == [] and delist_config == []:
print_line("Сервера не сконфигурированы", flag="RED")
exit()
"Это скорее всего можно как то покрасивее записать, но пока так)"
status_map = {}
status_map["ark"] = {}
status_map["ark"][True] = {}
status_map["ark"][False] = {}
get_param("ark", list_config)
get_param("ark", delist_config, False)
if g == "ark":
name_servers = choose_map(g, m)
for i in name_servers:
print_status(g, status_map[g][True][i])
if delist_config != []:
x = input("Есть неактивные сервера, показать Y/n: ")
if x != "n":
for i in delist_config:
print_status(g, status_map[g][False][i], False)
return status_map
@hlna.command(help='Запуск, сконфигурированного сервера или кластера <hlna start ark -m all>') @hlna.command(help='Запуск, сконфигурированного сервера или кластера <hlna start ark -m all>')
@click.argument('g', nargs=1) @click.argument('g', nargs=1)
@ -1046,11 +1063,15 @@ def choose_map(g, m, list_config=list_config):
print_line('Найдены сервера с этой картой', flag="CYAN") print_line('Найдены сервера с этой картой', flag="CYAN")
for i, map in enumerate(name_servers): for i, map in enumerate(name_servers):
print_line(f"{i + 1}) {map}", flag="CYAN") print_line(f"{i + 1}) {map}", flag="CYAN")
print_line(f"{i + 2} Все", flag="CYAN")
x = None
if i != 0: if i != 0:
while True: while True:
try: try:
x = input("Выберите сервер из списка, либо несколько через запятую: ").split(',') x = input("Выберите сервер из списка, либо несколько через запятую: ").split(',')
x = [int(i) for i in x] x = [int(j) for j in x]
if i + 2 in x:
return name_servers
break break
except: except:
print_line("Неправильный ввод", flag="RED") print_line("Неправильный ввод", flag="RED")