{"id":209,"date":"2025-02-20T20:27:50","date_gmt":"2025-02-20T16:27:50","guid":{"rendered":"https:\/\/www.arparun.re\/?page_id=209"},"modified":"2025-05-26T17:25:08","modified_gmt":"2025-05-26T13:25:08","slug":"monitor-de-services","status":"publish","type":"page","link":"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/","title":{"rendered":"Moniteur de Services"},"content":{"rendered":"\n<body>\n    <div class=\"container\">\n\n        <div>\n            <h2>Ajouter un service<\/h2>\n            <select id=\"protocol\" class=\"protocol-select\" onchange=\"updatePortPlaceholder()\">\n                <option value=\"http\">http<\/option>\n                <option value=\"https\">https<\/option>\n            <\/select>\n            <input type=\"text\" id=\"ip\" placeholder=\"Adresse IP\/Domaine\" required>\n            <input type=\"number\" id=\"port\" placeholder=\"Port\" min=\"1\" max=\"65535\" required>\n            <button onclick=\"addServer()\">Ajouter<\/button>\n        <\/div>\n\n        <h2>Services surveilles<\/h2>\n        <table id=\"serverList\">\n            <tr>\n                <th>Type<\/th>\n                <th>Adresse<\/th>\n                <th>Port<\/th>\n                <th>Statut<\/th>\n                <th>Derniere verification<\/th>\n                <th>Action<\/th>\n            <\/tr>\n        <\/table>\n\n        <script>\n            let servers = JSON.parse(localStorage.getItem('servers') || '[]');\n            updateServerList();\n\n            function checkTCP(ip, port, timeout = 3000) {\n                return new Promise((resolve) => {\n                    const socket = new WebSocket(`ws:\/\/${ip}:${port}`);\n                    let timeoutId = setTimeout(() => {\n                        socket.close();\n                        resolve({ status: 'down', error: 'Timeout' });\n                    }, timeout);\n\n                    socket.onopen = () => {\n                        clearTimeout(timeoutId);\n                        socket.close();\n                        resolve({ status: 'up' });\n                    };\n\n                    socket.onerror = () => {\n                        clearTimeout(timeoutId);\n                        resolve({ status: 'down' });\n                    };\n                });\n            }\n\n            async function checkStatus(server) {\n                const startTime = Date.now();\n                let result = { status: 'unknown' };\n\n                try {\n                    switch(server.protocol) {\n                        case 'http':\n                        case 'https':\n                            const response = await fetch(`${server.protocol}:\/\/${server.ip}:${server.port}`, {\n                                method: 'GET',\n                                mode: 'no-cors',\n                                cache: 'no-store'\n                            });\n                            result = { status: 'up' };\n                            break;\n\n                    }\n                } catch (error) {\n                    result = { status: 'down', error: error.message };\n                }\n\n                return {\n                    ...result,\n                    latency: Date.now() - startTime,\n                    lastCheck: new Date().toLocaleTimeString()\n                };\n            }\n\n            async function updateStatus() {\n                const updates = servers.map(async (server) => {\n                    const status = await checkStatus(server);\n                    const row = document.getElementById(`server-${server.id}`);\n                    if(row) {\n                        row.cells[3].innerHTML = `\n                            <span class=\"status ${status.status}\">\n                                ${status.status.toUpperCase()}\n                                ${status.latency ? status.latency + 'ms' : ''}\n                            <\/span>\n                            ${status.error ? `<br><small>${status.error}<\/small>` : ''}\n                        `;\n                        row.cells[4].textContent = status.lastCheck;\n                    }\n                });\n\n                await Promise.all(updates);\n            }\n\n            function addServer() {\n                const protocol = document.getElementById('protocol').value;\n                const ip = document.getElementById('ip').value.trim();\n                const port = parseInt(document.getElementById('port').value, 10);\n\n                if(!ip || !port) return;\n\n                servers.push({\n                    id: Date.now(),\n                    protocol,\n                    ip,\n                    port\n                });\n\n                localStorage.setItem('servers', JSON.stringify(servers));\n                updateServerList();\n                updateStatus();\n            }\n\n            function removeServer(id) {\n                servers = servers.filter(s => s.id !== id);\n                localStorage.setItem('servers', JSON.stringify(servers));\n                updateServerList();\n            }\n\n            function updateServerList() {\n                const tbody = document.getElementById('serverList');\n                while(tbody.rows.length > 1) tbody.deleteRow(1);\n\n                servers.forEach(server => {\n                    const row = tbody.insertRow();\n                    row.id = `server-${server.id}`;\n                    row.insertCell().textContent = server.protocol.toUpperCase();\n                    row.insertCell().textContent = server.ip;\n                    row.insertCell().textContent = server.port;\n                    row.insertCell().innerHTML = '<span class=\"status unknown\">...<\/span>';\n                    row.insertCell().textContent = '-';\n                    row.insertCell().innerHTML =\n                        `<button onclick=\"removeServer(${server.id})\">Supprimer<\/button>`;\n                });\n            }\n\n            function updatePortPlaceholder() {\n                const protocol = document.getElementById('protocol').value;\n                const defaultPorts = {\n                    http: 80,\n                    https: 443\n                   \n                };\n                document.getElementById('port').placeholder = `Port (ex: ${defaultPorts[protocol]})`;\n            }\n\n            \/\/ Verification initiale et toutes les minutes\n            setInterval(updateStatus, 10000);\n            updateStatus();\n            updatePortPlaceholder();\n        <\/script>\n<button onclick=\"updateStatus()\" style=\"margin-left: 20px; padding: 5px 10px;\">\ud83d\udd04 Rafra\u00eechir<\/button>\n    <\/div>\n<\/body>\n","protected":false},"excerpt":{"rendered":"<p>Ajouter un service httphttps Ajouter Services surveilles Type Adresse Port Statut Derniere verification Action \ud83d\udd04 Rafra\u00eechir<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-209","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Moniteur de Services - arparun - Informatique Reunion<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Moniteur de Services - arparun - Informatique Reunion\" \/>\n<meta property=\"og:description\" content=\"Ajouter un service httphttps Ajouter Services surveilles Type Adresse Port Statut Derniere verification Action \ud83d\udd04 Rafra\u00eechir\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/\" \/>\n<meta property=\"og:site_name\" content=\"arparun - Informatique Reunion\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-26T13:25:08+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/\",\"url\":\"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/\",\"name\":\"Moniteur de Services - arparun - Informatique Reunion\",\"isPartOf\":{\"@id\":\"https:\/\/www.arparun.re\/#website\"},\"datePublished\":\"2025-02-20T16:27:50+00:00\",\"dateModified\":\"2025-05-26T13:25:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.arparun.re\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Moniteur de Services\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.arparun.re\/#website\",\"url\":\"https:\/\/www.arparun.re\/\",\"name\":\"arparun - Informatique Reunion\",\"description\":\"Syst\u00e8mes, R\u00e9seaux et S\u00e9curit\u00e9\",\"publisher\":{\"@id\":\"https:\/\/www.arparun.re\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.arparun.re\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.arparun.re\/#organization\",\"name\":\"Arparun\",\"url\":\"https:\/\/www.arparun.re\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.arparun.re\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.arparun.re\/wp-content\/uploads\/2021\/02\/cropped-site.png\",\"contentUrl\":\"https:\/\/www.arparun.re\/wp-content\/uploads\/2021\/02\/cropped-site.png\",\"width\":512,\"height\":512,\"caption\":\"Arparun\"},\"image\":{\"@id\":\"https:\/\/www.arparun.re\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Moniteur de Services - arparun - Informatique Reunion","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/","og_locale":"fr_FR","og_type":"article","og_title":"Moniteur de Services - arparun - Informatique Reunion","og_description":"Ajouter un service httphttps Ajouter Services surveilles Type Adresse Port Statut Derniere verification Action \ud83d\udd04 Rafra\u00eechir","og_url":"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/","og_site_name":"arparun - Informatique Reunion","article_modified_time":"2025-05-26T13:25:08+00:00","twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/","url":"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/","name":"Moniteur de Services - arparun - Informatique Reunion","isPartOf":{"@id":"https:\/\/www.arparun.re\/#website"},"datePublished":"2025-02-20T16:27:50+00:00","dateModified":"2025-05-26T13:25:08+00:00","breadcrumb":{"@id":"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.arparun.re\/index.php\/monitor-de-services\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.arparun.re\/index.php\/monitor-de-services\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.arparun.re\/"},{"@type":"ListItem","position":2,"name":"Moniteur de Services"}]},{"@type":"WebSite","@id":"https:\/\/www.arparun.re\/#website","url":"https:\/\/www.arparun.re\/","name":"arparun - Informatique Reunion","description":"Syst\u00e8mes, R\u00e9seaux et S\u00e9curit\u00e9","publisher":{"@id":"https:\/\/www.arparun.re\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.arparun.re\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.arparun.re\/#organization","name":"Arparun","url":"https:\/\/www.arparun.re\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.arparun.re\/#\/schema\/logo\/image\/","url":"https:\/\/www.arparun.re\/wp-content\/uploads\/2021\/02\/cropped-site.png","contentUrl":"https:\/\/www.arparun.re\/wp-content\/uploads\/2021\/02\/cropped-site.png","width":512,"height":512,"caption":"Arparun"},"image":{"@id":"https:\/\/www.arparun.re\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/pages\/209","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/comments?post=209"}],"version-history":[{"count":8,"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/pages\/209\/revisions"}],"predecessor-version":[{"id":350,"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/pages\/209\/revisions\/350"}],"wp:attachment":[{"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/media?parent=209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}