Door
Ariën
op 10-04-2015 10:04
gewijzigd op 10-04-2015 10:04
1.276 views
Met cURL kan je een hoop meldingen tevoorschijn toveren als een site down is:
Uit de log van het NOC-script die ik gebruik om mijn servers te monitoren, heb ik deze (helaas ;-) )gehaald:
- Connection refused
- Connection timed out
Welke meldingen bestaan er nog meer die aangeven als een site niet oproepbaar is?
Dit klinkt trouwens als een soort van blacklist, kun je niet beter controleren of een aanroep slaagt en er anders vanuit gaan dat er iets mis is in plaats van andersom (checken op "alle" mogelijke foute situaties, want de vraag is dan, heb je alle gevallen bekeken)?
Als iemand een site zo in elkaar zet dat er een 404 pagina geserveerd wordt met status code 200 indien de oorspronkelijk gevraagde pagina niet kon worden gevonden dan kun je dit onderscheid niet maken.
Het is echter niet jouw taak noch jouw verantwoordelijkheid dat (wat voor) content (dan ook) op de juiste manier geserveerd wordt. Je kunt er alleen maar vanuit gaan dat de bouwers van de website dit netjes doen. Verder kun je alleen maar vertrouwen op de HTTP status codes en hopen dat eea netjes is geprogrammeerd. Maar ja, dit vertrouwen is vaak misplaatst :).
Soortgelijk probleem: RSS-feeds die pretenderen UTF-8 te zijn. Als je niet uit kunt gaan van de meegestuurde character encoding declaratie dan is het einde een beetje zoek :).
De enige manier om na te gaan of je scripts werken (bedoel je hiermee ook bijvoorbeeld of PHP "actief" is ofzo?) lijkt mij het stellen van een voorgedefinieerde vraag en vervolgens het voorgedefinieerde (of afleidbare) antwoord te controleren.
EDIT: natuurlijk zijn je scripts complexer dan dat. Alternatief: zet al je code in een try-catch blok, throw een exception als er iets onverwachts gebeurt en voeg dan een header('HTTP/1.0 500 Internal Server Error'); toe?
Dit neemt niet weg dat de kans bestaat dat je code niet doet wat deze behoort te doen, simpelweg doordat er semantisch iets niet klopt ;-).
Of ze output geven (200 OK), en daarna de controle of de output aangeeft dat hij nog zijn data ontvangt (JSON result-stringetje). Dit lijkt me voldoende.