1
0
mirror of https://github.com/nicoverbruggen/phpmon.git synced 2025-11-07 05:10:06 +01:00

👌 Unify scanners

This commit is contained in:
2022-12-15 22:28:15 +01:00
parent bc96b50630
commit ee230f3086
12 changed files with 125 additions and 169 deletions

View File

@@ -25,7 +25,7 @@ public struct TestableConfiguration: Codable {
Log.info("Applying fake commands...")
ActiveCommand.useTestable(commandOutput)
Log.info("Applying fake scanner...")
ValetScanners.useFake()
ValetScanner.useFake()
Log.info("Applying fake Valet domain interactor...")
ValetInteractor.useFake()
}

View File

@@ -23,8 +23,9 @@ class FakeValetInteractor: ValetInteractor {
override func unlink(site: ValetSite) async throws {
await delay(seconds: delayTime)
if let scanner = ValetScanners.siteScanner as? FakeSiteScanner {
scanner.fakes.removeAll { $0 === site }
if let scanner = ValetScanner.active as? FakeDomainScanner {
scanner.sites.removeAll { $0 === site }
}
}
@@ -44,6 +45,9 @@ class FakeValetInteractor: ValetInteractor {
override func remove(proxy: ValetProxy) async throws {
await delay(seconds: delayTime)
#warning("A fake proxy scanner needs to be added")
if let scanner = ValetScanner.active as? FakeDomainScanner {
scanner.proxies.removeAll { $0 === proxy }
}
}
}

View File

@@ -1,15 +0,0 @@
//
// EmptyProxyScanner.swift
// PHP Monitor
//
// Created by Nico Verbruggen on 01/11/2022.
// Copyright © 2022 Nico Verbruggen. All rights reserved.
//
import Foundation
class EmptyProxyScanner: ProxyScanner {
func resolveProxies(directoryPath: String) -> [ValetProxy] {
return []
}
}

View File

@@ -1,15 +0,0 @@
//
// ProxyScanner.swift
// PHP Monitor
//
// Created by Nico Verbruggen on 02/04/2022.
// Copyright © 2022 Nico Verbruggen. All rights reserved.
//
import Foundation
protocol ProxyScanner {
func resolveProxies(directoryPath: String) -> [ValetProxy]
}

View File

@@ -1,29 +0,0 @@
//
// ValetProxyScanner.swift
// PHP Monitor
//
// Created by Nico Verbruggen on 11/04/2022.
// Copyright © 2022 Nico Verbruggen. All rights reserved.
//
import Foundation
class ValetProxyScanner: ProxyScanner {
func resolveProxies(directoryPath: String) -> [ValetProxy] {
return try! FileManager
.default
.contentsOfDirectory(atPath: directoryPath)
.filter {
return !$0.starts(with: ".")
}
.compactMap {
return NginxConfigurationFile.from(filePath: "\(directoryPath)/\($0)")
}
.filter {
return $0.proxy != nil
}
.map {
return ValetProxy($0)
}
}
}

View File

@@ -1,17 +1,25 @@
//
// ValetSiteScanner.swift
// DomainScanner.swift
// PHP Monitor
//
// Created by Nico Verbruggen on 19/03/2022.
// Created by Nico Verbruggen on 02/04/2022.
// Copyright © 2022 Nico Verbruggen. All rights reserved.
//
import Foundation
protocol SiteScanner {
protocol DomainScanner {
// MARK: - Sites
func resolveSiteCount(paths: [String]) -> Int
func resolveSitesFrom(paths: [String]) -> [ValetSite]
func resolveSite(path: String) -> ValetSite?
// MARK: - Proxies
func resolveProxies(directoryPath: String) -> [ValetProxy]
}

View File

@@ -1,13 +1,14 @@
//
// FakeSiteScanner.swift
// FakeDomainScanner.swift
// PHP Monitor
//
// Created by Nico Verbruggen on 02/04/2022.
// Copyright © 2022 Nico Verbruggen. All rights reserved.
//
class FakeSiteScanner: SiteScanner {
var fakes = [
class FakeDomainScanner: DomainScanner {
var sites: [ValetSite] = [
FakeValetSite(fakeWithName: "laravel", tld: "test", secure: true,
path: "~/Code/laravel/framework", linked: true),
@@ -27,15 +28,27 @@ class FakeSiteScanner: SiteScanner {
path: "~/Sites/wordpress", linked: false, driver: "WordPress", constraint: "^7.4", isolated: "7.4")
]
var proxies: [ValetProxy] = [
// TODO: Add new proxy here
]
// MARK: - Sites
func resolveSiteCount(paths: [String]) -> Int {
return fakes.count
return sites.count
}
func resolveSitesFrom(paths: [String]) -> [ValetSite] {
return fakes
return sites
}
func resolveSite(path: String) -> ValetSite? {
return nil
}
// MARK: - Proxies
func resolveProxies(directoryPath: String) -> [ValetProxy] {
return proxies
}
}

View File

@@ -1,5 +1,5 @@
//
// ValetSiteScanner.swift
// ValetDomainScanner.swift
// PHP Monitor
//
// Created by Nico Verbruggen on 02/04/2022.
@@ -8,7 +8,10 @@
import Foundation
class ValetSiteScanner: SiteScanner {
class ValetDomainScanner: DomainScanner {
// MARK: - Sites
func resolveSiteCount(paths: [String]) -> Int {
return paths.map { path in
@@ -76,4 +79,24 @@ class ValetSiteScanner: SiteScanner {
return (FileSystem.isDirectory(siteDir) || FileSystem.isSymlink(siteDir))
}
// MARK: - Proxies
func resolveProxies(directoryPath: String) -> [ValetProxy] {
return try! FileManager
.default
.contentsOfDirectory(atPath: directoryPath)
.filter {
return !$0.starts(with: ".")
}
.compactMap {
return NginxConfigurationFile.from(filePath: "\(directoryPath)/\($0)")
}
.filter {
return $0.proxy != nil
}
.map {
return ValetProxy($0)
}
}
}

View File

@@ -0,0 +1,19 @@
//
// Valet+Scanners.swift
// PHP Monitor
//
// Created by Nico Verbruggen on 01/11/2022.
// Copyright © 2022 Nico Verbruggen. All rights reserved.
//
import Foundation
class ValetScanner {
static var active: DomainScanner = ValetDomainScanner()
public static func useFake() {
ValetScanner.active = FakeDomainScanner()
}
}

View File

@@ -49,7 +49,7 @@ class Valet {
public func checkForMarketingMode() {
if ProcessInfo.processInfo.environment["PHPMON_MARKETING_MODE"] != nil {
Log.info("Using a fake list of sites for Marketing Mode!")
ValetScanners.useFake()
ValetScanner.useFake()
}
}
@@ -188,8 +188,7 @@ class Valet {
Returns a count of how many sites are linked and parked.
*/
private func countPaths() -> Int {
return ValetScanners.siteScanner
.resolveSiteCount(paths: config.paths)
return ValetScanner.active.resolveSiteCount(paths: config.paths)
}
/**
@@ -198,19 +197,19 @@ class Valet {
private func resolvePaths() {
isBusy = true
sites = ValetScanners.siteScanner
sites = ValetScanner.active
.resolveSitesFrom(paths: config.paths)
.sorted {
$0.absolutePath < $1.absolutePath
}
proxies = ValetScanners.proxyScanner
proxies = ValetScanner.active
.resolveProxies(
directoryPath: "~/.config/valet/Nginx".replacingTildeWithHomeDirectory
)
if let defaultPath = Valet.shared.config.defaultSite,
let site = ValetSiteScanner().resolveSite(path: defaultPath) {
let site = ValetScanner.active.resolveSite(path: defaultPath) {
sites.insert(site, at: 0)
}

View File

@@ -1,21 +0,0 @@
//
// Valet+Scanners.swift
// PHP Monitor
//
// Created by Nico Verbruggen on 01/11/2022.
// Copyright © 2022 Nico Verbruggen. All rights reserved.
//
import Foundation
class ValetScanners {
static var siteScanner: SiteScanner = ValetSiteScanner()
static var proxyScanner: ProxyScanner = ValetProxyScanner()
public static func useFake() {
ValetScanners.siteScanner = FakeSiteScanner()
ValetScanners.proxyScanner = EmptyProxyScanner()
}
}