Improved network debugging

This commit is contained in:
Tom Moor
2022-10-08 10:08:17 -04:00
parent c8f990018c
commit 051c79d651
3 changed files with 17 additions and 3 deletions

View File

@@ -9,6 +9,7 @@ import Logger from "./Logger";
import download from "./download"; import download from "./download";
import { import {
AuthorizationError, AuthorizationError,
BadGatewayError,
BadRequestError, BadRequestError,
NetworkError, NetworkError,
NotFoundError, NotFoundError,
@@ -101,6 +102,7 @@ class ApiClient {
} }
let response; let response;
const timeStart = window.performance.now();
try { try {
response = await fetchWithRetry(urlToFetch, { response = await fetchWithRetry(urlToFetch, {
@@ -127,6 +129,7 @@ class ApiClient {
} }
} }
const timeEnd = window.performance.now();
const success = response.status >= 200 && response.status < 300; const success = response.status >= 200 && response.status < 300;
if (options.download && success) { if (options.download && success) {
@@ -196,6 +199,12 @@ class ApiClient {
); );
} }
if (response.status === 502) {
throw new BadGatewayError(
`Request to ${urlToFetch} failed in ${timeEnd - timeStart}ms.`
);
}
const err = new RequestError(`Error ${response.status}`); const err = new RequestError(`Error ${response.status}`);
Logger.error("Request failed", err, { Logger.error("Request failed", err, {
...error, ...error,

View File

@@ -12,6 +12,8 @@ export class OfflineError extends ExtendableError {}
export class ServiceUnavailableError extends ExtendableError {} export class ServiceUnavailableError extends ExtendableError {}
export class BadGatewayError extends ExtendableError {}
export class RateLimitExceededError extends ExtendableError {} export class RateLimitExceededError extends ExtendableError {}
export class RequestError extends ExtendableError {} export class RequestError extends ExtendableError {}

View File

@@ -16,10 +16,11 @@ const isProduction = env.ENVIRONMENT === "production";
const koa = new Koa(); const koa = new Koa();
const router = new Router(); const router = new Router();
// serve static assets // serve public assets
koa.use( koa.use(
serve(path.resolve(__dirname, "../../../public"), { serve(path.resolve(__dirname, "../../../public"), {
maxage: 60 * 60 * 24 * 30 * 1000, // 1 month expiry, these assets are mostly static but do not contain a hash
maxAge: 30 * 24 * 60 * 60 * 1000,
}) })
); );
@@ -43,10 +44,12 @@ if (isProduction) {
await send(ctx, pathname, { await send(ctx, pathname, {
root: path.join(__dirname, "../../app/"), root: path.join(__dirname, "../../app/"),
// Hashed static assets get 1 year expiry plus immutable flag
maxAge: 365 * 24 * 60 * 60 * 1000,
immutable: true,
setHeaders: (res) => { setHeaders: (res) => {
res.setHeader("Service-Worker-Allowed", "/"); res.setHeader("Service-Worker-Allowed", "/");
res.setHeader("Access-Control-Allow-Origin", "*"); res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Cache-Control", `max-age=${365 * 24 * 60 * 60}`);
}, },
}); });
} catch (err) { } catch (err) {