Private/New-BridgeConfiguration.ps1
|
function New-BridgeConfiguration { <# .SYNOPSIS Δημιουργεί ένα configuration object για το BridgeWatcher module. .DESCRIPTION Κεντρικοποιεί όλα τα configuration settings, URLs, patterns και mappings που χρησιμοποιούνται στο BridgeWatcher module. Επιστρέφει ένα αντικείμενο με Urls, Defaults, Statuses και υπο-αντικείμενα μηνυμάτων. .PARAMETER BaseUrl Το base URL για τα δεδομένα και εικόνες γεφυρών. .PARAMETER OCRApiUrl Το URL για τη Google Cloud Vision API. .PARAMETER DefaultIntervalSeconds Το προεπιλεγμένο διάστημα σε δευτερόλεπτα για τη παρακολούθηση. .PARAMETER DefaultMaxIterations Ο προεπιλεγμένος μέγιστος αριθμός επαναλήψεων. .OUTPUTS [PSCustomObject] - Αντικείμενο διαμόρφωσης με Urls, Defaults, Statuses και υπο-αντικείμενα μηνυμάτων. .NOTES Αυτή η συνάρτηση δημιουργεί μόνο ένα configuration object στη μνήμη και δεν αλλάζει την κατάσταση του συστήματος. #> [CmdletBinding()] [OutputType([PSCustomObject])] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'Η συνάρτηση δημιουργεί μόνο το αντικείμενο διαμόρφωσης στη μνήμη, δεν αλλάζει την κατάσταση του συστήματος.')] param( [Parameter()] [ValidateNotNullOrEmpty()] [string]$BaseUrl = 'https://www.topvision.gr/dioriga', [Parameter()] [ValidateNotNullOrEmpty()] [string]$OCRApiUrl = 'https://vision.googleapis.com/v1/images:annotate', [Parameter()] [ValidateRange(1, 3600)] [int]$DefaultIntervalSeconds = 300, [Parameter()] [ValidateRange(0, 1000)] [int]$DefaultMaxIterations = 100, [Parameter()] [ValidateNotNullOrEmpty()] [string]$LogDirectory = $( if (Test-Path 'TestDrive:\') { 'TestDrive:\logs' } else { (Join-Path (Split-Path (Split-Path $PSScriptRoot -Parent) -Parent) 'logs') } ) ) # Bridge name mappings (add new bridge slugs here) $bridgeNames = @{ 'isthmia' = 'Ισθμία' 'poseidonia' = 'Ποσειδωνία' } # Unified status strings $statuses = [PSCustomObject]@{ Open = 'Ανοιχτή' Closed = 'Κλειστή' ClosedForMaintenance = 'Κλειστή για συντήρηση' ClosedWithSchedule = 'Κλειστή με πρόγραμμα' PermanentlyClosed = 'Μόνιμα κλειστή' Unknown = 'Άγνωστη' } # Status mappings $statusMappings = @{ 'ΚΛΕΙΣΤΗ' = 'Κλειστή' 'ΑΝΟΙΧΤΗ' = 'Ανοιχτή' 'CLOSED' = 'Κλειστή' 'OPEN' = 'Ανοιχτή' } # Error messages $errorMessages = @{ NoStatus = '⛔ Δεν υπάρχει διαθέσιμο status για αποθήκευση.' HtmlRetrievalFailure = 'Αποτυχία ανάκτησης HTML από τον server' ExportFailure = '⛔ Αποτυχία εξαγωγής δεδομένων' OCRFailure = '❌ Απέτυχε η OCR' NetworkError = '❌ Σφάλμα δικτύου' MonitoringError = '❌ Σφάλμα κατά την ανάκτηση της κατάστασης της γέφυρας' } # Status messages $statusMessages = @{ MonitoringStart = 'Ξεκίνησε ο κύκλος παρακολούθησης' MonitoringComplete = '✅ Ο κύκλος παρακολούθησης ολοκληρώθηκε' } # Logging configuration $loggingConfig = @{ ErrorStage = 'Σφάλμα' DebugStage = 'Debug' InfoStage = 'Ανάλυση' WarningLevel = 'Warning' ErrorLevel = 'Error' InfoLevel = 'Info' DebugLevel = 'Debug' VerboseLevel = 'Verbose' } # Export messages $exportMessages = @{ Success = '✅ Επιτυχής εξαγωγή JSON' Failed = '❌ Αποτυχία εξαγωγής JSON' DirectoryNotExists = '❌ Ο φάκελος προορισμού δεν υπάρχει' } # OCR messages $ocrMessages = @{ StartOCR = '🔍 Εκκίνηση OCR' OCRFailed = '❌ Αποτυχία OCR' } # Pushover messages $pushoverMessages = @{ SendFailed = '❌ Αποτυχία αποστολής Pushover' } # Advice messages $adviceMessages = @{ DoNotWait = 'Είναι προτιμότερο να μην περιμένεις' Wait = 'Είναι προτιμότερο να περιμένεις' } return [PSCustomObject]@{ # URLs Urls = [PSCustomObject]@{ Source = $BaseUrl.TrimEnd('/') + '/' BaseImage = $BaseUrl.TrimEnd('/') OCRApi = $OCRApiUrl PushoverApi = 'https://api.pushover.net/1/messages.json' } # Defaults Defaults = [PSCustomObject]@{ IntervalSeconds = $DefaultIntervalSeconds MaxIterations = $DefaultMaxIterations JsonDepth = 5 MaxWaitTimeMinutes = 12 LogDirectory = $LogDirectory } # Mappings Statuses = $statuses BridgeNames = $bridgeNames StatusMappings = $statusMappings ErrorMessages = $errorMessages StatusMessages = $statusMessages LoggingConfig = $loggingConfig ExportMessages = $exportMessages OCRMessages = $ocrMessages PushoverMessages = $pushoverMessages AdviceMessages = $adviceMessages # Patterns (can be extended) TimePatterns = @( '\d{1,2}:\d{2}' '\d{1,2}\.\d{2}' ) # File extensions SupportedImageExtensions = @('.jpg', '.jpeg', '.png', '.gif') PSTypeName = 'BridgeWatcher.Configuration' } } |