Few adjustments, mainly to analytics (#10)

This commit is contained in:
Taevas 2025-04-03 15:55:34 +02:00
parent 3728614109
commit 625124818f
4 changed files with 20 additions and 32 deletions

View file

@ -3,10 +3,10 @@ import { github } from "./infos/coding/github";
import { gitlab } from "./infos/coding/gitlab";
import { kitsudev } from "./infos/coding/kitsudev";
import { kitsuclub } from "./infos/fediverse/kitsuclub";
import { osu } from "./infos/gaming/osu";
// import { osu } from "./infos/gaming/osu";
import { speedruncom } from "./infos/gaming/speedruncom";
import { hackthebox } from "./infos/hacking/hackthebox";
import { wanikani } from "./infos/japanese/wanikani";
// import { hackthebox } from "./infos/hacking/hackthebox";
// import { wanikani } from "./infos/japanese/wanikani";
import { anilist } from "./infos/media/anilist";
import { lastfm } from "./infos/media/lastfm";
import { umami } from "./infos/website/umami";
@ -14,9 +14,9 @@ import { umami } from "./infos/website/umami";
const info_routes: Record<string, Handler[]> = {
coding: [github, gitlab, kitsudev],
fediverse: [kitsuclub],
gaming: [osu, speedruncom],
hacking: [hackthebox],
japanese: [wanikani],
gaming: [speedruncom],
// hacking: [hackthebox],
// japanese: [wanikani],
media: [anilist, lastfm],
website: [umami],
};

View file

@ -4,37 +4,23 @@ import { db, getToken } from "../../../database.ts";
export const umami: Handler = async () => {
const token = await getToken(db, "umami");
const api_server = "https://visitors.taevas.xyz/api";
const website_id = "f196d626-e609-4841-9a80-0dc60f523ed5";
const now = new Date();
const response = await fetch(`${api_server}/websites/${website_id}/stats?startAt=${Number(new Date("2025"))}&endAt=${Number(now)}`, {
const sevendaysago = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
const response = await fetch(`${api_server}/websites/${website_id}/stats?startAt=${Number(sevendaysago)}&endAt=${Number(now)}`, {
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${token?.access_token}`
},
});
// From https://github.com/umami-software/api-client/blob/master/src/types.ts
// Not using the package directly because of serious issues I consider it to have
const umami = await response.json() as {
pageviews: { value: number; prev: number };
visitors: { value: number; prev: number };
visits: { value: number; prev: number };
bounces: { value: number; prev: number };
totaltime: { value: number; prev: number };
};
const umami = await response.json() as UmamiInfo;
if (!umami) {
return new Response("Not Found", {status: 404});
}
const info: UmamiInfo = {
pageviews: umami.pageviews.value,
visits: umami.visits.value,
visitors: umami.visitors.value,
totaltime: umami.totaltime.value
};
return Response.json(info, {status: 200});
return Response.json(umami, {status: 200});
};

View file

@ -2,11 +2,13 @@ import React, {useState, useEffect} from "react";
import Website from "../Website.tsx";
import DataHandler from "#parts/DataHandler.tsx";
// From https://github.com/umami-software/api-client/blob/master/src/types.ts
export type UmamiInfo = {
pageviews: number
visits: number
visitors: number
totaltime: number
pageviews: { value: number; prev: number };
visitors: { value: number; prev: number };
visits: { value: number; prev: number };
bounces: { value: number; prev: number };
totaltime: { value: number; prev: number };
} | undefined;
export default function Umami() {
@ -17,7 +19,7 @@ export default function Umami() {
if (data) {
try {
setElements([
<p className="text-left" key={"info"}><b>My website has been <br/>viewed {data.pageviews} times <br/>by {data.visitors} unique visitors!</b></p>
<p className="text-left" key={"info"}>Throughout <b>the last 7 days,</b> my website has been visited <b>{data.visits.value} times!</b></p>,
]);
} catch {
setError(true);

View file

@ -30,8 +30,8 @@ export default function Contact({
/>
<CopyField text="@taevas:matrix.org" imageUrl="assets/logos/matrix.svg"/>
<Translatable
en={<ButtonLink link="https://matrix.to/#/@taevas:matrix.org" text="(matrix.to link)" />}
fr={<ButtonLink link="https://matrix.to/#/@taevas:matrix.org" text="(lien matrix.to)" />}
en={<ButtonLink link="https://matrix.to/#/@taevas:matrix.org" text="matrix.to link" />}
fr={<ButtonLink link="https://matrix.to/#/@taevas:matrix.org" text="lien matrix.to" />}
/>
</div>
)];