Few adjustments, mainly to analytics (#10)
This commit is contained in:
parent
3728614109
commit
625124818f
4 changed files with 20 additions and 32 deletions
12
api/index.ts
12
api/index.ts
|
@ -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],
|
||||
};
|
||||
|
|
|
@ -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});
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>
|
||||
)];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue