1
0
mirror of https://github.com/nicoverbruggen/phpmon.git synced 2025-08-07 03:50:08 +02:00

Load certain info from ini files

This commit is contained in:
2021-02-03 18:01:25 +01:00
parent 3e0a16cc73
commit 9824ed2b83
4 changed files with 104 additions and 41 deletions

View File

@ -2,7 +2,7 @@
1. Merge into `main`
2. Create tag
3. Add changes to changelog
3. Add changes to changelog + update security document
4. Archive
5. Notarize and prepare for own distribution
6. After notarization, export .app

View File

@ -9,8 +9,9 @@ import Foundation
class PhpInstall {
var version: Version!
var extensions: [PhpExtension]!
var version: Version
var configuration: Configuration
var extensions: [PhpExtension]
// MARK: - Computed
@ -21,29 +22,55 @@ class PhpInstall {
// MARK: - Initializer
init() {
let version = Command.execute(path: Paths.php, arguments: ["-r", "print phpversion();"])
// Show information about the current version
self.version = type(of: self).getVersion()
self.version = Version()
if (version == "" || version.contains("Warning")) {
self.version.short = "💩 BROKEN"
self.version.long = "";
self.version.error = true
return;
// If an error occurred, exit early
if (self.version.error) {
self.configuration = Configuration()
self.extensions = []
return
}
// That's the long version
self.version.long = version
// Next up, let's strip away the minor version number
let segments = self.version.long.components(separatedBy: ".")
// Get the first two elements
self.version.short = segments[0...1].joined(separator: ".")
// Load extension information
let path = URL(fileURLWithPath: "\(Paths.etcPath)/php/\(self.version.short)/php.ini")
self.extensions = PhpExtension.load(from: path)
// Get configuration values
self.configuration = Configuration(
memory_limit: type(of: self).getIniValue(key: "memory_limit"),
upload_max_filesize: type(of: self).getIniValue(key: "upload_max_filesize"),
post_max_size: type(of: self).getIniValue(key: "post_max_size")
)
print(self.configuration)
}
private static func getVersion() -> Version {
var versionStruct = Version()
let version = Command.execute(path: Paths.php, arguments: ["-r", "print phpversion();"])
if (version == "" || version.contains("Warning")) {
versionStruct.short = "💩 BROKEN"
versionStruct.long = "";
versionStruct.error = true
return versionStruct;
}
// That's the long version
versionStruct.long = version
// Next up, let's strip away the minor version number
let segments = versionStruct.long.components(separatedBy: ".")
// Get the first two elements
versionStruct.short = segments[0...1].joined(separator: ".")
return versionStruct
}
private static func getIniValue(key: String) -> String {
return Command.execute(path: Paths.php, arguments: ["-r", "echo ini_get('\(key)');"])
}
// MARK: - Structs
@ -53,4 +80,10 @@ class PhpInstall {
var long = "???"
var error = false
}
struct Configuration {
var memory_limit = "???"
var upload_max_filesize = "???"
var post_max_size = "???"
}
}

View File

@ -8,8 +8,7 @@
import Cocoa
class StatusMenu : NSMenu {
public func addPhpVersionMenuItems()
{
public func addPhpVersionMenuItems() {
if (App.shared.currentInstall == nil) {
return
}
@ -27,8 +26,7 @@ class StatusMenu : NSMenu {
}
}
public func addPhpActionMenuItems()
{
public func addPhpActionMenuItems() {
if App.busy {
self.addItem(NSMenuItem(title: "mi_busy".localized, action: nil, keyEquivalent: ""))
return
@ -37,6 +35,17 @@ class StatusMenu : NSMenu {
return
}
// Switch to PHP X.X
self.addSwitchToPhpMenuItems()
// Separator
self.addItem(NSMenuItem.separator())
// Services
self.addServicesMenuItems()
}
private func addSwitchToPhpMenuItems() {
var shortcutKey = 1
for index in (0..<App.shared.availablePhpVersions.count).reversed() {
let version = App.shared.availablePhpVersions[index]
@ -50,40 +59,59 @@ class StatusMenu : NSMenu {
shortcutKey = shortcutKey + 1
self.addItem(menuItem)
}
self.addItem(NSMenuItem.separator())
self.addItem(NSMenuItem(title: "mi_active_services".localized, action: nil, keyEquivalent: ""))
self.addItem(NSMenuItem(title: "mi_restart_dnsmasq".localized, action: #selector(MainMenu.restartDnsMasq), keyEquivalent: "d"))
self.addItem(NSMenuItem(title: "mi_restart_php_fpm".localized, action: #selector(MainMenu.restartPhpFpm), keyEquivalent: "p"))
self.addItem(NSMenuItem(title: "mi_restart_nginx".localized, action: #selector(MainMenu.restartNginx), keyEquivalent: "n"))
self.addItem(NSMenuItem(title: "mi_restart_all_services".localized, action: #selector(MainMenu.restartAllServices), keyEquivalent: "s"))
self.addItem(NSMenuItem.separator())
self.addItem(NSMenuItem(title: "mi_diagnostics".localized, action: nil, keyEquivalent: ""))
self.addItem(NSMenuItem(title: "mi_force_load_latest".localized, action: #selector(MainMenu.forceRestartLatestPhp), keyEquivalent: "f"))
}
public func addPhpConfigurationMenuItems()
{
private func addServicesMenuItems() {
self.addItem(NSMenuItem(title: "mi_active_services".localized, action: nil, keyEquivalent: ""))
let services = NSMenuItem(title: "mi_restart_specific".localized, action: nil, keyEquivalent: "")
let servicesMenu = NSMenu()
servicesMenu.addItem(NSMenuItem(title: "mi_restart_dnsmasq".localized, action: #selector(MainMenu.restartDnsMasq), keyEquivalent: "d"))
servicesMenu.addItem(NSMenuItem(title: "mi_restart_php_fpm".localized, action: #selector(MainMenu.restartPhpFpm), keyEquivalent: "p"))
servicesMenu.addItem(NSMenuItem(title: "mi_restart_nginx".localized, action: #selector(MainMenu.restartNginx), keyEquivalent: "n"))
for item in servicesMenu.items {
item.target = MainMenu.shared
}
self.setSubmenu(servicesMenu, for: services)
self.addItem(NSMenuItem(title: "mi_force_load_latest".localized, action: #selector(MainMenu.forceRestartLatestPhp), keyEquivalent: "f"))
self.addItem(services)
self.addItem(NSMenuItem(title: "mi_restart_all_services".localized, action: #selector(MainMenu.restartAllServices), keyEquivalent: "s"))
}
public func addPhpConfigurationMenuItems() {
if App.shared.currentInstall == nil {
return
}
// Configuration
self.addItem(NSMenuItem(title: "mi_configuration".localized, action: nil, keyEquivalent: ""))
self.addItem(NSMenuItem(title: "mi_valet_config".localized, action: #selector(MainMenu.openValetConfigFolder), keyEquivalent: "v"))
self.addItem(NSMenuItem(title: "mi_php_config".localized, action: #selector(MainMenu.openActiveConfigFolder), keyEquivalent: "c"))
self.addItem(NSMenuItem(title: "mi_phpinfo".localized, action: #selector(MainMenu.openPhpInfo), keyEquivalent: "i"))
// Memory Limits
self.addItem(NSMenuItem.separator())
self.addItem(NSMenuItem(title: "mi_limits".localized, action: nil, keyEquivalent: ""))
self.addItem(NSMenuItem(title: "memory_limit: \(App.phpInstall!.configuration.memory_limit)", action: #selector(MainMenu.openActiveConfigFolder), keyEquivalent: ""))
self.addItem(NSMenuItem(title: "post_max_size: \(App.phpInstall!.configuration.post_max_size)", action: #selector(MainMenu.openActiveConfigFolder), keyEquivalent: ""))
self.addItem(NSMenuItem(title: "upload_max_filesize: \(App.phpInstall!.configuration.upload_max_filesize)", action: #selector(MainMenu.openActiveConfigFolder), keyEquivalent: ""))
// Extensions
self.addItem(NSMenuItem.separator())
self.addItem(NSMenuItem(title: "mi_detected_extensions".localized, action: nil, keyEquivalent: ""))
for phpExtension in App.phpInstall!.extensions {
self.addExtensionItem(phpExtension)
}
if (App.phpInstall!.extensions.count == 0) {
self.addItem(NSMenuItem(title: "mi_no_extensions_detected".localized, action: nil, keyEquivalent: ""))
}
for phpExtension in App.phpInstall!.extensions {
self.addExtensionItem(phpExtension)
}
}
private func addExtensionItem(_ phpExtension: PhpExtension) {

View File

@ -22,10 +22,12 @@
"mi_restart_php_fpm" = "Restart service: php";
"mi_restart_nginx" = "Restart service: nginx";
"mi_restart_dnsmasq" = "Restart service: dnsmasq";
"mi_restart_specific" = "Restart specific service";
"mi_restart_all_services" = "Restart all services";
"mi_force_load_latest" = "Force load latest PHP version";
"mi_configuration" = "Configuration";
"mi_limits" = "Memory & Upload Limits";
"mi_valet_config" = "Locate Valet folder (.config/valet)";
"mi_php_config" = "Locate PHP configuration file (php.ini)";
"mi_phpinfo" = "Show current configuration (phpinfo)";