Add updated Leafcutter app

This commit is contained in:
Darren Clarke 2023-03-31 08:34:35 +02:00
parent 60f6061d49
commit 38343f4219
10 changed files with 3391 additions and 20 deletions

View file

@ -2,6 +2,7 @@
import { AppProps } from "next/app";
import { SessionProvider } from "next-auth/react";
import { useRouter } from "next/router";
import Head from "next/head";
import { CssBaseline } from "@mui/material";
import { CacheProvider, EmotionCache } from "@emotion/react";
import { CookiesProvider } from "react-cookie";
@ -10,6 +11,7 @@ import { AdapterDateFns } from "@mui/x-date-pickers-pro/AdapterDateFns";
import { LocalizationProvider } from "@mui/x-date-pickers-pro";
import { AppProvider } from "components/AppProvider";
import createEmotionCache from "lib/createEmotionCache";
import Favicon from "images/favicon.ico";
import en from "locales/en.json";
import fr from "locales/fr.json";
import "@fontsource/poppins/400.css";
@ -38,20 +40,25 @@ const LeafcutterWeb = (props: LeafcutterWebProps) => {
const { Component, emotionCache = clientSideEmotionCache, pageProps } = props;
return (
<SessionProvider session={(pageProps as any).session}>
<CacheProvider value={emotionCache}>
<CookiesProvider>
<CssBaseline />
<AppProvider>
<LocalizationProvider dateAdapter={AdapterDateFns}>
<I18n locale={locale} messages={messages[locale]}>
<Component {...pageProps} />
</I18n>
</LocalizationProvider>
</AppProvider>
</CookiesProvider>
</CacheProvider>
</SessionProvider>
<>
<Head>
<link rel="icon" type="image/png" href={Favicon.src} />
</Head>
<SessionProvider session={(pageProps as any).session}>
<CacheProvider value={emotionCache}>
<CookiesProvider>
<CssBaseline />
<AppProvider>
<LocalizationProvider dateAdapter={AdapterDateFns}>
<I18n locale={locale} messages={messages[locale]}>
<Component {...pageProps} />
</I18n>
</LocalizationProvider>
</AppProvider>
</CookiesProvider>
</CacheProvider>
</SessionProvider>
</>
);
};

View file

@ -0,0 +1,53 @@
/* eslint-disable no-restricted-syntax */
import { NextApiRequest, NextApiResponse } from "next";
import { Client } from "@opensearch-project/opensearch";
import { v4 as uuid } from "uuid";
import taxonomy from "config/taxonomy.json";
import unRegions from "config/unRegions.json";
const handler = async (req: NextApiRequest, res: NextApiResponse) => {
const { headers: { authorization }, body: { tickets } } = req;
const baseURL = `https://${process.env.OPENSEARCH_URL}`;
const client = new Client({
node: baseURL,
ssl: {
rejectUnauthorized: false,
},
headers: {
authorization
}
});
const succeeded = [];
const failed = [];
for await (const ticket of tickets) {
const { id } = ticket;
try {
const country = ticket.country[0] ?? "none";
const translatedCountry = taxonomy.country[country]?.display ?? "none";
const countryDetails = unRegions.find((c) => c.name === translatedCountry);
const augmentedTicket = {
...ticket,
region: countryDetails['sub-region']?.toLowerCase().replace(" ", "-") ?? null,
continent: countryDetails.region?.toLowerCase().replace(" ", "-") ?? null,
}
const out = await client.create({
id: uuid(),
index: "sample_tagged_tickets",
refresh: true,
body: augmentedTicket,
});
console.log(out);
succeeded.push(id);
} catch (e) {
console.log(e)
failed.push(id);
}
}
const results = { succeeded, failed };
return res.json(results)
};
export default handler;