Skip to content

Commit

Permalink
Upgrade to Magda minion SDK v3
Browse files Browse the repository at this point in the history
  • Loading branch information
t83714 committed Apr 16, 2024
1 parent 82637df commit f2ee73e
Show file tree
Hide file tree
Showing 17 changed files with 2,431 additions and 1,863 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,5 @@ magda-tenant-api/lib/
#typescript
tsconfig.tsbuildinfo

deploy/*/charts
deploy/*/charts
coverage/
5 changes: 0 additions & 5 deletions .mocharc.json

This file was deleted.

21 changes: 13 additions & 8 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
# 3.0.0

- Upgrade nodejs to version 18
- Upgrade to Magda minion SDK v3

# 2.0.0

- Upgrade nodejs to version 14
- Upgrade other dependencies
- Release all artifacts to GitHub Container Registry (instead of docker.io & https://charts.magda.io)
- Upgrade magda-common chart version
- Upgrade api to batch/v1 to be compatible with k8s 1.25 (now requires >=1.21)
- Upgrade nodejs to version 14
- Upgrade other dependencies
- Release all artifacts to GitHub Container Registry (instead of docker.io & https://charts.magda.io)
- Upgrade magda-common chart version
- Upgrade api to batch/v1 to be compatible with k8s 1.25 (now requires >=1.21)

# 1.0.0

- Upgrade dependencies
- Upgrade CI scripts
- Related to https://github.com/magda-io/magda/issues/3229, Use magda-common for docker image related logic
- Upgrade dependencies
- Upgrade CI scripts
- Related to https://github.com/magda-io/magda/issues/3229, Use magda-common for docker image related logic
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:14-alpine
FROM node:18-alpine

RUN mkdir -p /usr/src/app
COPY . /usr/src/app
Expand Down
46 changes: 35 additions & 11 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "@magda/minion-broken-link",
"description": "MAGDA Broken Link Minion",
"version": "2.0.0",
"type": "module",
"scripts": {
"prebuild": "rimraf dist tsconfig.tsbuildinfo",
"build": "yarn run compile",
Expand All @@ -11,7 +12,7 @@
"dev": "run-typescript-in-nodemon src/index.ts",
"docker-build-local": "create-docker-context-for-node-component --build --push --tag auto --local",
"docker-build-prod": "create-docker-context-for-node-component --build --push --tag auto",
"test": "mocha",
"test": "c8 mocha",
"helm-lint": "helm lint deploy/magda-minion-broken-link -f deploy/test-deploy.yaml",
"retag-and-push": "retag-and-push",
"helm-docs": "helm-docs -t ./README.md.gotmpl -o ../../README.md",
Expand All @@ -23,39 +24,59 @@
"author": "",
"license": "Apache-2.0",
"devDependencies": {
"@magda/arbitraries": "^2.1.1",
"@magda/arbitraries": "^3.0.2-alpha.0",
"@magda/ci-utils": "^1.0.5",
"@magda/docker-utils": "^2.1.1",
"@magda/docker-utils": "^3.0.2-alpha.0",
"@types/chai": "^4.3.3",
"@types/ftp": "^0.3.29",
"@types/lodash": "^4.14.185",
"@types/lru-cache": "4.0.0",
"@types/mocha": "^9.1.1",
"@types/nock": "^11.1.0",
"@types/node": "^18.19.31",
"@types/read-pkg-up": "^3.0.1",
"@types/request": "^2.48.1",
"@types/sinon": "^7.5.1",
"@types/urijs": "^1.19.19",
"ajv": "^6.10.2",
"chai": "^4.2.0",
"c8": "^9.0.0",
"chai": "^5.0.0-rc.0",
"husky": "^3.1.0",
"jsverify": "^0.8.2",
"mocha": "^10.0.0",
"nock": "^13.2.9",
"mocha": "^10.2.0",
"nock": "^13.4.0",
"prettier": "^1.19.1",
"pretty-quick": "^2.0.1",
"rimraf": "^3.0.0",
"sinon": "^8.1.1",
"ts-node": "^10.9.1",
"typescript": "^4.2.4"
"tsx": "^4.7.0",
"typescript": "^5.3.3"
},
"mocha": {
"import": "tsx/esm",
"spec": [
"src/test/**/*.spec.ts"
]
},
"c8": {
"all": true,
"clean": true,
"src": [
"./src"
],
"exclude": [
"src/test/**"
]
},
"dependencies": {
"@magda/minion-sdk": "^2.1.1",
"@magda/registry-aspects": "^2.1.1",
"@magda/utils": "^2.1.1",
"@magda/minion-sdk": "^3.0.2-alpha.0",
"@magda/registry-aspects": "^3.0.2-alpha.0",
"@magda/utils": "^3.0.2-alpha.0",
"ftp": "^0.3.10",
"lodash": "^4.17.4",
"lru-cache": "4.0.2",
"read-pkg-up": "^3.0.0",
"request": "^2.88.2",
"urijs": "^1.19.11"
},
"config": {
Expand All @@ -77,5 +98,8 @@
"hooks": {
"pre-commit": "pretty-quick --staged"
}
},
"engines": {
"node": ">=18.19.0"
}
}
File renamed without changes.
146 changes: 72 additions & 74 deletions src/HttpRequests.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
import { CoreOptions } from "request";
import { request } from "@magda/utils";
import request from "./request.js";
import http from "http";
import DevNull from "./DevNull";
import DevNull from "./DevNull.js";

/**
* Depends on statusCode, determine a request is failed or not
* @param response http.IncomingMessage
*/
function processResponse(response: http.IncomingMessage) {
if (
(response.statusCode >= 200 && response.statusCode <= 299) ||
response.statusCode === 429
) {
return response.statusCode;
} else {
throw new BadHttpResponseError(
response.statusMessage,
response,
response.statusCode
);
}
if (
(response.statusCode >= 200 && response.statusCode <= 299) ||
response.statusCode === 429
) {
return response.statusCode;
} else {
throw new BadHttpResponseError(
response.statusMessage,
response,
response.statusCode
);
}
}

/**
Expand All @@ -28,10 +28,10 @@ function processResponse(response: http.IncomingMessage) {
* @param url String: url to be tested
*/
export async function headRequest(
url: string,
requestOpts: CoreOptions = {}
url: string,
requestOpts: CoreOptions = {}
): Promise<number> {
return doRequest(url, "head", requestOpts);
return doRequest(url, "head", requestOpts);
}

/**
Expand All @@ -40,15 +40,15 @@ export async function headRequest(
* @param url String: url to be tested
*/
export async function getRequest(
url: string,
requestOpts: CoreOptions = {}
url: string,
requestOpts: CoreOptions = {}
): Promise<number> {
return doRequest(url, "get", {
...requestOpts,
headers: {
Range: "bytes=0-50"
}
});
return doRequest(url, "get", {
...requestOpts,
headers: {
Range: "bytes=0-50"
}
});
}

/**
Expand All @@ -57,66 +57,64 @@ export async function getRequest(
* @param url String: url to be tested
*/
export async function doRequest(
url: string,
method: "get" | "head",
requestOpts: CoreOptions = {}
url: string,
method: "get" | "head",
requestOpts: CoreOptions = {}
): Promise<number> {
const devnull = new DevNull();
console.info(`${method} ${url}`);
const devnull = new DevNull();
console.info(`${method} ${url}`);

let resolveResponse: (number: number) => void;
let resolveStreamEnd: (v?: any) => void;
let rejectResponse: (error: Error) => void;
let rejectStreamEnd: (error: Error) => void;
let resolveResponse: (number: number) => void;
let resolveStreamEnd: (v?: any) => void;
let rejectResponse: (error: Error) => void;
let rejectStreamEnd: (error: Error) => void;

const reqPromise: Promise<number> = new Promise((resolve, reject) => {
resolveResponse = resolve;
rejectResponse = reject;
});
const reqPromise: Promise<number> = new Promise((resolve, reject) => {
resolveResponse = resolve;
rejectResponse = reject;
});

const streamPromise = new Promise((resolve, reject) => {
rejectStreamEnd = reject;
resolveStreamEnd = resolve;
});
const streamPromise = new Promise((resolve, reject) => {
rejectStreamEnd = reject;
resolveStreamEnd = resolve;
});

const req = request[method](url, requestOpts)
.on("error", err => rejectResponse(err))
.on("response", (response: http.IncomingMessage) => {
try {
console.info(
`Got ${response.statusCode} from ${method} ${url}`
);
const req = request[method](url, requestOpts)
.on("error", (err: Error) => rejectResponse(err))
.on("response", (response: http.IncomingMessage) => {
try {
console.info(`Got ${response.statusCode} from ${method} ${url}`);

resolveResponse(processResponse(response));
} catch (e) {
rejectResponse(e as Error);
}
})
.on("end", () => {
resolveStreamEnd();
});
resolveResponse(processResponse(response));
} catch (e) {
rejectResponse(e as Error);
}
})
.on("end", () => {
resolveStreamEnd();
});

req.pipe(devnull).on("error", rejectStreamEnd);
req.on("error", rejectStreamEnd);
req.pipe(devnull).on("error", rejectStreamEnd);
req.on("error", rejectStreamEnd);

const [responseCode] = await Promise.all([reqPromise, streamPromise]);
const [responseCode] = await Promise.all([reqPromise, streamPromise]);

return responseCode as number;
return responseCode as number;
}

export class BadHttpResponseError extends Error {
public response: http.IncomingMessage;
public httpStatusCode: number;
public response: http.IncomingMessage;
public httpStatusCode: number;

constructor(
message?: string,
response?: http.IncomingMessage,
httpStatusCode?: number
) {
super(message);
this.message = message;
this.response = response;
this.httpStatusCode = httpStatusCode;
this.stack = new Error().stack;
}
constructor(
message?: string,
response?: http.IncomingMessage,
httpStatusCode?: number
) {
super(message);
this.message = message;
this.response = response;
this.httpStatusCode = httpStatusCode;
this.stack = new Error().stack;
}
}
Loading

0 comments on commit f2ee73e

Please sign in to comment.