11<template >
2- <div v-if =" data.vf" class =" max-w-4xl mx-8 mt-4 md:mx-auto" >
3- <h1 class =" my-4 text-4xl font-semibold text-center" >
4- Stats of the FTTx.gr Database
2+
3+ <div v-if =" data.vf" class =" mx-8 mt-4 max-w-4xl md:mx-auto" >
4+
5+ <h1 class =" my-4 text-center text-4xl font-semibold" >
6+ Stats of the FTTx.gr Database
57 </h1 >
6- <div class =" grid max-w-md grid-cols-1 gap-4 mx-auto md:grid-cols-2" >
8+
9+ <div class =" mx-auto grid max-w-md grid-cols-1 gap-4 md:grid-cols-2" >
10+
711 <div
8- class =" flex flex-col items-center justify-center p-2 border border-red-500 rounded-md bg-red-500/25"
12+ class =" flex flex-col items-center justify-center rounded-md border border-red-500 bg-red-500/25 p-2 "
913 >
10- <h1 class =" py-2 font-bold text-center text-red-500 uppercase" >
11- Vodafone
14+
15+ <h1 class =" py-2 text-center font-bold uppercase text-red-500" >
16+ Vodafone
1217 </h1 >
18+
1319 <img
14- class =" w-6 my-2"
20+ class =" my-2 w-6 "
1521 src =" @/static/img/vf-marker-minified.png"
1622 alt =" Vodafone Cabinets"
1723 />
24+
1825 <span class =" font-semibold" >{{ data.vf }}</span >
26+
1927 </div >
28+
2029 <div
21- class =" flex flex-col items-center justify-center p-2 border border-blue-500 rounded-md bg-blue-500/25"
30+ class =" flex flex-col items-center justify-center rounded-md border border-blue-500 bg-blue-500/25 p-2 "
2231 >
23- <h1 class =" py-2 font-bold text-center text-blue-500 uppercase" >
24- COSMOTE
32+
33+ <h1 class =" py-2 text-center font-bold uppercase text-blue-500" >
34+ COSMOTE
2535 </h1 >
36+
2637 <img
27- class =" w-6 my-2"
38+ class =" my-2 w-6 "
2839 src =" @/static/img/ote-marker-minified.png"
2940 alt =" COSMOTE Cabinets"
3041 />
42+
3143 <span class =" font-semibold" >{{ data.ote }}</span >
44+
3245 </div >
46+
3347 <div
34- class =" flex flex-col items-center justify-center p-2 border border-blue-600 rounded-md bg-blue-600/30"
48+ class =" flex flex-col items-center justify-center rounded-md border border-blue-600 bg-blue-600/30 p-2 "
3549 >
36- <h1 class =" py-2 font-bold text-center text-blue-600 uppercase" >
37- WIND
50+
51+ <h1 class =" py-2 text-center font-bold uppercase text-blue-600" >
52+ WIND
3853 </h1 >
54+
3955 <img
40- class =" w-6 my-2"
56+ class =" my-2 w-6 "
4157 src =" @/static/img/wind-marker-minified.png"
4258 alt =" WIND Cabinets"
4359 />
60+
4461 <span class =" font-semibold" >{{ data.wind }}</span >
62+
4563 </div >
64+
4665 <div
47- class =" flex flex-col items-center justify-center p-2 border border-orange-500 rounded-md bg-orange-500/25"
66+ class =" flex flex-col items-center justify-center rounded-md border border-orange-500 bg-orange-500/25 p-2 "
4867 >
49- <h1 class =" py-2 font-bold text-center text-orange-500 uppercase" >
50- RURAL CONNECT
68+
69+ <h1 class =" py-2 text-center font-bold uppercase text-orange-500" >
70+ RURAL CONNECT
5171 </h1 >
72+
5273 <img
53- class =" w-6 my-2"
74+ class =" my-2 w-6 "
5475 src =" @/static/img/rurcon-marker-minified.png"
5576 alt =" Rural Connect Cabinets"
5677 />
78+
5779 <span class =" font-semibold" >{{ data.rurcon }}</span >
80+
5881 </div >
82+
5983 <div
60- class =" flex flex-col items-center justify-center p-2 border border-gray-500 rounded-md bg-gray-500/25"
84+ class =" flex flex-col items-center justify-center rounded-md border border-gray-500 bg-gray-500/25 p-2 "
6185 >
62- <h1 class =" py-2 font-bold text-center text-gray-500 uppercase" >
63- UNKNOWN
86+
87+ <h1 class =" py-2 text-center font-bold uppercase text-gray-500" >
88+ UNKNOWN
6489 </h1 >
65- <img class =" w-6 my-2" src =" @/static/img/g-marker.png" alt =" Unknown" />
90+
91+ <img class =" my-2 w-6" src =" @/static/img/g-marker.png" alt =" Unknown" />
92+
6693 <span class =" font-semibold" >{{ data.unknown }}</span >
94+
6795 </div >
96+
6897 <div
69- class =" flex flex-col items-center justify-center p-2 border rounded-md bg-sky-500/25 border-sky-500 "
98+ class =" flex flex-col items-center justify-center rounded-md border border-sky-500 bg-sky-500/25 p-2 "
7099 >
71- <h1 class =" py-2 font-bold text-center uppercase text-sky-500" >
72- CENTERS
100+
101+ <h1 class =" py-2 text-center font-bold uppercase text-sky-500" >
102+ CENTERS
73103 </h1 >
104+
74105 <img
75- class =" w-6 my-2"
106+ class =" my-2 w-6 "
76107 src =" @/static/img/ote-marker-center-minified.png"
77108 alt =" A.K Centers"
78109 />
110+
79111 <span class =" font-semibold" >{{ data.centers }}</span >
112+
80113 </div >
81- <div class =" flex justify-between col-span-full" >
114+
115+ <div class =" col-span-full flex justify-between" >
116+
82117 <div >
83- ADSL: <span class =" font-semibold" >{{ data.adsl }}</span >
118+ ADSL:
119+ <span class =" font-semibold" >{{ data.adsl }}</span >
120+
84121 </div >
122+
85123 <div >
86- VDSL: <span class =" font-semibold" >{{ data.vdsl }}</span >
124+ VDSL:
125+ <span class =" font-semibold" >{{ data.vdsl }}</span >
126+
87127 </div >
128+
88129 <div >
89- FTTH: <span class =" font-semibold" >{{ data.ftth }}</span >
130+ FTTH:
131+ <span class =" font-semibold" >{{ data.ftth }}</span >
132+
90133 </div >
134+
91135 </div >
136+
92137 </div >
138+
93139 </div >
140+
94141</template >
95142
96143<script >
97144import { supabase } from " @/utils/supabase-client" ;
145+ import LRU from " lru-cache" ;
146+
147+ const options = {
148+ max: 500 ,
149+ ttl: 1000 * 60 * 60 * 2
150+ };
151+
152+ const cache = new LRU (options);
98153export default {
99154 data () {
100155 return {
101156 data: null
102157 };
103158 },
104159 async fetch () {
160+ const check = cache .get (" stats" );
161+ if (check) return (this .data = check);
162+
105163 const { data } = await supabase
106164 .from (" cabinets" )
107165 .select (" *" , { count: " exact" });
108166 const { count: centers } = await supabase
109167 .from (" centers" )
110168 .select (" *" , { count: " exact" });
111169
112- this . data = {
170+ const payload = {
113171 vf: data .filter (c => c .isp === " Vodafone" ).length .toLocaleString (),
114172 ote: data .filter (c => c .isp === " OTE" ).length .toLocaleString (),
115173 rurcon: data
@@ -122,8 +180,11 @@ export default {
122180 adsl: data .filter (c => c .type === " ADSL" ).length .toLocaleString (),
123181 ftth: data .filter (c => c .type === " FTTH" ).length .toLocaleString ()
124182 };
183+ cache .set (" stats" , payload);
184+ this .data = payload;
125185 }
126186};
127187 </script >
128188
129189<style ></style >
190+
0 commit comments