From 3ea311f7bae1f157f86f6ffe00bc202a1491c2dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=89ric=20Gaspar?=
<46165813+ericgaspar@users.noreply.github.com>
Date: Sat, 11 Dec 2021 22:21:42 +0100
Subject: [PATCH] Testing (#19)
* Add config panel
---
README.md | 4 +-
README_fr.md | 4 +-
check_process | 2 +-
config_panel.toml | 25 ++++++++++++
doc/DESCRIPTION.md | 1 +
doc/DESCRIPTION_fr.md | 1 +
manifest.json | 6 +--
scripts/config | 95 +++++++++++++++++++++++++++++++++++++++++++
scripts/install | 4 +-
scripts/restore | 17 +++++++-
scripts/upgrade | 19 ++++++++-
11 files changed, 164 insertions(+), 14 deletions(-)
create mode 100644 config_panel.toml
create mode 100644 doc/DESCRIPTION.md
create mode 100644 doc/DESCRIPTION_fr.md
create mode 100644 scripts/config
diff --git a/README.md b/README.md
index 10bfd4e..dab9a31 100644
--- a/README.md
+++ b/README.md
@@ -15,9 +15,9 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in
## Overview
-Database management in a single PHP file
+Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. Conversely to phpMyAdmin, it consist of a single file ready to deploy to the target server. Adminer is available for MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, Elasticsearch, MongoDB and others via plugin.
-**Shipped version:** 4.8.1~ynh2
+**Shipped version:** 4.8.1~ynh3
**Demo:** https://demo.adminer.org/adminer.php?username=
diff --git a/README_fr.md b/README_fr.md
index 238b9c3..4e687fe 100644
--- a/README_fr.md
+++ b/README_fr.md
@@ -11,9 +11,9 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour
## Vue d'ensemble
-Gestionnaire de base de données en un seul fichier PHP
+Adminer (anciennement phpMinAdmin) est un outil de gestion de base de données complet écrit en PHP. À l'inverse de phpMyAdmin, il se compose d'un seul fichier prêt à être déployé sur le serveur cible. Adminer est disponible pour MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, Elasticsearch, MongoDB et autres via un plugin.
-**Version incluse :** 4.8.1~ynh2
+**Version incluse :** 4.8.1~ynh3
**Démo :** https://demo.adminer.org/adminer.php?username=
diff --git a/check_process b/check_process
index 41d34b5..4698c95 100644
--- a/check_process
+++ b/check_process
@@ -14,7 +14,7 @@
setup_public=1
upgrade=1
#4.8.1
- upgrade=1 from_commit=ca1c1238a8d8f1dc89c092216491d3ec9464382c
+ #upgrade=1 from_commit=ca1c1238a8d8f1dc89c092216491d3ec9464382c
backup_restore=1
multi_instance=1
change_url=1
diff --git a/config_panel.toml b/config_panel.toml
new file mode 100644
index 0000000..8e5ad3a
--- /dev/null
+++ b/config_panel.toml
@@ -0,0 +1,25 @@
+version = "1.0"
+
+[main]
+name = "Adminer configuration"
+
+ [main.php_fpm_config]
+ name = "PHP-FPM configuration"
+
+ [main.php_fpm_config.fpm_footprint]
+ ask = "Memory footprint of the service?"
+ choices = ["low", "medium", "high", "specific"]
+ default = "low"
+ help = "low <= 20Mb per pool. medium between 20Mb and 40Mb per pool. high > 40Mb per pool.
Use specific to set a value with the following option."
+
+ [main.php_fpm_config.free_footprint]
+ ask = "Memory footprint of the service?"
+ type = "number"
+ default = "0"
+ help = "Free field to specify exactly the footprint in Mb if you don't want to use one of the three previous values."
+
+ [main.php_fpm_config.fpm_usage]
+ ask = "Expected usage of the service?"
+ choices = ["low", "medium", "high"]
+ default = "low"
+ help = "low: Personal usage, behind the SSO. No RAM footprint when not used, but the impact on the processor can be high if many users are using the service.
medium: Low usage, few people or/and publicly accessible. Low RAM footprint, medium processor footprint when used.
high: High usage, frequently visited website. High RAM footprint, but lower on processor usage and quickly responding."
diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md
new file mode 100644
index 0000000..8ffaf34
--- /dev/null
+++ b/doc/DESCRIPTION.md
@@ -0,0 +1 @@
+Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. Conversely to phpMyAdmin, it consist of a single file ready to deploy to the target server. Adminer is available for MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, Elasticsearch, MongoDB and others via plugin.
\ No newline at end of file
diff --git a/doc/DESCRIPTION_fr.md b/doc/DESCRIPTION_fr.md
new file mode 100644
index 0000000..1a6b3c5
--- /dev/null
+++ b/doc/DESCRIPTION_fr.md
@@ -0,0 +1 @@
+Adminer (anciennement phpMinAdmin) est un outil de gestion de base de données complet écrit en PHP. À l'inverse de phpMyAdmin, il se compose d'un seul fichier prêt à être déployé sur le serveur cible. Adminer est disponible pour MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, Elasticsearch, MongoDB et autres via un plugin.
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
index b6bba44..3521226 100644
--- a/manifest.json
+++ b/manifest.json
@@ -3,11 +3,11 @@
"id": "adminer",
"packaging_format": 1,
"description": {
- "en": "Database management in a single PHP file",
- "fr": "Gestionnaire de base de données en un seul fichier PHP"
+ "en": "Database management tool",
+ "fr": "Gestionnaire de base de données"
},
- "version": "4.8.1~ynh2",
+ "version": "4.8.1~ynh3",
"url": "https://www.adminer.org/",
"upstream": {
"license": "Apache-2.0",
diff --git a/scripts/config b/scripts/config
new file mode 100644
index 0000000..3440bd2
--- /dev/null
+++ b/scripts/config
@@ -0,0 +1,95 @@
+#!/bin/bash
+
+#=================================================
+# GENERIC STARTING
+#=================================================
+# IMPORT GENERIC HELPERS
+#=================================================
+
+source _common.sh
+source /usr/share/yunohost/helpers
+
+ynh_abort_if_errors
+
+#=================================================
+# RETRIEVE ARGUMENTS
+#=================================================
+
+phpversion=$(ynh_app_setting_get --app=$app --key=phpversion)
+current_fpm_footprint=$(ynh_app_setting_get --app=$app --key=fpm_footprint)
+
+#=================================================
+# SPECIFIC GETTERS FOR TOML SHORT KEY
+#=================================================
+
+get__fpm_footprint() {
+ # Free footprint value for php-fpm
+ # Check if current_fpm_footprint is an integer
+ if [ "$current_fpm_footprint" -eq "$current_fpm_footprint" ] 2> /dev/null
+ then
+ echo "specific"
+ else
+ echo "$current_fpm_footprint"
+ fi
+}
+
+get__free_footprint() {
+ # Free footprint value for php-fpm
+ # Check if current_fpm_footprint is an integer
+ if [ "$current_fpm_footprint" -eq "$current_fpm_footprint" ] 2> /dev/null
+ then
+ # If current_fpm_footprint is an integer, that's a numeric value for the footprint
+ echo "$current_fpm_footprint"
+ else
+ echo "0"
+ fi
+}
+
+#=================================================
+# SPECIFIC SETTERS FOR TOML SHORT KEYS
+#=================================================
+
+set__fpm_footprint() {
+ if [ "$fpm_footprint" != "specific" ]
+ then
+ ynh_app_setting_set --app=$app --key=fpm_footprint --value="$fpm_footprint"
+ fi
+}
+
+set__free_footprint() {
+ if [ "$fpm_footprint" = "specific" ]
+ then
+ ynh_app_setting_set --app=$app --key=fpm_footprint --value="$free_footprint"
+ fi
+}
+
+#=================================================
+# GENERIC FINALIZATION
+#=================================================
+
+ynh_app_config_validate() {
+ _ynh_app_config_validate
+
+ if [ "${changed[fpm_usage]}" == "true" ] || [ "${changed[fpm_footprint]}" == "true" ] || [ "${changed[free_footprint]}" == "true" ]; then
+ # If fpm_footprint is set to 'specific', use $free_footprint value.
+ if [ "$fpm_footprint" = "specific" ]
+ then
+ fpm_footprint=$free_footprint
+ fi
+
+ if [ "$fpm_footprint" == "0" ]
+ then
+ ynh_print_err --message="When selecting 'specific', you have to set a footprint value into the field below."
+
+ exit 0
+ fi
+ fi
+}
+
+ynh_app_config_apply() {
+ _ynh_app_config_apply
+
+ ynh_add_fpm_config --phpversion=$phpversion --usage=$fpm_usage --footprint=$fpm_footprint
+}
+
+ynh_app_config_run $1
diff --git a/scripts/install b/scripts/install
index 2a08637..c627b15 100644
--- a/scripts/install
+++ b/scripts/install
@@ -22,6 +22,7 @@ ynh_abort_if_errors
domain=$YNH_APP_ARG_DOMAIN
path_url=$YNH_APP_ARG_PATH
admin=$YNH_APP_ARG_ADMIN
+phpversion=$YNH_PHP_VERSION
app=$YNH_APP_INSTANCE_NAME
@@ -89,8 +90,7 @@ ynh_add_nginx_config
ynh_script_progression --message="Configuring PHP-FPM..." --weight=1
# Create a dedicated php-fpm config
-ynh_add_fpm_config
-phpversion=$(ynh_app_setting_get --app=$app --key=phpversion)
+ynh_add_fpm_config --usage=low --footprint=low
#=================================================
# SETUP SSOWAT
diff --git a/scripts/restore b/scripts/restore
index 3d44252..da9a51d 100644
--- a/scripts/restore
+++ b/scripts/restore
@@ -28,13 +28,15 @@ path_url=$(ynh_app_setting_get --app=$app --key=path)
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
phpversion=$(ynh_app_setting_get --app=$app --key=phpversion)
+fpm_footprint=$(ynh_app_setting_get --app=$app --key=fpm_footprint)
+fpm_usage=$(ynh_app_setting_get --app=$app --key=fpm_usage)
+
#=================================================
# CHECK IF THE APP CAN BE RESTORED
#=================================================
ynh_script_progression --message="Validating restoration parameters..." --weight=1
-test ! -d $final_path \
- || ynh_die --message="There is already a directory: $final_path "
+test ! -d $final_path || ynh_die --message="There is already a directory: $final_path "
#=================================================
# STANDARD RESTORATION STEPS
@@ -70,6 +72,17 @@ ynh_script_progression --message="Reconfiguring PHP-FPM..." --weight=5
ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf"
+# Recreate a dedicated php-fpm config
+ynh_add_fpm_config --usage=$fpm_usage --footprint=$fpm_footprint --phpversion=$phpversion
+
+#=================================================
+# REINSTALL DEPENDENCIES
+#=================================================
+ynh_script_progression --message="Reinstalling dependencies..." --weight=1
+
+# Define and install dependencies
+ynh_install_app_dependencies $pkg_dependencies
+
#=================================================
# REINSTALL DEPENDENCIES
#=================================================
diff --git a/scripts/upgrade b/scripts/upgrade
index 6e441f6..e4eecb5 100644
--- a/scripts/upgrade
+++ b/scripts/upgrade
@@ -22,6 +22,9 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path)
phpversion=$(ynh_app_setting_get --app=$app --key=phpversion)
admin=$(ynh_app_setting_get --app=$app --key=admin)
+fpm_footprint=$(ynh_app_setting_get --app=$app --key=fpm_footprint)
+fpm_usage=$(ynh_app_setting_get --app=$app --key=fpm_usage)
+
#=================================================
# CHECK VERSION
#=================================================
@@ -52,6 +55,18 @@ if [ -z "$admin" ]; then
ynh_die --message="You are upgrading Adminer from a version where the admin is not defined. Please reinstall Adminer"
fi
+# If fpm_footprint doesn't exist, create it
+if [ -z "$fpm_footprint" ]; then
+ fpm_footprint=low
+ ynh_app_setting_set --app=$app --key=fpm_footprint --value=$fpm_footprint
+fi
+
+# If fpm_usage doesn't exist, create it
+if [ -z "$fpm_usage" ]; then
+ fpm_usage=low
+ ynh_app_setting_set --app=$app --key=fpm_usage --value=$fpm_usage
+fi
+
# Cleaning legacy permissions
if ynh_legacy_permissions_exists; then
ynh_legacy_permissions_delete_all
@@ -106,8 +121,8 @@ ynh_install_app_dependencies $pkg_dependencies
#=================================================
ynh_script_progression --message="Upgrading PHP-FPM configuration..." --weight=1
-# Create a dedicated php-fpm config
-ynh_add_fpm_config
+# Create a dedicated PHP-FPM config
+ynh_add_fpm_config --phpversion=$phpversion --usage=$fpm_usage --footprint=$fpm_footprint
#=================================================
# RELOAD NGINX