Skip to content

Commit

Permalink
fix(updater): Better error message logging on http errors
Browse files Browse the repository at this point in the history
  • Loading branch information
Hypfer committed Dec 8, 2022
1 parent 90d0060 commit b6e7820
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 14 deletions.
30 changes: 27 additions & 3 deletions backend/lib/updater/lib/UpdaterUtils.js
Expand Up @@ -2,6 +2,7 @@ const fs = require("fs");
const LinuxTools = require("../../utils/LinuxTools");
const os = require("os");
const ValetudoUpdaterError = require("./ValetudoUpdaterError");
const {default: axios} = require("axios");

const SPACE_REQUIRED_REGULAR = 40 * 1024 * 1024;
const SPACE_REQUIRED_UPX = 20 * 1024 * 1024;
Expand Down Expand Up @@ -115,10 +116,10 @@ function storageSurvey() {
}

/**
*
*
* @param {Array<import("./update_provider/ValetudoRelease")>} releases
* @param {string} currentVersion
*
*
* @return {{release: import("./update_provider/ValetudoRelease"), updateRequired: boolean}}
* @throws {ValetudoUpdaterError}
*/
Expand Down Expand Up @@ -153,7 +154,30 @@ function determineReleaseToDownload(releases, currentVersion) {
}
}

/**
*
* @param {string} url
* @param {import("axios").AxiosRequestConfig} options
* @return {Promise<import("axios").AxiosResponse<any>>}
*/
async function get(url, options = {}) {
let response;

try {
response = await axios.get(url, options);
} catch (e) {
if (e.response?.status !== undefined) {
throw new Error(`${e.response.status} - ${e.response.statusText}`);
} else {
throw e;
}
}

return response;
}

module.exports = {
storageSurvey: storageSurvey,
determineReleaseToDownload: determineReleaseToDownload
determineReleaseToDownload: determineReleaseToDownload,
get: get
};
6 changes: 3 additions & 3 deletions backend/lib/updater/lib/steps/ValetudoUpdaterDownloadStep.js
@@ -1,10 +1,10 @@
const axios = require("axios").default;
const crypto = require("crypto");
const fs = require("fs");
const Logger = require("../../../Logger");
const States = require("../../../entities/core/updater");
const ValetudoUpdaterError = require("../ValetudoUpdaterError");
const ValetudoUpdaterStep = require("./ValetudoUpdaterStep");
const {get} = require("../UpdaterUtils");
const {pipeline} = require("stream/promises");

class ValetudoUpdaterDownloadStep extends ValetudoUpdaterStep {
Expand All @@ -15,7 +15,7 @@ class ValetudoUpdaterDownloadStep extends ValetudoUpdaterStep {
* @param {string} options.expectedHash
* @param {string} options.version
* @param {Date} options.releaseTimestamp
*
*
*/
constructor(options) {
super();
Expand All @@ -30,7 +30,7 @@ class ValetudoUpdaterDownloadStep extends ValetudoUpdaterStep {

async execute() {
try {
const downloadResponse = await axios.get(this.downloadUrl, {responseType: "stream"});
const downloadResponse = await get(this.downloadUrl, {responseType: "stream"});
await pipeline(
downloadResponse.data,
fs.createWriteStream(this.downloadPath)
Expand Down
@@ -1,15 +1,15 @@
const ValetudoRelease = require("./ValetudoRelease");
const ValetudoReleaseBinary = require("./ValetudoReleaseBinary");
const ValetudoUpdateProvider = require("./ValetudoUpdateProvider");
const {default: axios} = require("axios");
const {get} = require("../UpdaterUtils");

class GithubValetudoNightlyUpdateProvider extends ValetudoUpdateProvider {

/**
* @return {Promise<Array<import("./ValetudoRelease")>>}
*/
async fetchReleases() {
let rawBranchResponse = await axios.get(GithubValetudoNightlyUpdateProvider.REPO_URL);
let rawBranchResponse = await get(GithubValetudoNightlyUpdateProvider.REPO_URL);

if (
!(
Expand Down Expand Up @@ -67,7 +67,7 @@ class GithubValetudoNightlyUpdateProvider extends ValetudoUpdateProvider {
* @return {Promise<any>}
*/
async fetchManifest() {
let rawManifestResponse = await axios.get(`${GithubValetudoNightlyUpdateProvider.ASSET_BASE_URL}${GithubValetudoNightlyUpdateProvider.MANIFEST_NAME}`);
let rawManifestResponse = await get(`${GithubValetudoNightlyUpdateProvider.ASSET_BASE_URL}${GithubValetudoNightlyUpdateProvider.MANIFEST_NAME}`);

// @ts-ignore
if (!rawManifestResponse.data) {
Expand Down
@@ -1,16 +1,15 @@
const ValetudoRelease = require("./ValetudoRelease");
const ValetudoReleaseBinary = require("./ValetudoReleaseBinary");
const ValetudoUpdateProvider = require("./ValetudoUpdateProvider");
const {default: axios} = require("axios");
const {get} = require("../UpdaterUtils");

class GithubValetudoUpdateProvider extends ValetudoUpdateProvider {

/**
* @return {Promise<Array<import("./ValetudoRelease")>>}
*/
async fetchReleases() {
let rawReleasesResponse = await axios.get(GithubValetudoUpdateProvider.RELEASES_URL);

const rawReleasesResponse = await get(GithubValetudoUpdateProvider.RELEASES_URL);

if (!Array.isArray(rawReleasesResponse?.data)) {
throw new Error("GithubValetudoUpdateProvider: Received invalid releases response");
Expand All @@ -28,7 +27,7 @@ class GithubValetudoUpdateProvider extends ValetudoUpdateProvider {
throw new Error("Missing Github Release URL in Release Metadata");
}

let rawReleaseResponse = await axios.get(release.metaData.githubReleaseUrl);
const rawReleaseResponse = await get(release.metaData.githubReleaseUrl);
let releaseBinaries = [];


Expand All @@ -48,7 +47,7 @@ class GithubValetudoUpdateProvider extends ValetudoUpdateProvider {
throw new Error(`GithubValetudoUpdateProvider: Missing ${GithubValetudoUpdateProvider.MANIFEST_NAME}`);
}

let rawManifestResponse = await axios.get(manifestAsset.browser_download_url);
const rawManifestResponse = await get(manifestAsset.browser_download_url);

// @ts-ignore
if (!rawManifestResponse.data || rawManifestResponse.data.version !== release.version) {
Expand Down

0 comments on commit b6e7820

Please sign in to comment.