From 4643efbae04a6c00a1a29be2d96cb7e0dc12c836 Mon Sep 17 00:00:00 2001 From: Isaac Abadi Date: Tue, 16 Mar 2021 22:41:07 -0600 Subject: [PATCH] Added ability to restart the server from the frontend Dockerfile/entrypoint.sh now uses nodemon enabling restarting from the UI in a container --- Dockerfile | 2 +- backend/app.js | 21 ++++++++++++++------- backend/entrypoint.sh | 2 +- backend/package.json | 3 ++- src/app/posts.services.ts | 4 ++++ src/app/settings/settings.component.html | 8 ++++++++ src/app/settings/settings.component.ts | 8 ++++++++ 7 files changed, 38 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 75b22d3..477ca3e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,4 +40,4 @@ COPY --chown=$UID:$GID [ "/backend/", "/app/" ] EXPOSE 17442 ENTRYPOINT [ "/app/entrypoint.sh" ] -CMD [ "node", "app.js" ] +CMD [ "npm", "start" ] diff --git a/backend/app.js b/backend/app.js index 888ccf7..f62d86c 100644 --- a/backend/app.js +++ b/backend/app.js @@ -142,15 +142,17 @@ var timestamp_server_start = Date.now(); if (debugMode) logger.info('YTDL-Material in debug mode!'); // check if just updated -const just_restarted = fs.existsSync('restart.json'); -if (just_restarted) { +const just_updated = fs.existsSync('restart_update.json'); +if (just_updated) { updaterStatus = { updating: false, details: 'Update complete! You are now on ' + CONSTS['CURRENT_VERSION'] } - fs.unlinkSync('restart.json'); + fs.unlinkSync('restart_update.json'); } +if (fs.existsSync('restart_general.json')) fs.unlinkSync('restart_general.json'); + // updates & starts youtubedl (commented out b/c of repo takedown) // startYoutubeDL(); @@ -332,7 +334,7 @@ async function startServer() { }); } -async function restartServer() { +async function restartServer(is_update = false) { const restartProcess = () => { spawn('node', ['app.js'], { detached: true, @@ -340,10 +342,11 @@ async function restartServer() { }).unref() process.exit() } - logger.info('Update complete! Restarting server...'); + + logger.info(`${is_update ? 'Update complete! ' : ''}Restarting server...`); // the following line restarts the server through nodemon - fs.writeFileSync('restart.json', 'internal use only'); + fs.writeFileSync(`restart${is_update ? '_update' : '_general'}.json`, 'internal use only'); } async function updateServer(tag) { @@ -386,7 +389,7 @@ async function updateServer(tag) { updating: true, 'details': 'Update complete! Restarting server...' } - restartServer(); + restartServer(true); }, err => { updaterStatus = { updating: false, @@ -1898,7 +1901,11 @@ app.post('/api/setConfig', optionalJwt, function(req, res) { logger.error('Tried to save invalid config file!') res.sendStatus(400); } +}); +app.post('/api/restartServer', optionalJwt, (req, res) => { + restartServer(); + res.send({success: true}); }); app.post('/api/tomp3', optionalJwt, async function(req, res) { diff --git a/backend/entrypoint.sh b/backend/entrypoint.sh index d32ec93..16c37ce 100755 --- a/backend/entrypoint.sh +++ b/backend/entrypoint.sh @@ -1,7 +1,7 @@ #!/bin/sh set -eu -CMD="node app.js" +CMD="npm start" # if the first arg starts with "-" pass it to program if [ "${1#-}" != "$1" ]; then diff --git a/backend/package.json b/backend/package.json index 862a09c..496159e 100644 --- a/backend/package.json +++ b/backend/package.json @@ -14,7 +14,8 @@ "public/*" ], "watch": [ - "restart.json" + "restart_update.json", + "restart_general.json" ] }, "repository": { diff --git a/src/app/posts.services.ts b/src/app/posts.services.ts index a6c2954..1fd7929 100644 --- a/src/app/posts.services.ts +++ b/src/app/posts.services.ts @@ -199,6 +199,10 @@ export class PostsService implements CanActivate { return this.http.post(this.path + 'killAllDownloads', {}, this.httpOptions); } + restartServer() { + return this.http.post(this.path + 'restartServer', {}, this.httpOptions); + } + loadNavItems() { if (isDevMode()) { return this.http.get('./assets/default.json'); diff --git a/src/app/settings/settings.component.html b/src/app/settings/settings.component.html index a7d69d6..346797c 100644 --- a/src/app/settings/settings.component.html +++ b/src/app/settings/settings.component.html @@ -353,6 +353,14 @@
+ +
+
+
+ +
+
+
diff --git a/src/app/settings/settings.component.ts b/src/app/settings/settings.component.ts index 2ef36fa..0537103 100644 --- a/src/app/settings/settings.component.ts +++ b/src/app/settings/settings.component.ts @@ -255,6 +255,14 @@ export class SettingsComponent implements OnInit { }); } + restartServer() { + this.postsService.restartServer().subscribe(res => { + this.postsService.openSnackBar('Restarting!'); + }, err => { + this.postsService.openSnackBar('Failed to restart the server.'); + }); + } + // snackbar helper public openSnackBar(message: string, action: string = '') { this.snackBar.open(message, action, {