mirror of
https://github.com/unraid/api.git
synced 2026-01-01 22:20:05 -06:00
fix(cli): support --log-level for start and restart cmds (#1623)
Resolve #1614 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Start and Restart commands accept a validated --log-level option (now includes "fatal"); chosen level is applied to the running/restarted service and defaults to the LOG_LEVEL environment value when set. * **Documentation** * CLI docs updated to list the --log-level option and allowed levels (including fatal), show LOG_LEVEL as an environment-variable alternative, and include usage examples. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -21,7 +21,14 @@ unraid-api start [--log-level <level>]
|
|||||||
Starts the Unraid API service.
|
Starts the Unraid API service.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
- `--log-level`: Set logging level (trace|debug|info|warn|error)
|
|
||||||
|
- `--log-level`: Set logging level (trace|debug|info|warn|error|fatal)
|
||||||
|
|
||||||
|
Alternative: You can also set the log level using the `LOG_LEVEL` environment variable:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
LOG_LEVEL=trace unraid-api start
|
||||||
|
```
|
||||||
|
|
||||||
### Stop
|
### Stop
|
||||||
|
|
||||||
@@ -36,11 +43,21 @@ Stops the Unraid API service.
|
|||||||
### Restart
|
### Restart
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
unraid-api restart
|
unraid-api restart [--log-level <level>]
|
||||||
```
|
```
|
||||||
|
|
||||||
Restarts the Unraid API service.
|
Restarts the Unraid API service.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
- `--log-level`: Set logging level (trace|debug|info|warn|error|fatal)
|
||||||
|
|
||||||
|
Alternative: You can also set the log level using the `LOG_LEVEL` environment variable:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
LOG_LEVEL=trace unraid-api restart
|
||||||
|
```
|
||||||
|
|
||||||
### Logs
|
### Logs
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -1,9 +1,23 @@
|
|||||||
import { Command, CommandRunner } from 'nest-commander';
|
import { Command, CommandRunner, Option } from 'nest-commander';
|
||||||
|
|
||||||
import { ECOSYSTEM_PATH } from '@app/environment.js';
|
import type { LogLevel } from '@app/core/log.js';
|
||||||
|
import { levels } from '@app/core/log.js';
|
||||||
|
import { ECOSYSTEM_PATH, LOG_LEVEL } from '@app/environment.js';
|
||||||
import { LogService } from '@app/unraid-api/cli/log.service.js';
|
import { LogService } from '@app/unraid-api/cli/log.service.js';
|
||||||
import { PM2Service } from '@app/unraid-api/cli/pm2.service.js';
|
import { PM2Service } from '@app/unraid-api/cli/pm2.service.js';
|
||||||
|
|
||||||
|
export interface LogLevelOptions {
|
||||||
|
logLevel?: LogLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function parseLogLevelOption(val: string, allowedLevels: string[] = [...levels]): LogLevel {
|
||||||
|
const normalized = val.toLowerCase() as LogLevel;
|
||||||
|
if (allowedLevels.includes(normalized)) {
|
||||||
|
return normalized;
|
||||||
|
}
|
||||||
|
throw new Error(`Invalid --log-level "${val}". Allowed: ${allowedLevels.join(', ')}`);
|
||||||
|
}
|
||||||
|
|
||||||
@Command({ name: 'restart', description: 'Restart the Unraid API' })
|
@Command({ name: 'restart', description: 'Restart the Unraid API' })
|
||||||
export class RestartCommand extends CommandRunner {
|
export class RestartCommand extends CommandRunner {
|
||||||
constructor(
|
constructor(
|
||||||
@@ -13,11 +27,12 @@ export class RestartCommand extends CommandRunner {
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
async run(): Promise<void> {
|
async run(_?: string[], options: LogLevelOptions = {}): Promise<void> {
|
||||||
try {
|
try {
|
||||||
this.logger.info('Restarting the Unraid API...');
|
this.logger.info('Restarting the Unraid API...');
|
||||||
|
const env = { LOG_LEVEL: options.logLevel };
|
||||||
const { stderr, stdout } = await this.pm2.run(
|
const { stderr, stdout } = await this.pm2.run(
|
||||||
{ tag: 'PM2 Restart', raw: true },
|
{ tag: 'PM2 Restart', raw: true, extendEnv: true, env },
|
||||||
'restart',
|
'restart',
|
||||||
ECOSYSTEM_PATH,
|
ECOSYSTEM_PATH,
|
||||||
'--update-env'
|
'--update-env'
|
||||||
@@ -40,4 +55,13 @@ export class RestartCommand extends CommandRunner {
|
|||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Option({
|
||||||
|
flags: `--log-level <${levels.join('|')}>`,
|
||||||
|
description: 'log level to use',
|
||||||
|
defaultValue: LOG_LEVEL.toLowerCase(),
|
||||||
|
})
|
||||||
|
parseLogLevel(val: string): LogLevel {
|
||||||
|
return parseLogLevelOption(val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
import { Command, CommandRunner, Option } from 'nest-commander';
|
import { Command, CommandRunner, Option } from 'nest-commander';
|
||||||
|
|
||||||
import type { LogLevel } from '@app/core/log.js';
|
import type { LogLevel } from '@app/core/log.js';
|
||||||
|
import type { LogLevelOptions } from '@app/unraid-api/cli/restart.command.js';
|
||||||
import { levels } from '@app/core/log.js';
|
import { levels } from '@app/core/log.js';
|
||||||
import { ECOSYSTEM_PATH } from '@app/environment.js';
|
import { ECOSYSTEM_PATH, LOG_LEVEL } from '@app/environment.js';
|
||||||
import { LogService } from '@app/unraid-api/cli/log.service.js';
|
import { LogService } from '@app/unraid-api/cli/log.service.js';
|
||||||
import { PM2Service } from '@app/unraid-api/cli/pm2.service.js';
|
import { PM2Service } from '@app/unraid-api/cli/pm2.service.js';
|
||||||
|
import { parseLogLevelOption } from '@app/unraid-api/cli/restart.command.js';
|
||||||
interface StartCommandOptions {
|
|
||||||
'log-level'?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Command({ name: 'start', description: 'Start the Unraid API' })
|
@Command({ name: 'start', description: 'Start the Unraid API' })
|
||||||
export class StartCommand extends CommandRunner {
|
export class StartCommand extends CommandRunner {
|
||||||
@@ -27,17 +25,12 @@ export class StartCommand extends CommandRunner {
|
|||||||
await this.pm2.run({ tag: 'PM2 Delete' }, 'delete', ECOSYSTEM_PATH);
|
await this.pm2.run({ tag: 'PM2 Delete' }, 'delete', ECOSYSTEM_PATH);
|
||||||
}
|
}
|
||||||
|
|
||||||
async run(_: string[], options: StartCommandOptions): Promise<void> {
|
async run(_: string[], options: LogLevelOptions): Promise<void> {
|
||||||
this.logger.info('Starting the Unraid API');
|
this.logger.info('Starting the Unraid API');
|
||||||
await this.cleanupPM2State();
|
await this.cleanupPM2State();
|
||||||
|
const env = { LOG_LEVEL: options.logLevel };
|
||||||
const env: Record<string, string> = {};
|
|
||||||
if (options['log-level']) {
|
|
||||||
env.LOG_LEVEL = options['log-level'];
|
|
||||||
}
|
|
||||||
|
|
||||||
const { stderr, stdout } = await this.pm2.run(
|
const { stderr, stdout } = await this.pm2.run(
|
||||||
{ tag: 'PM2 Start', env, raw: true },
|
{ tag: 'PM2 Start', raw: true, extendEnv: true, env },
|
||||||
'start',
|
'start',
|
||||||
ECOSYSTEM_PATH,
|
ECOSYSTEM_PATH,
|
||||||
'--update-env'
|
'--update-env'
|
||||||
@@ -54,9 +47,9 @@ export class StartCommand extends CommandRunner {
|
|||||||
@Option({
|
@Option({
|
||||||
flags: `--log-level <${levels.join('|')}>`,
|
flags: `--log-level <${levels.join('|')}>`,
|
||||||
description: 'log level to use',
|
description: 'log level to use',
|
||||||
defaultValue: 'info',
|
defaultValue: LOG_LEVEL.toLowerCase(),
|
||||||
})
|
})
|
||||||
parseLogLevel(val: string): LogLevel {
|
parseLogLevel(val: string): LogLevel {
|
||||||
return levels.includes(val as LogLevel) ? (val as LogLevel) : 'info';
|
return parseLogLevelOption(val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user