From 76435cc3d287450459f29ea519a41c079092fbff Mon Sep 17 00:00:00 2001 From: Akis Date: Mon, 2 Jan 2023 21:12:06 +0200 Subject: [PATCH] make status api faster, fix donate, add services --- src/app.html | 4 +- src/lib/Card/Link.svelte | 4 ++ src/lib/Card/LinksOuter.svelte | 2 +- src/lib/Nav.svelte | 1 - src/lib/Team.json | 2 +- src/routes/+error.svelte | 3 +- src/routes/api/status/+server.ts | 2 +- src/routes/api/status/statusData.ts | 23 +++++++- src/routes/blog/+page.svelte | 7 ++- src/routes/donate/+page.md | 2 +- src/routes/instances/+page.svelte | 16 ++++- src/routes/instances/InstanceLink.svelte | 72 ++++++++++++++--------- static/icons/akkoma.png | Bin 0 -> 5028 bytes static/icons/vikunja.png | Bin 0 -> 11543 bytes 14 files changed, 97 insertions(+), 41 deletions(-) create mode 100644 static/icons/akkoma.png create mode 100644 static/icons/vikunja.png diff --git a/src/app.html b/src/app.html index c4092d6..e6490df 100644 --- a/src/app.html +++ b/src/app.html @@ -12,7 +12,7 @@ /> %sveltekit.head% - - %sveltekit.body% + +
%sveltekit.body%
diff --git a/src/lib/Card/Link.svelte b/src/lib/Card/Link.svelte index 66e4364..877529c 100644 --- a/src/lib/Card/Link.svelte +++ b/src/lib/Card/Link.svelte @@ -42,4 +42,8 @@ .githubcolored { @apply bg-alt text-alt-text; } + + .torcolored { + @apply bg-[#7d4698] text-white; + } diff --git a/src/lib/Card/LinksOuter.svelte b/src/lib/Card/LinksOuter.svelte index 71cc61f..5093e26 100644 --- a/src/lib/Card/LinksOuter.svelte +++ b/src/lib/Card/LinksOuter.svelte @@ -1,3 +1,3 @@ -
+
diff --git a/src/lib/Nav.svelte b/src/lib/Nav.svelte index f307c87..e2fd389 100644 --- a/src/lib/Nav.svelte +++ b/src/lib/Nav.svelte @@ -84,7 +84,6 @@ > {#each menus as { url, name, external }} -

{$page.status}: {$page.error?.message}

-The fetch request to the API probably failed, please contact us on Matrix. \ No newline at end of file +

{$page.status}: {$page.error?.message}

\ No newline at end of file diff --git a/src/routes/api/status/+server.ts b/src/routes/api/status/+server.ts index 4aea238..98464b9 100644 --- a/src/routes/api/status/+server.ts +++ b/src/routes/api/status/+server.ts @@ -12,7 +12,7 @@ const updateMap = () => { updateMap(); -setInterval(updateMap, 30000); +setInterval(updateMap, 60000); export const GET = (() => { const data = map.get("data"); diff --git a/src/routes/api/status/statusData.ts b/src/routes/api/status/statusData.ts index 8b8902d..2cd1f3b 100644 --- a/src/routes/api/status/statusData.ts +++ b/src/routes/api/status/statusData.ts @@ -1,7 +1,7 @@ import axios from "axios"; const fetchStatus = (domain: string) => { - const req = axios("https://" + domain, { timeout: 10000 }) + const req = axios("https://" + domain, { timeout: 5000 }) .then((res) => res.status) .catch((error) => error.response ? error.response.status : 500); @@ -18,6 +18,7 @@ const statusData = [ eu: "https://invidious.projectsegfau.lt/", us: "https://inv.us.projectsegfau.lt", bp: "https://inv.bp.projectsegfau.lt", + torBp: "http://invbp.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion", icon: "/icons/invidious.svg", statusEu: await fetchStatus("invidious.projectsegfau.lt"), statusUs: await fetchStatus("inv.us.projectsegfau.lt"), @@ -28,6 +29,7 @@ const statusData = [ description: "A frontend for Odysee.", eu: "https://lbry.projectsegfau.lt/", geo: "https://lbry.g.projectsegfau.lt/", + tor: "http://lbry.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion", icon: "/icons/librarian.png", statusEu: await fetchStatus("lbry.projectsegfau.lt"), statusGeo: await fetchStatus("lbry.g.projectsegfau.lt") @@ -38,6 +40,7 @@ const statusData = [ eu: "https://libreddit.projectsegfau.lt/", us: "https://libreddit.us.projectsegfau.lt", geo: "https://libreddit.g.projectsegfau.lt/", + tor: "http://libreddit.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion", icon: "/icons/libreddit.png", statusEu: await fetchStatus("libreddit.projectsegfau.lt"), statusUs: await fetchStatus("libreddit.us.projectsegfau.lt"), @@ -49,6 +52,7 @@ const statusData = [ eu: "https://nitter.projectsegfau.lt/", us: "https://nitter.us.projectsegfau.lt", geo: "https://nitter.g.projectsegfau.lt/", + tor: "http://nitter.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion", icon: "/icons/nitter.png", statusEu: await fetchStatus("nitter.projectsegfau.lt"), statusUs: await fetchStatus("nitter.us.projectsegfau.lt"), @@ -69,6 +73,7 @@ const statusData = [ eu: "https://bb.eu.projectsegfau.lt/", us: "https://bb.us.projectsegfau.lt/", geo: "https://bb.g.projectsegfau.lt/", + tor: "http://beatbump.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion", icon: "/icons/beatbump.svg", statusEu: await fetchStatus("bb.eu.projectsegfau.lt"), statusUs: await fetchStatus("bb.us.projectsegfau.lt"), @@ -80,6 +85,7 @@ const statusData = [ eu: "https://bw.eu.projectsegfau.lt/", us: "https://bw.us.projectsegfau.lt/", geo: "https://bw.g.projectsegfau.lt/", + tor: "http://breezewiki.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion", icon: "/icons/breezewiki.svg", statusEu: await fetchStatus("bw.eu.projectsegfau.lt"), statusUs: await fetchStatus("bw.us.projectsegfau.lt"), @@ -91,6 +97,7 @@ const statusData = [ eu: "https://scribe.eu.projectsegfau.lt/", us: "https://scribe.us.projectsegfau.lt/", geo: "https://scribe.g.projectsegfau.lt/", + tor: "http://scribe.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion", statusEu: await fetchStatus("scribe.eu.projectsegfau.lt"), statusUs: await fetchStatus("scribe.us.projectsegfau.lt"), statusGeo: await fetchStatus("scribe.g.projectsegfau.lt") @@ -123,6 +130,20 @@ const statusData = [ eu: "https://git.projectsegfau.lt/", icon: "/icons/gitea.png", statusEu: await fetchStatus("git.projectsegfau.lt") + }, + { + name: "Akkoma", + description: "Federated microblogging platform.", + eu: "https://social.projectsegfau.lt/", + icon: "/icons/akkoma.png", + statusEu: await fetchStatus("social.projectsegfau.lt") + }, + { + name: "Vikunja", + description: "A task management platform.", + eu: "https://todo.projectsegfau.lt/", + icon: "/icons/vikunja.png", + statusEu: await fetchStatus("todo.projectsegfau.lt") } ] }, diff --git a/src/routes/blog/+page.svelte b/src/routes/blog/+page.svelte index 374b0ed..c118c8b 100644 --- a/src/routes/blog/+page.svelte +++ b/src/routes/blog/+page.svelte @@ -31,9 +31,14 @@ title="Authors" icon="i-fa6-solid:user" /> +
- {#each data.posts as post} diff --git a/src/routes/donate/+page.md b/src/routes/donate/+page.md index d6f2166..500338f 100644 --- a/src/routes/donate/+page.md +++ b/src/routes/donate/+page.md @@ -16,7 +16,7 @@ title: Donate These donations primarily help us pay for our VPSes, domain names and other expenses related to crucial infrastructure we have to maintain. We also sometimes donate to developers who maintain software we rely heavily on such as our authentication provider. ## Donation methods -You can currently donate by credit card through [Liberapay](https://liberaypay.com) and cryptocurrencies. +You can currently donate by credit card through [Liberapay](https://liberapay.com) and cryptocurrencies. ### Credit card diff --git a/src/routes/instances/+page.svelte b/src/routes/instances/+page.svelte index 3e74c2c..c859843 100644 --- a/src/routes/instances/+page.svelte +++ b/src/routes/instances/+page.svelte @@ -1,5 +1,5 @@ - -
-
- - {#if item !== 200} - ({item}) +{#if type === "tor" || type === "torBp"} + +
+
+ {#if type === "torBp"} + Backup {/if} - {#if type === "geo"} - GeoDNS - {:else if type === "eu"} - EU - {:else if type === "us"} - US - {:else if type === "backup"} - Backup - {/if} - -
- +
+ +{:else} + +
+
+ + {#if item !== 200} + ({item}) + {/if} + {#if type === "geo"} + GeoDNS + {:else if type === "eu"} + EU + {:else if type === "us"} + US + {:else if type === "backup"} + Backup + {/if} + +
+ +{/if} \ No newline at end of file diff --git a/static/icons/akkoma.png b/static/icons/akkoma.png new file mode 100644 index 0000000000000000000000000000000000000000..1a12b4ad8acebcd289c638c37e532c6e84584382 GIT binary patch literal 5028 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 JPDHLkV1n*A4WR%4 literal 0 HcmV?d00001