249 lines
8.6 KiB
JavaScript
249 lines
8.6 KiB
JavaScript
/**
|
|
* MYP Platform - JavaScript Fehler Validierung und Überwachung
|
|
* Überprüft die behobenen Fehler und aktiviert weitere Fallbacks bei Bedarf
|
|
*/
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
console.log('🔍 JavaScript Fehlervalidierung wird gestartet...');
|
|
|
|
/**
|
|
* Validierung der showToast-Verfügbarkeit
|
|
*/
|
|
function validateShowToast() {
|
|
const testsPassed = [];
|
|
|
|
// Test 1: Grundfunktion verfügbar
|
|
if (typeof window.showToast === 'function') {
|
|
testsPassed.push('✅ window.showToast ist verfügbar');
|
|
} else {
|
|
console.warn('⚠️ window.showToast nicht verfügbar - aktiviere Fallback');
|
|
|
|
// Fallback aktivieren
|
|
window.showToast = function(message, type = 'info', duration = 5000) {
|
|
console.log(`🔧 Validation-Fallback showToast: [${type.toUpperCase()}] ${message}`);
|
|
|
|
// Versuche MYP.UI.toast zu verwenden
|
|
if (window.MYP && window.MYP.UI && window.MYP.UI.toast && window.MYP.UI.toast.show) {
|
|
window.MYP.UI.toast.show(message, type, duration);
|
|
}
|
|
};
|
|
testsPassed.push('🔧 Fallback showToast aktiviert');
|
|
}
|
|
|
|
// Test 2: MYP.UI.toast verfügbar
|
|
if (window.MYP && window.MYP.UI && window.MYP.UI.toast) {
|
|
testsPassed.push('✅ MYP.UI.toast ist verfügbar');
|
|
} else {
|
|
testsPassed.push('⚠️ MYP.UI.toast noch nicht verfügbar (wird später geladen)');
|
|
}
|
|
|
|
return testsPassed;
|
|
}
|
|
|
|
/**
|
|
* Validierung der Manager-Verfügbarkeit
|
|
*/
|
|
function validateManagers() {
|
|
const testsPassed = [];
|
|
|
|
// JobManager-Test
|
|
if (typeof window.jobManager !== 'undefined' && window.jobManager) {
|
|
testsPassed.push('✅ window.jobManager ist verfügbar');
|
|
} else if (typeof jobManager !== 'undefined' && jobManager) {
|
|
testsPassed.push('✅ jobManager (global) ist verfügbar');
|
|
} else {
|
|
testsPassed.push('⚠️ JobManager nicht verfügbar - API-Fallback wird verwendet');
|
|
}
|
|
|
|
// Refresh-Funktionen Test
|
|
if (typeof window.refreshJobs === 'function') {
|
|
testsPassed.push('✅ refreshJobs-Funktion ist verfügbar');
|
|
} else {
|
|
testsPassed.push('❌ refreshJobs-Funktion fehlt');
|
|
}
|
|
|
|
if (typeof window.refreshStats === 'function') {
|
|
testsPassed.push('✅ refreshStats-Funktion ist verfügbar');
|
|
} else {
|
|
testsPassed.push('❌ refreshStats-Funktion fehlt');
|
|
}
|
|
|
|
return testsPassed;
|
|
}
|
|
|
|
/**
|
|
* API-Endpunkt Validierung
|
|
*/
|
|
async function validateAPIEndpoints() {
|
|
const testsPassed = [];
|
|
const endpoints = [
|
|
{ url: '/api/stats', name: 'Statistiken' },
|
|
{ url: '/api/jobs', name: 'Jobs' }
|
|
];
|
|
|
|
for (const endpoint of endpoints) {
|
|
try {
|
|
const response = await fetch(endpoint.url, {
|
|
method: 'HEAD', // Nur Header abrufen, kein Body
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
}
|
|
});
|
|
|
|
if (response.ok || response.status === 405) { // 405 = Method Not Allowed ist OK
|
|
testsPassed.push(`✅ ${endpoint.name} API (${endpoint.url}) ist erreichbar`);
|
|
} else {
|
|
testsPassed.push(`⚠️ ${endpoint.name} API (${endpoint.url}) antwortet mit Status ${response.status}`);
|
|
}
|
|
} catch (error) {
|
|
testsPassed.push(`❌ ${endpoint.name} API (${endpoint.url}) nicht erreichbar: ${error.message}`);
|
|
}
|
|
}
|
|
|
|
return testsPassed;
|
|
}
|
|
|
|
/**
|
|
* DOM-Element Validierung
|
|
*/
|
|
function validateDOMElements() {
|
|
const testsPassed = [];
|
|
const criticalElements = [
|
|
'total-print-time',
|
|
'completed-jobs-count',
|
|
'total-material-used',
|
|
'last-updated-time'
|
|
];
|
|
|
|
criticalElements.forEach(elementId => {
|
|
const element = document.getElementById(elementId);
|
|
if (element) {
|
|
testsPassed.push(`✅ Element #${elementId} gefunden`);
|
|
} else {
|
|
testsPassed.push(`⚠️ Element #${elementId} nicht gefunden`);
|
|
}
|
|
});
|
|
|
|
// Container-Elemente
|
|
const containers = [
|
|
'.jobs-container',
|
|
'#jobs-container',
|
|
'.job-grid',
|
|
'#refresh-button'
|
|
];
|
|
|
|
containers.forEach(selector => {
|
|
const element = document.querySelector(selector);
|
|
if (element) {
|
|
testsPassed.push(`✅ Container ${selector} gefunden`);
|
|
} else {
|
|
testsPassed.push(`⚠️ Container ${selector} nicht gefunden`);
|
|
}
|
|
});
|
|
|
|
return testsPassed;
|
|
}
|
|
|
|
/**
|
|
* Error Handler Validierung
|
|
*/
|
|
function validateErrorHandling() {
|
|
const testsPassed = [];
|
|
|
|
// Test ob unser error handler aktiv ist
|
|
const testError = new Error('Validation Test Error');
|
|
window.dispatchEvent(new ErrorEvent('error', {
|
|
message: 'Test error for validation',
|
|
filename: 'validation-fix.js',
|
|
lineno: 1,
|
|
error: testError
|
|
}));
|
|
|
|
testsPassed.push('✅ Error Handler Funktionalität getestet');
|
|
|
|
return testsPassed;
|
|
}
|
|
|
|
/**
|
|
* Vollständige Validierung durchführen
|
|
*/
|
|
async function runCompleteValidation() {
|
|
console.log('🔍 Starte vollständige JavaScript-Validierung...');
|
|
|
|
const results = {
|
|
showToast: validateShowToast(),
|
|
managers: validateManagers(),
|
|
domElements: validateDOMElements(),
|
|
errorHandling: validateErrorHandling(),
|
|
apiEndpoints: await validateAPIEndpoints()
|
|
};
|
|
|
|
// Ergebnisse ausgeben
|
|
console.group('🔍 Validierungsergebnisse:');
|
|
|
|
Object.keys(results).forEach(category => {
|
|
console.group(`📋 ${category}:`);
|
|
results[category].forEach(result => console.log(result));
|
|
console.groupEnd();
|
|
});
|
|
|
|
console.groupEnd();
|
|
|
|
// Zusammenfassung
|
|
const allResults = Object.values(results).flat();
|
|
const successCount = allResults.filter(r => r.startsWith('✅')).length;
|
|
const warningCount = allResults.filter(r => r.startsWith('⚠️')).length;
|
|
const errorCount = allResults.filter(r => r.startsWith('❌')).length;
|
|
|
|
console.log(`📊 Validierung abgeschlossen: ${successCount} OK, ${warningCount} Warnungen, ${errorCount} Fehler`);
|
|
|
|
// Status-Toast anzeigen
|
|
if (typeof window.showToast === 'function') {
|
|
if (errorCount === 0) {
|
|
window.showToast(`✅ JavaScript-Validierung erfolgreich: ${successCount} Checks bestanden`, 'success');
|
|
} else {
|
|
window.showToast(`⚠️ JavaScript-Validierung: ${errorCount} Probleme gefunden`, 'warning');
|
|
}
|
|
}
|
|
|
|
return results;
|
|
}
|
|
|
|
/**
|
|
* Kontinuierliche Überwachung
|
|
*/
|
|
function startContinuousMonitoring() {
|
|
setInterval(() => {
|
|
// Prüfe kritische Funktionen
|
|
if (typeof window.showToast !== 'function') {
|
|
console.warn('⚠️ showToast-Funktion verloren - reaktiviere Fallback');
|
|
validateShowToast();
|
|
}
|
|
|
|
// Prüfe auf neue Fehler
|
|
const errorElements = document.querySelectorAll('.text-red-500');
|
|
if (errorElements.length > 0) {
|
|
console.warn(`⚠️ ${errorElements.length} Fehler-Elemente gefunden`);
|
|
}
|
|
}, 30000); // Alle 30 Sekunden
|
|
}
|
|
|
|
// Globale Funktionen exportieren
|
|
window.validateJavaScript = runCompleteValidation;
|
|
window.validateShowToast = validateShowToast;
|
|
|
|
// DOMContentLoaded abwarten und dann validieren
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
setTimeout(runCompleteValidation, 2000); // 2 Sekunden warten
|
|
startContinuousMonitoring();
|
|
});
|
|
} else {
|
|
setTimeout(runCompleteValidation, 2000);
|
|
startContinuousMonitoring();
|
|
}
|
|
|
|
console.log('✅ JavaScript Fehlervalidierung initialisiert');
|
|
})();
|