From 11aa1825999c8711edd197df82b7267e3a646614 Mon Sep 17 00:00:00 2001 From: Pavel Loginov Date: Fri, 15 Jul 2022 21:55:54 +0300 Subject: [PATCH] v6.1.2.0 Change log: https://roxy-wi.org/changelog.py#6_1_2 --- app/create_db.py | 193 +++++++++++++++- app/db_model.py | 16 +- app/funct.py | 16 +- app/hapservers.py | 5 +- app/provisioning.py | 3 +- app/sql.py | 215 ++++-------------- app/templates/ajax/check_version.html | 26 +-- .../ajax/provisioning/aws_edit_dialog.html | 35 +-- .../ajax/provisioning/do_edit_dialog.html | 40 ++-- .../ajax/provisioning/gcore_edit_dialog.html | 89 ++------ .../ajax/provisioning/providers.html | 36 +-- .../provisioning/provisioned_servers.html | 63 ++--- app/templates/base.html | 1 - app/templates/hapservers.html | 60 +++-- .../provisioning/creating_dialogs.html | 102 ++------- .../provisioning/providers_dialogs.html | 9 +- .../include/provisioning/variables.html | 115 ++++++++-- app/templates/nettools.html | 6 +- app/templates/provisioning.html | 4 +- app/templates/viewstats.html | 24 +- app/templates/waf.html | 13 +- inc/images/provisioning/flags/au.svg | 8 + inc/images/provisioning/flags/bh.svg | 4 + inc/images/provisioning/flags/br.svg | 45 ++++ inc/images/provisioning/flags/ca.svg | 4 + inc/images/provisioning/flags/de.svg | 5 + inc/images/provisioning/flags/fr.svg | 7 + inc/images/provisioning/flags/gb.svg | 7 + inc/images/provisioning/flags/hk.svg | 30 +++ inc/images/provisioning/flags/ie.svg | 7 + inc/images/provisioning/flags/in.svg | 25 ++ inc/images/provisioning/flags/jp.svg | 11 + inc/images/provisioning/flags/kh.svg | 61 +++++ inc/images/provisioning/flags/kr.svg | 24 ++ inc/images/provisioning/flags/kz.svg | 23 ++ inc/images/provisioning/flags/lu.svg | 5 + inc/images/provisioning/flags/nl.svg | 5 + inc/images/provisioning/flags/pl.svg | 6 + inc/images/provisioning/flags/ru.svg | 7 + inc/images/provisioning/flags/se.svg | 4 + inc/images/provisioning/flags/sg.svg | 13 ++ inc/images/provisioning/flags/tr.svg | 8 + inc/images/provisioning/flags/ua.svg | 6 + inc/images/provisioning/flags/us.svg | 10 + inc/images/provisioning/flags/za.svg | 17 ++ inc/images/provisioning/oss/.DS_Store | Bin 0 -> 6148 bytes inc/images/provisioning/oss/centos.svg | 1 + inc/images/provisioning/oss/debian.svg | 1 + inc/images/provisioning/oss/fedora.svg | 1 + inc/images/provisioning/oss/rocky-linux.svg | 1 + inc/images/provisioning/oss/suse.svg | 1 + inc/images/provisioning/oss/ubuntu.svg | 1 + inc/images/provisioning/oss/windows.svg | 1 + inc/images/provisioning/providers/aws.svg | 1 + inc/images/provisioning/providers/do.svg | 72 ++++++ inc/images/provisioning/providers/gcore.svg | 1 + inc/metrics.js | 132 +---------- inc/provisioning.js | 138 +++++------ inc/script.js | 18 +- index.html | 25 +- 60 files changed, 1072 insertions(+), 735 deletions(-) create mode 100644 inc/images/provisioning/flags/au.svg create mode 100644 inc/images/provisioning/flags/bh.svg create mode 100644 inc/images/provisioning/flags/br.svg create mode 100644 inc/images/provisioning/flags/ca.svg create mode 100644 inc/images/provisioning/flags/de.svg create mode 100644 inc/images/provisioning/flags/fr.svg create mode 100644 inc/images/provisioning/flags/gb.svg create mode 100644 inc/images/provisioning/flags/hk.svg create mode 100644 inc/images/provisioning/flags/ie.svg create mode 100644 inc/images/provisioning/flags/in.svg create mode 100644 inc/images/provisioning/flags/jp.svg create mode 100644 inc/images/provisioning/flags/kh.svg create mode 100644 inc/images/provisioning/flags/kr.svg create mode 100644 inc/images/provisioning/flags/kz.svg create mode 100644 inc/images/provisioning/flags/lu.svg create mode 100644 inc/images/provisioning/flags/nl.svg create mode 100644 inc/images/provisioning/flags/pl.svg create mode 100644 inc/images/provisioning/flags/ru.svg create mode 100644 inc/images/provisioning/flags/se.svg create mode 100644 inc/images/provisioning/flags/sg.svg create mode 100644 inc/images/provisioning/flags/tr.svg create mode 100644 inc/images/provisioning/flags/ua.svg create mode 100644 inc/images/provisioning/flags/us.svg create mode 100644 inc/images/provisioning/flags/za.svg create mode 100644 inc/images/provisioning/oss/.DS_Store create mode 100644 inc/images/provisioning/oss/centos.svg create mode 100644 inc/images/provisioning/oss/debian.svg create mode 100644 inc/images/provisioning/oss/fedora.svg create mode 100644 inc/images/provisioning/oss/rocky-linux.svg create mode 100644 inc/images/provisioning/oss/suse.svg create mode 100644 inc/images/provisioning/oss/ubuntu.svg create mode 100644 inc/images/provisioning/oss/windows.svg create mode 100644 inc/images/provisioning/providers/aws.svg create mode 100644 inc/images/provisioning/providers/do.svg create mode 100644 inc/images/provisioning/providers/gcore.svg diff --git a/app/create_db.py b/app/create_db.py index 7679fe3e..fde7a1fd 100644 --- a/app/create_db.py +++ b/app/create_db.py @@ -192,6 +192,197 @@ def default_values(): except Exception as e: print(str(e)) + data_source = [ + {'param': 'aws', 'name': 'AWS', 'optgroup': 'aws', 'section': 'provider', 'provider': 'aws', 'image': '/inc/images/provisioning/providers/aws.svg'}, + {'param': 'do', 'name': 'DigitalOcearn', 'optgroup': 'do', 'section': 'provider', 'provider': 'do', 'image': '/inc/images/provisioning/providers/do.svg'}, + {'param': 'gcore', 'name': 'G-Core Labs', 'optgroup': 'gcore', 'section': 'provider', 'provider': 'gcore', 'image': '/inc/images/provisioning/providers/gcore.svg'}, + {'param': 'us-east-1', 'name': 'N. Virginia', 'optgroup': 'US East', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': 'us-east-2', 'name': 'Ohio', 'optgroup': 'US East', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': 'us-west-1', 'name': 'N. California', 'optgroup': 'US West', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': 'us-west-2', 'name': 'Oregon', 'optgroup': 'US West', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': 'af-south-1', 'name': 'Cape Town', 'optgroup': 'Africa', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/za.svg'}, + {'param': 'ap-east-1', 'name': 'Hong Kong', 'optgroup': 'Asia Pacific', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/hk.svg'}, + {'param': 'ap-south-1', 'name': 'Mumbai', 'optgroup': 'Asia Pacific', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/in.svg'}, + {'param': 'ap-northeast-2', 'name': 'Seoul', 'optgroup': 'Asia Pacific', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/kr.svg'}, + {'param': 'ap-southeast-1', 'name': 'Singapore', 'optgroup': 'Asia Pacific', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/sg.svg'}, + {'param': 'ap-southeast-2', 'name': 'Sydney', 'optgroup': 'Asia Pacific', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/au.svg'}, + {'param': 'ap-northeast-1', 'name': 'Tokyo', 'optgroup': 'Asia Pacific', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/jp.svg'}, + {'param': 'ca-central-1', 'name': 'Central', 'optgroup': 'Canada', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/ca.svg'}, + {'param': 'eu-central-1', 'name': 'Frankfurt', 'optgroup': 'Europe', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/de.svg'}, + {'param': 'eu-west-1', 'name': 'Ireland', 'optgroup': 'Europe', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/ie.svg'}, + {'param': 'eu-west-2', 'name': 'London', 'optgroup': 'Europe', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/gb.svg'}, + {'param': 'eu-south-1', 'name': 'Milan', 'optgroup': 'Europe', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/fr.svg'}, + {'param': 'eu-west-3', 'name': 'Paris', 'optgroup': 'Europe', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/fr.svg'}, + {'param': 'eu-north-1', 'name': 'Stockholm', 'optgroup': 'Europe', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/se.svg'}, + {'param': 'me-south-1', 'name': 'Bahrain', 'optgroup': 'Middle East', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/bh.svg'}, + {'param': 'sa-east-1', 'name': 'São Paulo', 'optgroup': 'South America', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/br.svg'}, + {'param': 'nyc1', 'name': 'New York 1', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': 'nyc2', 'name': 'New York 2', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': 'nyc3', 'name': 'New York 3', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': 'sfo1', 'name': 'San Francisco 1', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': 'sfo2', 'name': 'San Francisco 2', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': 'sfo3', 'name': 'San Francisco 3', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': 'tor1', 'name': 'Toronto 1', 'optgroup': 'Canada', 'section': 'region', 'provider': 'do', + 'image': '/inc/images/provisioning/flags/ca.svg'}, + {'param': 'ams2', 'name': 'Amsterdam 2', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/nl.svg'}, + {'param': 'ams3', 'name': 'Amsterdam 3', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/nl.svg'}, + {'param': 'fra1', 'name': 'Frankfurt 1', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/de.svg'}, + {'param': 'lon1', 'name': 'London 1', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do', + 'image': '/inc/images/provisioning/flags/gb.svg'}, + {'param': 'sgp1', 'name': 'Singapore 1', 'optgroup': 'Asia', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/sg.svg'}, + {'param': 'blr1', 'name': 'Bangalore 1', 'optgroup': 'Asia', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/bh.svg'}, + {'param': '68', 'name': 'Chicago', 'optgroup': 'Americas', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': '14', 'name': 'Manassas', 'optgroup': 'Americas', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': '35', 'name': 'Santa-Clara', 'optgroup': 'Americas', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/us.svg'}, + {'param': '64', 'name': 'Hong-Kong', 'optgroup': 'Asia-Pacific', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/hk.svg'}, + {'param': '18', 'name': 'Singapore', 'optgroup': 'Asia-Pacific', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/sg.svg'}, + {'param': '88', 'name': 'Sydney', 'optgroup': 'Asia-Pacific', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/au.svg'}, + {'param': '29', 'name': 'Tokyo', 'optgroup': 'Asia-Pacific', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/jp.svg'}, + {'param': '46', 'name': 'Almaty', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/kz.svg'}, + {'param': '26', 'name': 'Amsterdam', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', + 'image': '/inc/images/provisioning/flags/nl.svg'}, + {'param': '26', 'name': 'Amsterdam', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', + 'image': '/inc/images/provisioning/flags/nl.svg'}, + {'param': '38', 'name': 'Frankfurt', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', + 'image': '/inc/images/provisioning/flags/de.svg'}, + {'param': '50', 'name': 'Istanbul', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', + 'image': '/inc/images/provisioning/flags/tr.svg'}, + {'param': '84', 'name': 'Johannesburg', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/za.svg'}, + {'param': '6', 'name': 'Luxembourg', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/lu.svg'}, + {'param': '76', 'name': 'Luxembourg-2', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/lu.svg'}, + {'param': '56', 'name': 'Paris', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/fr.svg'}, + {'param': '80', 'name': 'Warsaw', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/pl.svg'}, + {'param': '22', 'name': 'Khabarovsk', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ru.svg'}, + {'param': '10', 'name': 'Moscow', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ru.svg'}, + {'param': '42', 'name': 'Saint Petersburg', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ru.svg'}, + {'param': '60', 'name': 'Yekaterinburg', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ru.svg'}, + {'param': 'ubuntu-18-04', 'name': 'Ubuntu 18.04', 'optgroup': 'Ubuntu', 'section': 'image', + 'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'}, + {'param': 'ubuntu-20-04', 'name': 'Ubuntu 20.04', 'optgroup': 'Ubuntu', 'section': 'image', + 'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'}, + {'param': 'ubuntu-20-14', 'name': 'Ubuntu 20.14', 'optgroup': 'Ubuntu', 'section': 'image', + 'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'}, + {'param': 'ubuntu-22-04', 'name': 'Ubuntu 22.04', 'optgroup': 'Ubuntu', 'section': 'image', + 'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'}, + {'param': 'centos-7', 'name': 'CentOS 7', 'optgroup': 'CentOS', 'section': 'image', + 'provider': 'aws', 'image': '/inc/images/provisioning/oss/centos.svg'}, + {'param': 'centos-8', 'name': 'CentOS 8', 'optgroup': 'CentOS', 'section': 'image', + 'provider': 'aws', 'image': '/inc/images/provisioning/oss/centos.svg'}, + {'param': 'centos-9', 'name': 'CentOS 9', 'optgroup': 'CentOS', 'section': 'image', + 'provider': 'aws', 'image': '/inc/images/provisioning/oss/centos.svg'}, + {'param': 'debian-9', 'name': 'Debian 9', 'optgroup': 'Debian', 'section': 'image', 'provider': 'aws', + 'image': '/inc/images/provisioning/oss/debian.svg'}, + {'param': 'debian-10', 'name': 'Debian 10', 'optgroup': 'Debian', 'section': 'image', 'provider': 'aws', + 'image': '/inc/images/provisioning/oss/debian.svg'}, + {'param': 'debian-11', 'name': 'Debian 11', 'optgroup': 'Debian', 'section': 'image', 'provider': 'aws', + 'image': '/inc/images/provisioning/oss/debian.svg'}, + {'param': 'amazon-2_lts', 'name': 'Amazon Linux 2', 'optgroup': 'Amazon Linux', 'section': 'image', 'provider': 'aws', + 'image': '/inc/images/provisioning/providers/aws.svg'}, + {'param': 'ubuntu-18-04-x64', 'name': 'Ubuntu 18.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'}, + {'param': 'ubuntu-20-04-x64', 'name': 'Ubuntu 20.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'}, + {'param': 'ubuntu-20-14-x64', 'name': 'Ubuntu 20.14', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'}, + {'param': 'ubuntu-22-04-x64', 'name': 'Ubuntu 22.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'}, + {'param': 'centos-7-x64', 'name': 'CentOS 7', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/centos.svg'}, + {'param': 'centos-stream-8-x64', 'name': 'CentOS 8 Stream', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/centos.svg'}, + {'param': 'centos-stream-9-x64', 'name': 'CentOS 9 Stream', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/centos.svg'}, + {'param': 'rockylinux-8-4-x64', 'name': 'RockyLinux 8.4', 'optgroup': 'RockyLinux', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/rocky-linux.svg'}, + {'param': 'rockylinux-8-x64', 'name': 'RockyLinux 8.5', 'optgroup': 'RockyLinux', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/rocky-linux.svg'}, + {'param': 'debian-9-x64', 'name': 'Debian 9', 'optgroup': 'Debian', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/debian.svg'}, + {'param': 'debian-10-x64', 'name': 'Debian 10', 'optgroup': 'Debian', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/debian.svg'}, + {'param': 'debian-11-x64', 'name': 'Debian 11', 'optgroup': 'Debian', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/debian.svg'}, + {'param': 'ubuntu-18.04-x64', 'name': 'Ubuntu 18.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'}, + {'param': 'ubuntu-20.04-x64', 'name': 'Ubuntu 20.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'}, + {'param': 'ubuntu-20.10-x64', 'name': 'Ubuntu 20.10', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'}, + {'param': 'ubuntu-22.04-x64', 'name': 'Ubuntu 22.02', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'}, + {'param': 'centos-7-1811-x64-qcow2', 'name': 'CentOS 7.6', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/centos.svg'}, + {'param': 'centos-7-2003-x64-qcow2', 'name': 'CentOS 7.8', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/centos.svg'}, + {'param': 'centos8-stream-0210-x64', 'name': 'CentOS 8.4', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/centos.svg'}, + {'param': 'centos9-stream-0330-x64', 'name': 'CentOS 9', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/centos.svg'}, + {'param': 'fedora-33-x64-qcow2', 'name': 'Fedora 33', 'optgroup': 'Fedora', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/fedora.svg'}, + {'param': 'fedora-34-x64-qcow2', 'name': 'Fedora 34', 'optgroup': 'Fedora', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/fedora.svg'}, + {'param': 'fedora-35-x64-qcow2', 'name': 'Fedora 35', 'optgroup': 'Fedora', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/fedora.svg'}, + {'param': 'debian-9.7-x64-qcow2', 'name': 'Debian 9.7', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/debian.svg'}, + {'param': 'debian-10.1-x64-qcow2', 'name': 'Debian 10.1', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/debian.svg'}, + {'param': 'debian-10.3-x64-qcow2', 'name': 'Debian 10.3', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/debian.svg'}, + {'param': 'debian-11.generic-x64-qcow2', 'name': 'Debian 11', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore', + 'image': '/inc/images/provisioning/oss/debian.svg'}, + {'param': 'windows-server-2019', 'name': 'Windows 2019', 'optgroup': 'Windows', 'section': 'image', + 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/windows.svg'}, + {'param': 'windows-server-2022', 'name': 'Windows 2022', 'optgroup': 'Windows', 'section': 'image', + 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/windows.svg'}, + {'param': 'sles15-SP2', 'name': 'SLES 15-SP2', 'optgroup': 'SUSE', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/suse.svg'}, + {'param': 's-1vcpu-1gb', 'name': 's-1vcpu-1gb', 'optgroup': 'Base', 'section': 'size', 'provider': 'do'}, + {'param': 's-2vcpu-2gb', 'name': 's-2vcpu-2gb', 'optgroup': 'Base', 'section': 'size', 'provider': 'do'}, + {'param': 's-2vcpu-4gb', 'name': 's-2vcpu-4gb', 'optgroup': 'Base', 'section': 'size', 'provider': 'do'}, + {'param': 's-4vcpu-8gb', 'name': 's-4vcpu-8gb', 'optgroup': 'Base', 'section': 'size', 'provider': 'do'}, + {'param': 's-8vcpu-16gb', 'name': 's-8vcpu-16gb', 'optgroup': 'Base', 'section': 'size', 'provider': 'do'}, + {'param': 's-1vcpu-1gb-intel', 'name': 's-1vcpu-1gb-intel', 'optgroup': 'Premium Intel', 'section': 'size', 'provider': 'do'}, + {'param': 's-2vcpu-2gb-intel', 'name': 's-2vcpu-2gb-intel', 'optgroup': 'Premium Intel', 'section': 'size', 'provider': 'do'}, + {'param': 's-2vcpu-4gb-intel', 'name': 's-2vcpu-4gb-intel', 'optgroup': 'Premium Intel', 'section': 'size', 'provider': 'do'}, + {'param': 's-4vcpu-8gb-intel', 'name': 's-4vcpu-8gb-intel', 'optgroup': 'Premium Intel', 'section': 'size', 'provider': 'do'}, + {'param': 's-8vcpu-16gb-intel', 'name': 's-8vcpu-16gb-intel', 'optgroup': 'Premium Intel', 'section': 'size', 'provider': 'do'}, + {'param': 's-1vcpu-1gb-amd', 'name': 's-1vcpu-1gb-amd', 'optgroup': 'Premium AMD', 'section': 'size', + 'provider': 'do'}, + {'param': 's-2vcpu-2gb-amd', 'name': 's-2vcpu-2gb-amd', 'optgroup': 'Premium AMD', 'section': 'size', + 'provider': 'do'}, + {'param': 's-2vcpu-4gb-amd', 'name': 's-2vcpu-4gb-amd', 'optgroup': 'Premium AMD', 'section': 'size', + 'provider': 'do'}, + {'param': 's-4vcpu-8gb-amd', 'name': 's-4vcpu-8gb-amd', 'optgroup': 'Premium AMD', 'section': 'size', + 'provider': 'do'}, + {'param': 's-8vcpu-16gb-amd', 'name': 's-8vcpu-16gb-amd', 'optgroup': 'Premium AMD', 'section': 'size', 'provider': 'do'}, + {'param': 'g-2vcpu-8gb', 'name': 'g-2vcpu-8gb', 'optgroup': 'General Purpose', 'section': 'size', 'provider': 'do'}, + {'param': 'g-4vcpu-16gb', 'name': 'g-4vcpu-16gb', 'optgroup': 'General Purpose', 'section': 'size', 'provider': 'do'}, + {'param': 'g-8vcpu-32gb', 'name': 'g-8vcpu-32gb', 'optgroup': 'General Purpose', 'section': 'size', 'provider': 'do'}, + {'param': 'g-32vcpu-128gb', 'name': 'g-32vcpu-128gb', 'optgroup': 'General Purpose', 'section': 'size', 'provider': 'do'}, + {'param': 'g-40vcpu-160gb', 'name': 'g-40vcpu-160gb', 'optgroup': 'General Purpose', 'section': 'size', 'provider': 'do'}, + {'param': 'c-4-8gib', 'name': 'c-4-8gib', 'optgroup': 'CPU-Optimized', 'section': 'size', 'provider': 'do'}, + {'param': 'c-8-16gib', 'name': 'c-8-16gib', 'optgroup': 'CPU-Optimized', 'section': 'size', 'provider': 'do'}, + {'param': 'c-16-32gib', 'name': 'c-16-32gib', 'optgroup': 'CPU-Optimized', 'section': 'size', 'provider': 'do'}, + {'param': 'c-32-64gib', 'name': 'c-32-64gib', 'optgroup': 'CPU-Optimized', 'section': 'size', 'provider': 'do'}, + {'param': 'm-2vcpu-16gb', 'name': 'm-2vcpu-16gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'}, + {'param': 'm-4vcpu-32gb', 'name': 'm-4vcpu-32gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'}, + {'param': 'm-8vcpu-64gb', 'name': 'm-8vcpu-64gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'}, + {'param': 'm-16vcpu-128gb', 'name': 'm-16vcpu-128gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'}, + {'param': 'm-24vcpu-192gb', 'name': 'm-24vcpu-192gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'}, + {'param': 'm-32vcpu-256gb', 'name': 'm-32vcpu-256gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'}, + {'param': 'm-32vcpu-256gb', 'name': 'm-32vcpu-256gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'}, + {'param': 'g1-standard-1-2', 'name': 'g1-standard-1-2', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-standard-2-4', 'name': 'g1-standard-2-4', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-standard-2-8', 'name': 'g1-standard-2-8', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-standard-4-8', 'name': 'g1-standard-4-8', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-standard-4-16', 'name': 'g1-standard-4-16', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-standard-8-16', 'name': 'g1-standard-8-16', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-standard-8-32', 'name': 'g1-standard-8-32', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-standard-16-32', 'name': 'g1-standard-16-32', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-standard-16-64', 'name': 'g1-standard-16-64', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-standard-32-64', 'name': 'g1-standard-32-64', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-standard-32-128', 'name': 'g1-standard-32-128', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-cpu-2-2', 'name': 'g1-cpu-2-2', 'optgroup': 'vCPU', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-cpu-4-4', 'name': 'g1-cpu-4-4', 'optgroup': 'vCPU', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-cpu-8-8', 'name': 'g1-cpu-8-8', 'optgroup': 'vCPU', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-cpu-16-16', 'name': 'g1-cpu-16-16', 'optgroup': 'vCPU', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-cpu-32-32', 'name': 'g1-cpu-32-32', 'optgroup': 'vCPU', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-memory-4-32', 'name': 'g1-memory-4-32', 'optgroup': 'Memory', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-memory-8-64', 'name': 'g1-memory-8-64', 'optgroup': 'Memory', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-memory-16-128', 'name': 'g1-memory-16-128', 'optgroup': 'Memory', 'section': 'size', 'provider': 'gcore'}, + {'param': 'g1-memory-32-256', 'name': 'g1-memory-32-256', 'optgroup': 'Memory', 'section': 'size', 'provider': 'gcore'}, + {'param': 'gp2', 'name': 'gp2', 'optgroup': 'General Purpose SSD', 'section': 'volume_type', 'provider': 'aws'}, + {'param': 'gp3', 'name': 'gp3', 'optgroup': 'General Purpose SSD', 'section': 'volume_type', 'provider': 'aws'}, + {'param': 'standard', 'name': 'standard', 'optgroup': 'Magnetic', 'section': 'volume_type', 'provider': 'aws'}, + {'param': 'io1', 'name': 'io1', 'optgroup': 'Provisioned IOPS SSD', 'section': 'volume_type', 'provider': 'aws'}, + {'param': 'io2', 'name': 'io2', 'optgroup': 'Provisioned IOPS SSD', 'section': 'volume_type', 'provider': 'aws'}, + {'param': 'sc1', 'name': 'sc1', 'optgroup': 'Cold HDD', 'section': 'volume_type', 'provider': 'aws'}, + {'param': 'st1', 'name': 'st1', 'optgroup': 'Throughput Optimized HDD', 'section': 'volume_type', 'provider': 'aws'}, + {'param': 'standard', 'name': 'standard', 'optgroup': 'Standard network SSD', 'section': 'volume_type', 'provider': 'gcore'}, + {'param': 'ssd_hiiops', 'name': 'ssd_hiiops', 'optgroup': 'High IOPS SSD', 'section': 'volume_type', 'provider': 'gcore'}, + {'param': 'cold', 'name': 'cold', 'optgroup': 'HDD disk', 'section': 'volume_type', 'provider': 'gcore'}, + ] + + try: + ProvisionParam.insert_many(data_source).on_conflict_ignore().execute() + except Exception as e: + print(str(e)) + data_source = [ {'code': 'RW', 'name': 'Rwanda'}, {'code': 'SO', 'name': 'Somalia'}, @@ -744,7 +935,7 @@ def update_db_v_6_1_0(**kwargs): def update_ver(): - query = Version.update(version='6.1.1.0') + query = Version.update(version='6.1.2.0') try: query.execute() except Exception: diff --git a/app/db_model.py b/app/db_model.py index a640f614..ffc11c96 100644 --- a/app/db_model.py +++ b/app/db_model.py @@ -337,6 +337,20 @@ class ProvidersCreds(BaseModel): table_name = 'providers_creds' +class ProvisionParam(BaseModel): + id = AutoField() + param = CharField() + name = CharField() + optgroup = CharField() + section = CharField() + provider = CharField() + image = CharField(null=True) + + class Meta: + table_name = 'provision_param' + constraints = [SQL('UNIQUE (param, section, provider)')] + + class ProvisionedServers(BaseModel): id = AutoField() region = CharField() @@ -542,4 +556,4 @@ def create_tables(): Setting, Cred, Backup, Metrics, WafMetrics, Version, Option, SavedServer, Waf, ActionHistory, PortScannerSettings, PortScannerPorts, PortScannerHistory, ProvidersCreds, ServiceSetting, ProvisionedServers, MetricsHttpStatus, SMON, WafRules, Alerts, GeoipCodes, NginxMetrics, - SystemInfo, Services, UserName, GitSetting, CheckerSetting, ApacheMetrics]) + SystemInfo, Services, UserName, GitSetting, CheckerSetting, ApacheMetrics, ProvisionParam]) diff --git a/app/funct.py b/app/funct.py index b65bc40d..001bbbb9 100644 --- a/app/funct.py +++ b/app/funct.py @@ -30,6 +30,10 @@ def is_ip_or_dns(server_from_request: str) -> str: return '' +form = cgi.FieldStorage() +serv = is_ip_or_dns(form.getvalue('serv')) + + def checkAjaxInput(ajax_input: str) -> str: pattern = re.compile('[&;|$`]') if pattern.search(ajax_input): @@ -40,10 +44,6 @@ def checkAjaxInput(ajax_input: str) -> str: return quote(ajax_input) -form = cgi.FieldStorage() -serv = is_ip_or_dns(form.getvalue('serv')) - - def get_config_var(sec, var): from configparser import ConfigParser, ExtendedInterpolation try: @@ -1042,12 +1042,16 @@ def upload_and_restart(server_ip, cfg, **kwargs): logging(server_ip, 'A new config file has been uploaded', login=login, keep_history=1, service=service) except Exception as e: logging('localhost', str(e), haproxywi=1) - # If master then save version of config in a new way + # If master then save version of config in a new way if not kwargs.get('slave'): + from pathlib import Path + diff = '' old_cfg = kwargs.get('oldcfg') - if old_cfg is None: + path = Path(old_cfg) + + if not path.is_file(): old_cfg = tmp_file + '.old' try: get_config(server_ip, old_cfg, service=service, config_file_name=config_path) diff --git a/app/hapservers.py b/app/hapservers.py index 34c2b566..730a05dc 100644 --- a/app/hapservers.py +++ b/app/hapservers.py @@ -19,6 +19,7 @@ form = funct.form serv = funct.is_ip_or_dns(form.getvalue('serv')) service = form.getvalue('service') autorefresh = 0 +servers_waf = () title = "HAProxy servers overview" cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l" keep_alive, stderr = funct.subprocess_execute(cmd) @@ -67,6 +68,7 @@ else: servers = sql.select_servers(server=serv) autorefresh = 1 server_id = sql.select_server_id_by_ip(serv) + servers_waf = sql.select_waf_servers_metrics(user_id.value) service_settings = sql.select_docker_service_settings(server_id, service) else: servers = sql.get_dick_permit(virt=1, haproxy=1) @@ -204,6 +206,7 @@ except Exception as e: template = template.render( h2=1, autorefresh=autorefresh, title=title, role=role, user=user, servers=servers_with_status1, keep_alive=''.join(keep_alive), serv=serv, service=service, services=services, user_services=user_services, - service_settings=service_settings, user_status=user_status, user_plan=user_plan, token=token + service_settings=service_settings, user_status=user_status, user_plan=user_plan, servers_waf=servers_waf, + token=token ) print(template) diff --git a/app/provisioning.py b/app/provisioning.py index eeecee1a..07cdb780 100644 --- a/app/provisioning.py +++ b/app/provisioning.py @@ -25,12 +25,13 @@ try: else: is_terraform = True + params = sql.select_provisioning_params() except Exception as e: print(str(e)) rendered_template = template.render( title="Servers provisioning", role=role, user=user, groups=groups, user_group=user_group, servers=sql.select_provisioned_servers(), providers=sql.select_providers(user_group), - is_terraform=is_terraform, user_services=user_services, token=token + is_terraform=is_terraform, user_services=user_services, token=token, params=params ) print(rendered_template) diff --git a/app/sql.py b/app/sql.py index 31203120..a77fa430 100755 --- a/app/sql.py +++ b/app/sql.py @@ -1,5 +1,8 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- +import traceback +import sys + import funct from db_model import * @@ -8,6 +11,11 @@ mysql_enable = funct.get_config_var('mysql', 'enable') def out_error(error): error = str(error) + exc_type, exc_obj, exc_tb = sys.exc_info() + file_name = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] + stk = traceback.extract_tb(exc_tb, 1) + function_name = stk[0][2] + error = error + ' in function: ' + function_name + ' in file: ' + file_name print('error: ' + error) if 'database is locked' not in error: try: @@ -351,7 +359,6 @@ def select_users(**kwargs): ( User.last_login_date >= funct.get_data('regular', timedelta_minutes_minus=15) ), 0)], 1).alias('last_login')).order_by(User.user_id) - try: query_res = query.execute() except Exception as e: @@ -463,6 +470,7 @@ def get_hostname_by_server_ip(server_ip): hostname = Server.get(Server.ip == server_ip) except Exception as e: return out_error(e) + # pass else: return hostname.hostname @@ -1297,120 +1305,6 @@ def select_waf_servers_metrics(uuid): return query_res -def select_waf_metrics(serv, **kwargs): - cursor = conn.cursor() - - if mysql_enable == '1': - if kwargs.get('time_range') == '60': - date_from = "and date > now() - INTERVAL 60 minute group by `date` div 100" - elif kwargs.get('time_range') == '180': - date_from = "and date > now() - INTERVAL 180 minute group by `date` div 200" - elif kwargs.get('time_range') == '360': - date_from = "and date > now() - INTERVAL 360 minute group by `date` div 300" - elif kwargs.get('time_range') == '720': - date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500" - else: - date_from = "and date > now() - INTERVAL 30 minute" - sql = """ select * from waf_metrics where serv = '{serv}' {date_from} order by `date` desc limit 60 """.format( - serv=serv, date_from=date_from) - else: - if kwargs.get('time_range') == '60': - date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0" - elif kwargs.get('time_range') == '180': - date_from = "and date > datetime('now', '-180 minutes', 'localtime') and rowid % 5 = 0" - elif kwargs.get('time_range') == '360': - date_from = "and date > datetime('now', '-360 minutes', 'localtime') and rowid % 7 = 0" - elif kwargs.get('time_range') == '720': - date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0" - else: - date_from = "and date > datetime('now', '-30 minutes', 'localtime')" - sql = """ select * from (select * from waf_metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format( - serv=serv, date_from=date_from) - - try: - cursor.execute(sql) - except Exception as e: - out_error(e) - else: - return cursor.fetchall() - - -def select_nginx_metrics(serv, **kwargs): - cursor = conn.cursor() - - if mysql_enable == '1': - if kwargs.get('time_range') == '60': - date_from = "and date > now() - INTERVAL 60 minute group by `date` div 100" - elif kwargs.get('time_range') == '180': - date_from = "and date > now() - INTERVAL 180 minute group by `date` div 200" - elif kwargs.get('time_range') == '360': - date_from = "and date > now() - INTERVAL 360 minute group by `date` div 300" - elif kwargs.get('time_range') == '720': - date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500" - else: - date_from = "and date > now() - INTERVAL 30 minute" - sql = """ select * from nginx_metrics where serv = '{serv}' {date_from} order by `date` desc limit 60 """.format( - serv=serv, date_from=date_from) - else: - if kwargs.get('time_range') == '60': - date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0" - elif kwargs.get('time_range') == '180': - date_from = "and date > datetime('now', '-180 minutes', 'localtime') and rowid % 5 = 0" - elif kwargs.get('time_range') == '360': - date_from = "and date > datetime('now', '-360 minutes', 'localtime') and rowid % 7 = 0" - elif kwargs.get('time_range') == '720': - date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0" - else: - date_from = "and date > datetime('now', '-30 minutes', 'localtime')" - sql = """ select * from (select * from nginx_metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format( - serv=serv, date_from=date_from) - - try: - cursor.execute(sql) - except Exception as e: - out_error(e) - else: - return cursor.fetchall() - - -def select_apache_metrics(serv, **kwargs): - cursor = conn.cursor() - - if mysql_enable == '1': - if kwargs.get('time_range') == '60': - date_from = "and date > now() - INTERVAL 60 minute group by `date` div 100" - elif kwargs.get('time_range') == '180': - date_from = "and date > now() - INTERVAL 180 minute group by `date` div 200" - elif kwargs.get('time_range') == '360': - date_from = "and date > now() - INTERVAL 360 minute group by `date` div 300" - elif kwargs.get('time_range') == '720': - date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500" - else: - date_from = "and date > now() - INTERVAL 30 minute" - sql = """ select * from apache_metrics where serv = '{serv}' {date_from} order by `date` desc limit 60 """.format( - serv=serv, date_from=date_from) - else: - if kwargs.get('time_range') == '60': - date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0" - elif kwargs.get('time_range') == '180': - date_from = "and date > datetime('now', '-180 minutes', 'localtime') and rowid % 5 = 0" - elif kwargs.get('time_range') == '360': - date_from = "and date > datetime('now', '-360 minutes', 'localtime') and rowid % 7 = 0" - elif kwargs.get('time_range') == '720': - date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0" - else: - date_from = "and date > datetime('now', '-30 minutes', 'localtime')" - sql = """ select * from (select * from apache_metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format( - serv=serv, date_from=date_from) - - try: - cursor.execute(sql) - except Exception as e: - out_error(e) - else: - return cursor.fetchall() - - def insert_waf_metrics_enable(serv, enable): try: server_id = Server.get(Server.ip == serv).server_id @@ -1598,9 +1492,16 @@ def delete_apache_metrics(): out_error(e) -def select_metrics(serv, **kwargs): +def select_metrics(serv, service, **kwargs): cursor = conn.cursor() + if service in ('nginx', 'apache', 'waf'): + metrics_table = '{}_metrics'.format(service) + elif service == 'http_metrics': + metrics_table = 'metrics_http_status' + else: + metrics_table = 'metrics' + if mysql_enable == '1': if kwargs.get('time_range') == '60': date_from = "and date > now() - INTERVAL 60 minute group by `date` div 100" @@ -1612,8 +1513,8 @@ def select_metrics(serv, **kwargs): date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500" else: date_from = "and date > now() - INTERVAL 30 minute" - sql = """ select * from metrics where serv = '{serv}' {date_from} order by `date` asc """.format( - serv=serv, date_from=date_from + sql = """ select * from {metrics_table} where serv = '{serv}' {date_from} order by `date` asc """.format( + metrics_table=metrics_table, serv=serv, date_from=date_from ) else: if kwargs.get('time_range') == '60': @@ -1627,47 +1528,8 @@ def select_metrics(serv, **kwargs): else: date_from = "and date > datetime('now', '-30 minutes', 'localtime')" - sql = """ select * from (select * from metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format( - serv=serv, date_from=date_from) - - try: - cursor.execute(sql) - except Exception as e: - out_error(e) - else: - return cursor.fetchall() - - -def select_metrics_http(serv, **kwargs): - cursor = conn.cursor() - - if mysql_enable == '1': - if kwargs.get('time_range') == '60': - date_from = "and date > now() - INTERVAL 60 minute group by `date` div 100" - elif kwargs.get('time_range') == '180': - date_from = "and date > now() - INTERVAL 180 minute group by `date` div 200" - elif kwargs.get('time_range') == '360': - date_from = "and date > now() - INTERVAL 360 minute group by `date` div 300" - elif kwargs.get('time_range') == '720': - date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500" - else: - date_from = "and date > now() - INTERVAL 30 minute" - sql = """ select * from metrics_http_status where serv = '{serv}' {date_from} order by `date` desc """.format( - serv=serv, date_from=date_from) - else: - if kwargs.get('time_range') == '60': - date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0" - elif kwargs.get('time_range') == '180': - date_from = "and date > datetime('now', '-180 minutes', 'localtime') and rowid % 5 = 0" - elif kwargs.get('time_range') == '360': - date_from = "and date > datetime('now', '-360 minutes', 'localtime') and rowid % 7 = 0" - elif kwargs.get('time_range') == '720': - date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0" - else: - date_from = "and date > datetime('now', '-30 minutes', 'localtime')" - - sql = """ select * from (select * from metrics_http_status where serv = '{serv}' {date_from} order by `date`) order by `date` """.format( - serv=serv, date_from=date_from) + sql = """ select * from (select * from {metrics_table} where serv = '{serv}' {date_from} order by `date`) order by `date` """.format( + metrics_table=metrics_table, serv=serv, date_from=date_from) try: cursor.execute(sql) @@ -2652,7 +2514,7 @@ def insert_port_scanner_port(serv, user_group_id, port, service_name): def select_ports(serv): cursor = conn.cursor() - sql = """select port from port_scanner_ports where serv = '%s' """ % serv + sql = """select port from port_scanner_ports where serv = '%s' """ % serv try: cursor.execute(sql) @@ -2772,24 +2634,22 @@ def add_provider_gcore(provider_name, provider_group, provider_user, provider_pa def select_providers(user_group, **kwargs): - cursor = conn.cursor() if user_group == 1: - user_group = '' - if kwargs.get('key'): - user_group += " where key = '%s' " % kwargs.get('key') + query = ProvidersCreds.select() else: - user_group = "where `group` = '%s'" % user_group if kwargs.get('key'): - user_group += " and key = '%s' " % kwargs.get('key') - - sql = """ select * from providers_creds %s""" % user_group - + query = ProvidersCreds.select().where( + (ProvidersCreds.key == kwargs.get('key')) + & (ProvidersCreds.group == user_group) + ) + else: + query = ProvidersCreds.select().where(ProvidersCreds.group == user_group) try: - cursor.execute(sql) + query_res = query.execute() except Exception as e: out_error(e) else: - return cursor.fetchall() + return query_res def delete_provider(provider_id): @@ -3542,6 +3402,7 @@ def select_checker_settings_for_server(service_id: int, server_id: int): def insert_new_checker_setting_for_server(server_ip: str) -> None: + server_id = () try: server_id = Server.get(Server.ip == server_ip).server_id except Exception as e: @@ -3597,3 +3458,15 @@ def update_service_checker_settings( return False else: return True + + +def select_provisioning_params(): + query = ProvisionParam.select() + + try: + query_res = query.execute() + except Exception as e: + out_error(e) + return + else: + return query_res diff --git a/app/templates/ajax/check_version.html b/app/templates/ajax/check_version.html index c786204d..f9e61871 100644 --- a/app/templates/ajax/check_version.html +++ b/app/templates/ajax/check_version.html @@ -1,18 +1,18 @@ -{% if versions is defined %} - {% set current_ver = versions.0 %} - {% set new_ver = versions.1 %} - {% set current_ver_without_dots = versions.2 %} - {% set new_ver_without_dots = versions.3 %} -{% endif %} -{% if new_ver_without_dots is defined and current_ver_without_dots is defined and new_ver is defined and new_ver_without_dots is defined %} +{%- if versions is defined -%} + {%- set current_ver = versions.0 -%} + {%- set new_ver = versions.1 %} + {%- set current_ver_without_dots = versions.2 %} + {%- set new_ver_without_dots = versions.3 %} +{%- endif -%} +{%- if new_ver_without_dots is defined and current_ver_without_dots is defined and new_ver is defined and new_ver_without_dots is defined -%} - {% if new_ver_without_dots > current_ver_without_dots and new_ver != "Sorry cannot get current version" %} - v{{current_ver}} + {%- if new_ver_without_dots > current_ver_without_dots and new_ver != "Sorry cannot get current version" %} + v{{current_ver}} - {% else %} + {%- else %} v{{current_ver}} - {% endif %} + {%- endif %} -{% else %} +{%- else %} v{{current_ver}} -{% endif %} \ No newline at end of file +{% endif -%} diff --git a/app/templates/ajax/provisioning/aws_edit_dialog.html b/app/templates/ajax/provisioning/aws_edit_dialog.html index 735cef03..4ac5c4ab 100644 --- a/app/templates/ajax/provisioning/aws_edit_dialog.html +++ b/app/templates/ajax/provisioning/aws_edit_dialog.html @@ -1,7 +1,6 @@ {% from 'include/input_macros.html' import input, select, checkbox %} -{% from 'include/provisioning/variables.html' import aws_regions, aws_oss, aws_volume_type %} +{% from 'include/provisioning/variables.html' import generate_opt_options, get_nice_name %} {% for s in server %} -{% set region_name = [] %} -{% endfor %} \ No newline at end of file +{% endfor %} diff --git a/app/templates/ajax/provisioning/do_edit_dialog.html b/app/templates/ajax/provisioning/do_edit_dialog.html index 7f09648e..3f386f14 100644 --- a/app/templates/ajax/provisioning/do_edit_dialog.html +++ b/app/templates/ajax/provisioning/do_edit_dialog.html @@ -1,5 +1,5 @@ {% from 'include/input_macros.html' import input, select, checkbox %} -{% from 'include/provisioning/variables.html' import do_regions, do_oss %} +{% from 'include/provisioning/variables.html' import get_nice_name, generate_opt_options %} {% for s in server %} {% set region_name = [] %} -{% endfor %} \ No newline at end of file +{% endfor %} diff --git a/app/templates/ajax/provisioning/gcore_edit_dialog.html b/app/templates/ajax/provisioning/gcore_edit_dialog.html index 97d36742..9f5283da 100644 --- a/app/templates/ajax/provisioning/gcore_edit_dialog.html +++ b/app/templates/ajax/provisioning/gcore_edit_dialog.html @@ -1,7 +1,8 @@ {% from 'include/input_macros.html' import input, select, checkbox %} -{% from 'include/provisioning/variables.html' import gcore_regions, gcore_volume_type %} +{% from 'include/provisioning/variables.html' import generate_opt_options, get_nice_name %} {% for s in server %} {% set region_name = [] %} +{% set os_nice_name = [] %} \ No newline at end of file + diff --git a/app/templates/include/provisioning/providers_dialogs.html b/app/templates/include/provisioning/providers_dialogs.html index e6338290..ca18dd0a 100644 --- a/app/templates/include/provisioning/providers_dialogs.html +++ b/app/templates/include/provisioning/providers_dialogs.html @@ -1,10 +1,9 @@ -{% set providers_for_choose = dict() %} -{% set providers_for_choose = {'aws':'AWS','do':'DigitalOcean', 'gcore':'G-Core Labs'} %} +{% from 'include/provisioning/variables.html' import generate_opt_options %} \ No newline at end of file + diff --git a/app/templates/include/provisioning/variables.html b/app/templates/include/provisioning/variables.html index 92b1fc04..1eb13e06 100644 --- a/app/templates/include/provisioning/variables.html +++ b/app/templates/include/provisioning/variables.html @@ -1,21 +1,98 @@ -{% set gcore_regions = {'6':'Luxembourg','10':'Moscow','14':'Manassas', '18':'Singapore','22':'Khabarovsk'} %} -{% set aws_regions = {'us-east-1':'US East (N. Virginia)','us-east-2':'US East (Ohio)','us-west-1':'US West (N. California)', - 'us-west-2':'US West (Oregon)','af-south-1':'Africa (Cape Town)','ap-east-1':'Asia Pacific (Hong Kong)', - 'ap-south-1':'Asia Pacific (Mumbai)','ap-northeast-2':'Asia Pacific (Seoul)','ap-southeast-1':'Asia Pacific (Singapore)', - 'ap-southeast-2':'Asia Pacific (Sydney)','ap-northeast-1':'Asia Pacific (Tokyo)','ca-central-1':'Canada (Central)', - 'eu-central-1':'Europe (Frankfurt)', 'eu-west-1':'Europe (Ireland)', 'eu-west-2':'Europe (London)', - 'eu-south-1':'Europe (Milan)', 'eu-west-3':'Europe (Paris)', 'eu-north-1':'Europe (Stockholm)', - 'me-south-1':'Middle East (Bahrain)', 'sa-east-1':'South America (São Paulo)'} %} -{% set do_regions = {'nyc1':'New York 1','nyc2':'New York 2','nyc3':'New York 3', 'ams1':'Amsterdam 1','ams2':'Amsterdam 2', - 'ams3':'Amsterdam 3', 'sfo1':'San Francisco 1','sfo2':'San Francisco 2','sfo3':'San Francisco 3', - 'sgp1':'Singapore 1','lon1':'London 1','fra1':'Frankfurt 1','tor1':'Toronto 1', 'blr1':'Bangalore 1'} %} +{% from 'include/input_macros.html' import copy_to_clipboard %} -{% set aws_oss = {'centos-7':'Centos 7 x64','ubuntu-18.04':'Ubuntu 18.04 x64','ubuntu-18.10':'Ubuntu 18.10 x64', - 'debian-10':'Debian 10 x86','debian-9':'Debian 9 x86','rhel-7':'RHEL 7 x86','rhel-8':'RHEL 8 x86', - 'amazon-2_lts':'Amazon Linux 2 x86'} %} -{% set do_oss = {'centos-7-x64':'Centos 7 x64', 'centos-8-x64':'Centos 8 x64','ubuntu-18-04-x64':'Ubuntu 18.04 x64', - 'ubuntu-20-04-x64':'Ubuntu 20.04 x64', 'ubuntu-20-10-x64':'Ubuntu 20.10 x64','debian-10-x64':'Debian 10 x86', - 'debian-9-x64':'Debian 9 x86'} %} +{%- macro generate_opt_options(id, provider, param_section, params, name='', required='', first='', class='', selected='', disabled='true', optgroup=true) -%} + {% if name == '' %} + {% set name = id %} + {% endif %} + {% if disabled == 'true' %} + {% set disabled = 'disabled' %} + {% else %} + {% set disabled = '' %} + {% endif %} + {% set section = namespace(section='') %} + + + +{%- endmacro %} + +{%- macro get_nice_name(id, value, provider, section, params) -%} + {% for p in params %} + {% if p.section == section and p.provider == provider and p.param == value %} + + {{ copy_to_clipboard(id=id, value=p.param, show=p.name) }} + {% endif %} + {% endfor %} + +{%- endmacro %} diff --git a/app/templates/nettools.html b/app/templates/nettools.html index 9338d497..ee00303f 100644 --- a/app/templates/nettools.html +++ b/app/templates/nettools.html @@ -140,7 +140,7 @@ data: frm.serialize(), type: frm.attr('method'), success: function( data ) { - data = data.replace(/\n/g, "
"); + data = data.replace('\n', "
"); if (data.indexOf('error: ') != '-1' || data.indexOf('Fatal') != '-1' || data.indexOf('Error(s)') != '-1') { $('#ajax-nettools').html('
'+data+'
'); } else if (data.indexOf('warning: ') != '-1') { @@ -174,7 +174,7 @@ data: frm.serialize(), type: frm.attr('method'), success: function( data ) { - data = data.replace(/\n/g, "
"); + data = data.replace('\n', "
"); if (data.indexOf('error: ') != '-1' || data.indexOf('Fatal') != '-1' || data.indexOf('Error(s)') != '-1') { toastr.clear(); toastr.error(data); @@ -205,7 +205,7 @@ data: frm.serialize() + "&nettools_action=" + $(this).val(), type: frm.attr('method'), success: function( data ) { - data = data.replace(/\n/g, "
"); + data = data.replace('\n', "
"); if (data.indexOf('error: ') != '-1' || data.indexOf('Fatal') != '-1' || data.indexOf('Error(s)') != '-1') { toastr.clear(); toastr.error(data); diff --git a/app/templates/provisioning.html b/app/templates/provisioning.html index 469657c3..43a2b07c 100644 --- a/app/templates/provisioning.html +++ b/app/templates/provisioning.html @@ -19,6 +19,8 @@

You have not installed Terraform. Read here how to install Terraform

+ {% elif servers|length == 0 %} + {% include 'include/getstarted.html' %} {% else %} @@ -71,4 +73,4 @@ {% include 'include/provisioning/creating_dialogs.html' %} {% include 'include/provisioning/providers_dialogs.html' %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/templates/viewstats.html b/app/templates/viewstats.html index cacb6eb6..88d723c3 100644 --- a/app/templates/viewstats.html +++ b/app/templates/viewstats.html @@ -19,8 +19,9 @@ {% endif %} {% endfor %} - + Show + {% if service != 'nginx' and service != 'apache' %}
Filter:
{{ checkbox('stats_active', title='Show active servers', desc='Active', checked='checked') }} @@ -32,13 +33,12 @@ {{ checkbox('stats_frontends', title='Show frontends servers', desc='Frontends', checked='checked') }} {{ checkbox('stats_backends', title='Show backends servers', desc='Backends', checked='checked') }}
+ {% elif service == 'nginx' %} +

+ {% endif %}
-
- Select a server -
-
Roxy-WI @@ -29,7 +34,6 @@ - @@ -46,12 +50,29 @@ + + + + + +