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

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

153
hlna.py

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