Skip to content

Commit

Permalink
Feat: Logger added
Browse files Browse the repository at this point in the history
  • Loading branch information
yahu1031 committed Apr 13, 2023
1 parent 156fb6a commit f019ef6
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 24 deletions.
39 changes: 21 additions & 18 deletions src/base/classes/serverpod.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import { join, sep } from 'path';
import * as vscode from 'vscode';
import { parse } from 'yaml';
import { Constants } from '../../utils/constants.util';
import { LogCategory } from '../../utils/enums.util';
import { ExtLogger } from '../../utils/logger.util';
import { Utils } from './../../utils/utils.util';
import { ServerpodInterface } from './../interfaces/serverpod.interface';
import { Flutter } from './flutter.class';
Expand All @@ -17,6 +19,8 @@ export class Serverpod implements ServerpodInterface {
*/
private context: vscode.ExtensionContext;

private logger: ExtLogger = new ExtLogger(LogCategory.serverpod);

/**
* Constructor for the serverpod class
*/
Expand Down Expand Up @@ -151,9 +155,10 @@ export class Serverpod implements ServerpodInterface {
spawn('which', ['docker'], { detached: false }).on('close', async (code) => {
_dockerExists = code === 0;
if (_dockerExists) {
console.log('Docker found');
this.logger.info('🐳 Docker found');
}
else {
this.logger.error('🐳 Docker not found. Please install docker to continue.');
await vscode.window.showErrorMessage('Docker not found. Please install docker to continue.');
_isError = true;
}
Expand All @@ -167,7 +172,7 @@ export class Serverpod implements ServerpodInterface {
vscode.window.showWarningMessage(_dockerExists ? 'Docker is not running. Please start docker and try again.' : 'Looks like you didn\'t install docker.', ...dockerErrorOption).then(async (value) => {
if (!_dockerExists && value === dockerErrorOption[0]) {
const _opened = await vscode.env.openExternal(vscode.Uri.parse('https://www.docker.com/get-started'));
console.log(`${_opened ? 'Opened' : 'Failed to open'} https://www.docker.com/get-started`);
_opened ? this.logger.info('🐳 Opened https://www.docker.com/get-started') : this.logger.error('🐳 Failed to open https://www.docker.com/get-started');
resolve();
} else if ((_dockerExists && value === dockerErrorOption[0]) || (!_dockerExists && dockerErrorOption[1])) {
_isError = true;
Expand All @@ -190,15 +195,14 @@ export class Serverpod implements ServerpodInterface {
});
resolve();
}
console.log(data.toString());
this._channel?.append(data.toString());
});
newProjSpawn.stdout.on('close', async () => {
console.log(`serverpod project creation closed with ${_isError}`);
this.logger.error(`💔 serverpod project creation closed with ${_isError}`);
resolve();
});
newProjSpawn.stderr.on('error', async (err) => {
console.error(err);
this.logger.error(`💔 ${err}`);
this._channel?.append(err.toString());
this._channel?.hide();
reject();
Expand All @@ -207,24 +211,23 @@ export class Serverpod implements ServerpodInterface {
return p;
}).then(async () => {
if (!_isError && existsSync(join(_path, _name!))) {
console.log('serverpod project created');
this.logger.info('✅ serverpod project created');
this._channel?.appendLine('Project created successfully');
console.log(join(_path, _name!));
this.logger.info(join(_path, _name!));
setTimeout(async () => {
await vscode.commands.executeCommand("vscode.openFolder", vscode.Uri.file(join(_path, _name!)));
}, 100);
} else {
console.log('Project creation failed');
this.logger.error('💔 Project creation failed');
this._channel?.appendLine('Project creation failed');
}
return Promise.resolve();
}, () => {
console.error('Failed');
this.logger.error('💔 Project creation failed');
this._channel?.appendLine('Project creation failed');
vscode.window.showErrorMessage('Project creation failed');
return;
});
console.log('Done outside');
return;
}
}
Expand All @@ -235,13 +238,15 @@ export class Serverpod implements ServerpodInterface {
* Starts the serverpod server
* */
async startServerpodServer(): Promise<void> {
console.log('Starting serverpod server ...');
this.logger.info('🌐 Starting serverpod server ...');
if (!this.projPath) {
this.logger.error('💔 Not a serverpod project');
await vscode.window.showErrorMessage('Not a serverpod project');
return;
}
var projNameSplitList = new Utils(this.context).projectPath?.uri.path.split(sep);
if (!projNameSplitList) {
this.logger.error('💔 Not a serverpod project');
await vscode.window.showErrorMessage('Not a serverpod project');
return;
}
Expand Down Expand Up @@ -275,7 +280,7 @@ export class Serverpod implements ServerpodInterface {
_generateSpawn = undefined;
}
if (_generateSpawn) {
console.log('Killing generate spawn');
this.logger.warn('🚩 Killing generate spawn');
process.kill(-_generateSpawn.pid, 'SIGKILL');
}
return true;
Expand Down Expand Up @@ -424,15 +429,13 @@ export class Serverpod implements ServerpodInterface {
*/
envPath.forEach(_p => {
if (_p.endsWith(join('flutter', 'bin')) || _p.endsWith(join('flutter', 'bin', sep))) {
console.log(_p);
this._flutter.setFlutterPath = _p;
}
if (_p.endsWith(join('dart-sdk', 'bin')) || _p.endsWith(join('dart-sdk', 'bin', sep))) {
console.log(_p);
this._flutter.setDartPath = _p;
this.logger.info(`🩵 Flutter path: ${_p}`);
this._flutter.setDartPath = join(_p, 'cache', 'dart-sdk');
this.logger.info(`💙 Dart path: ${this._flutter.dartPath}`);
}
if (Constants.isWindows ? _p.includes(join('pub', 'cache')) : _p.includes('.pub-cache')) {
console.log(_p);
this.logger.info(`🧡 Pub cache path: ${_p}`);
this._flutter.setPubCachePath = _p;
}
});
Expand Down
6 changes: 4 additions & 2 deletions src/base/classes/snippet.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { CancellationToken, CompletionContext, CompletionItem, CompletionList, Disposable, DocumentSelector, languages, Position, TextDocument } from "vscode";
import { LogCategory } from "../../utils/enums.util";
import { ExtLogger } from "../../utils/logger.util";

export class Snippet{
export class Snippet {
static disposableSnippet = (documentSelector: DocumentSelector): Disposable => {
return languages.registerCompletionItemProvider(documentSelector, {
provideCompletionItems: (_document: TextDocument, position: Position, _token: CancellationToken, _context: CompletionContext): CompletionItem[] | CompletionList | undefined => {
console.log('provideCompletionItems triggered for YAML');
new ExtLogger(LogCategory.extension).info('provideCompletionItems triggered for YAML');
if (position.line <= 0) {
return;
}
Expand Down
14 changes: 14 additions & 0 deletions src/base/interfaces/logger.interface.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { LogCategory, LogSeverity } from "../../utils/enums.util";

export interface Logger {
info(message: string, category?: LogCategory): void;
warn(message: any, category?: LogCategory): void;
error(error: any, category?: LogCategory): void;
}

export interface LogMessage {
readonly message: string;
readonly severity: LogSeverity;
readonly category: LogCategory;
toLine(maxLength: number): string;
}
10 changes: 7 additions & 3 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@ import * as vscode from 'vscode';
import { Serverpod } from './base/classes/serverpod.class';
import { Snippet } from './base/classes/snippet';
import { Constants } from './utils/constants.util';
import { LogCategory } from './utils/enums.util';
import { ExtLogger } from './utils/logger.util';

export async function activate(context: vscode.ExtensionContext): Promise<void> {
const logger: ExtLogger = new ExtLogger(LogCategory.extension);
try {
const _serverpod: Serverpod = new Serverpod(context);
await _serverpod.init();
console.log('Congratulations, your extension \'serverpod\' is now active!');
logger.info('🎉 Congratulations, your extension \'serverpod\' is now active!');
const disposableCreate: vscode.Disposable = vscode.commands.registerCommand(Constants.createCommand, async () => await _serverpod.createServerpodFlutterProject());
const disposableGenerate: vscode.Disposable = vscode.commands.registerCommand(Constants.generateCommand, async () => await _serverpod.generateServerpodCode());
const disposableServe: vscode.Disposable = vscode.commands.registerCommand(Constants.serveCommand, async () => await _serverpod.startServerpodServer());
Expand All @@ -29,10 +32,11 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>

export async function deactivate(context: vscode.ExtensionContext): Promise<void> {
const _serverpod: Serverpod = new Serverpod(context);
const logger: ExtLogger = new ExtLogger(LogCategory.extension);
_serverpod.stopServer();
_serverpod.stopGenerating();
context.subscriptions.forEach((subscription: vscode.Disposable) => {
console.log('Disposing ' + subscription);
logger.info('🗑️ Disposing ' + subscription);
});
console.log('Your extension \'serverpod\' is now deactivated!');
logger.info('💀 Your extension \'serverpod\' is now deactivated!');
}
15 changes: 15 additions & 0 deletions src/utils/enums.util.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
export enum LogCategory {
serverpod = 'SERVERPOD',
flutter = 'FLUTTER',
dart = 'DART',
utils = 'UTILS',
terraform = 'TERRAFORM',
extension = 'EXTENSION',
}


export enum LogSeverity {
info,
warn,
error,
}
24 changes: 24 additions & 0 deletions src/utils/logger.util.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { Logger } from "../base/interfaces/logger.interface";
import { LogCategory, LogSeverity } from "./enums.util";

export class ExtLogger implements Logger {


constructor(private category: LogCategory) {
}


private logAppender(message: string, severity: LogSeverity) {
return `${severity === LogSeverity.info ? '\x1b[34mINFO\x1b[0m' : severity === LogSeverity.warn ? '\x1b[33mWARNING\x1b[0m' : '\x1b[31mERROR\x1b[0m'} : [ Serverpod.${this.category} ] - ${message}`;
}

public info(message: string): void {
console.log(this.logAppender(message, LogSeverity.info));
}
public warn(message: any): void {
console.warn(this.logAppender(message, LogSeverity.warn));
}
public error(error: any): void {
console.error(this.logAppender(error, LogSeverity.error));
}
}
4 changes: 3 additions & 1 deletion src/utils/utils.util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import * as os from 'os';
import { join } from 'path';
import * as vscode from 'vscode';
import { Constants } from './constants.util';
import { LogCategory } from './enums.util';
import { ExtLogger } from './logger.util';

export class Utils {

Expand Down Expand Up @@ -62,7 +64,7 @@ export class Utils {
* @returns the error message if the name is not valid or already exists
* */
static killPid(pid: string): string {
console.log("Killing PID " + pid);
new ExtLogger(LogCategory.extension).warn("🚩 Killing PID " + pid);
if (Constants.isWindows) {
return execSync(`taskkill /F /PID ${pid}`, { encoding: "utf-8" });
} else {
Expand Down

0 comments on commit f019ef6

Please sign in to comment.