File size: 2,661 Bytes
63a3147
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Black Forest Labs - Load Balanced Streamlit</title>
    <style>
        html, body {
            margin: 0;
            padding: 0;
            width: 100%;
            height: 100%;
        }
        #loading {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(255, 255, 255, 0.8);
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 24px;
            z-index: 1000;
        }
        iframe {
            width: 100%;
            height: 100vh;
            border: none;
        }
    </style>
</head>
<body>
    <div id="loading">Please wait Memilih server optimal...</div>
    <iframe id="streamlit-frame"></iframe>

    <script>
    const SERVERS = [
        "https://chatbot5-20jul2024-cobd9nf8yh8ard4jwpdpn2.streamlit.app/?embed=true",
    ];

    // Fungsi untuk mengecek kecepatan respons server
    async function checkServerSpeed(url) {
        const start = performance.now();
        try {
            const response = await fetch(url, { method: 'HEAD', mode: 'no-cors' });
            const end = performance.now();
            return end - start;
        } catch (error) {
            console.error(`Error checking ${url}:`, error);
            return Infinity;
        }
    }

    // Fungsi untuk memilih server berdasarkan kecepatan respons
    async function chooseServer() {
        const speeds = await Promise.all(SERVERS.map(checkServerSpeed));
        const fastestIndex = speeds.indexOf(Math.min(...speeds));
        return SERVERS[fastestIndex];
    }

    // Fungsi untuk memuat Streamlit
    async function loadStreamlit() {
        const loadingElement = document.getElementById('loading');
        const iframe = document.getElementById('streamlit-frame');

        // Cek apakah sudah ada URL yang tersimpan di sessionStorage
        let chosenUrl = sessionStorage.getItem('streamlitUrl');

        if (!chosenUrl) {
            // Jika belum ada, pilih server dan simpan ke sessionStorage
            chosenUrl = await chooseServer();
            sessionStorage.setItem('streamlitUrl', chosenUrl);
        }

        // Tampilkan iframe dan sembunyikan loading
        iframe.src = chosenUrl;
        iframe.onload = () => {
            loadingElement.style.display = 'none';
        };
    }

    // Jalankan loadStreamlit saat halaman dimuat
    window.onload = loadStreamlit;
    </script>
</body>
</html>