mirror of
https://github.com/MarSeventh/CloudFlare-ImgBed.git
synced 2026-04-27 23:55:01 +00:00
100 lines
3.2 KiB
JavaScript
100 lines
3.2 KiB
JavaScript
import sentryPlugin from "@cloudflare/pages-plugin-sentry";
|
|
import '@sentry/tracing';
|
|
|
|
export async function errorHandling(context) {
|
|
const env = context.env;
|
|
if (typeof env.disable_telemetry == "undefined" || env.disable_telemetry == null || env.disable_telemetry == "") {
|
|
context.data.telemetry = true;
|
|
let remoteSampleRate = 0.001;
|
|
try {
|
|
const sampleRate = await fetchSampleRate(context)
|
|
//check if the sample rate is not null
|
|
if (sampleRate) {
|
|
remoteSampleRate = sampleRate;
|
|
}
|
|
} catch (e) { console.log(e) }
|
|
const sampleRate = env.sampleRate || remoteSampleRate;
|
|
return sentryPlugin({
|
|
dsn: "https://44b7b443108ec6d298044b125ff89d28@o4507644548022272.ingest.us.sentry.io/4507644555100160",
|
|
tracesSampleRate: sampleRate,
|
|
})(context);;
|
|
}
|
|
return context.next();
|
|
}
|
|
|
|
export function telemetryData(context) {
|
|
const env = context.env;
|
|
if (typeof env.disable_telemetry == "undefined" || env.disable_telemetry == null || env.disable_telemetry == "") {
|
|
try {
|
|
const parsedHeaders = {};
|
|
context.request.headers.forEach((value, key) => {
|
|
parsedHeaders[key] = value
|
|
//check if the value is empty
|
|
if (value.length > 0) {
|
|
context.data.sentry.setTag(key, value);
|
|
}
|
|
});
|
|
const CF = JSON.parse(JSON.stringify(context.request.cf));
|
|
const parsedCF = {};
|
|
for (const key in CF) {
|
|
if (typeof CF[key] == "object") {
|
|
parsedCF[key] = JSON.stringify(CF[key]);
|
|
} else {
|
|
parsedCF[key] = CF[key];
|
|
if (CF[key].length > 0) {
|
|
context.data.sentry.setTag(key, CF[key]);
|
|
}
|
|
}
|
|
}
|
|
const data = {
|
|
headers: parsedHeaders,
|
|
cf: parsedCF,
|
|
url: context.request.url,
|
|
method: context.request.method,
|
|
redirect: context.request.redirect,
|
|
}
|
|
//get the url path
|
|
const urlPath = new URL(context.request.url).pathname;
|
|
const hostname = new URL(context.request.url).hostname;
|
|
context.data.sentry.setTag("path", urlPath);
|
|
context.data.sentry.setTag("url", data.url);
|
|
context.data.sentry.setTag("method", context.request.method);
|
|
context.data.sentry.setTag("redirect", context.request.redirect);
|
|
context.data.sentry.setContext("request", data);
|
|
const transaction = context.data.sentry.startTransaction({ name: `${context.request.method} ${hostname}` });
|
|
//add the transaction to the context
|
|
context.data.transaction = transaction;
|
|
return context.next();
|
|
} catch (e) {
|
|
console.log(e);
|
|
} finally {
|
|
context.data.transaction.finish();
|
|
}
|
|
}
|
|
return context.next();
|
|
}
|
|
|
|
export async function traceData(context, span, op, name) {
|
|
const data = context.data
|
|
if (data.telemetry) {
|
|
if (span) {
|
|
console.log("span finish")
|
|
span.finish();
|
|
} else {
|
|
console.log("span start")
|
|
span = await context.data.transaction.startChild(
|
|
{ op: op, name: name },
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
async function fetchSampleRate(context) {
|
|
const data = context.data
|
|
if (data.telemetry) {
|
|
const url = "https://frozen-sentinel.pages.dev/signal/sampleRate.json";
|
|
const response = await fetch(url);
|
|
const json = await response.json();
|
|
return json.rate;
|
|
}
|
|
} |