diff --git a/src/BinaryDataDecoder.ts b/src/BinaryDataDecoder.ts index 189e949..314f3ab 100644 --- a/src/BinaryDataDecoder.ts +++ b/src/BinaryDataDecoder.ts @@ -18,7 +18,7 @@ * * @author Anatoly Khaytovich */ -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import DBAccess from './DBAccess'; import DBAccessQueryResult from './DBAccessQueryResult'; diff --git a/src/CommentsProcessor.ts b/src/CommentsProcessor.ts index d8fd164..183ddd0 100644 --- a/src/CommentsProcessor.ts +++ b/src/CommentsProcessor.ts @@ -18,7 +18,7 @@ * * @author Anatoly Khaytovich */ -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import DBAccess from './DBAccess'; import DBVendors from './DBVendors'; diff --git a/src/DataChunksProcessor.ts b/src/DataChunksProcessor.ts index 0a60df2..c363dc3 100644 --- a/src/DataChunksProcessor.ts +++ b/src/DataChunksProcessor.ts @@ -18,7 +18,7 @@ * * @author Anatoly Khaytovich */ -import log from './Logger'; +import { log } from './FsOps'; import arrangeColumnsData from './ColumnsDataArranger'; import * as extraConfigProcessor from './ExtraConfigProcessor'; import Conversion from './Conversion'; diff --git a/src/DataLoader.ts b/src/DataLoader.ts index 95f8932..e2516ad 100644 --- a/src/DataLoader.ts +++ b/src/DataLoader.ts @@ -19,7 +19,7 @@ * @author Anatoly Khaytovich */ import * as csvStringify from './CsvStringifyModified'; -import log from './Logger'; +import { log } from './FsOps'; import generateError from './ErrorGenerator'; import Conversion from './Conversion'; import DBAccess from './DBAccess'; diff --git a/src/DataPipeManager.ts b/src/DataPipeManager.ts index 010653c..ceafe7a 100644 --- a/src/DataPipeManager.ts +++ b/src/DataPipeManager.ts @@ -20,7 +20,7 @@ */ import { ChildProcess, fork } from 'child_process'; import * as path from 'path'; -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import generateError from './ErrorGenerator'; import MessageToDataLoader from './MessageToDataLoader'; diff --git a/src/DataPoolManager.ts b/src/DataPoolManager.ts index 4dead1f..de75cb9 100644 --- a/src/DataPoolManager.ts +++ b/src/DataPoolManager.ts @@ -21,7 +21,7 @@ import DBAccess from './DBAccess'; import DBAccessQueryResult from './DBAccessQueryResult'; import DBVendors from './DBVendors'; -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; /** diff --git a/src/DefaultProcessor.ts b/src/DefaultProcessor.ts index 87bc9ed..eefcd66 100644 --- a/src/DefaultProcessor.ts +++ b/src/DefaultProcessor.ts @@ -18,7 +18,7 @@ * * @author Anatoly Khaytovich */ -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import DBAccess from './DBAccess'; import DBVendors from './DBVendors'; diff --git a/src/EnumProcessor.ts b/src/EnumProcessor.ts index d3ba7a2..9269255 100644 --- a/src/EnumProcessor.ts +++ b/src/EnumProcessor.ts @@ -18,7 +18,7 @@ * * @author Anatoly Khaytovich */ -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import DBAccess from './DBAccess'; import DBVendors from './DBVendors'; diff --git a/src/ErrorGenerator.ts b/src/ErrorGenerator.ts index 8bbbe9d..28034c2 100644 --- a/src/ErrorGenerator.ts +++ b/src/ErrorGenerator.ts @@ -19,7 +19,7 @@ * @author Anatoly Khaytovich */ import * as fs from 'fs'; -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; /** diff --git a/src/ForeignKeyProcessor.ts b/src/ForeignKeyProcessor.ts index 6eb8527..1a2ab0f 100644 --- a/src/ForeignKeyProcessor.ts +++ b/src/ForeignKeyProcessor.ts @@ -19,7 +19,7 @@ * @author Anatoly Khaytovich */ import * as migrationStateManager from './MigrationStateManager'; -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import DBAccess from './DBAccess'; import DBVendors from './DBVendors'; diff --git a/src/FsOps.ts b/src/FsOps.ts index 538e7cb..db12d82 100644 --- a/src/FsOps.ts +++ b/src/FsOps.ts @@ -21,7 +21,58 @@ import * as fs from 'fs'; import * as path from 'path'; import Conversion from './Conversion'; -import log from './Logger'; + +/** + * Writes a detailed error message to the "/errors-only.log" file. + */ +export function generateError(conversion: Conversion, message: string, sql: string = ''): Promise { + return new Promise(resolve => { + message += `\n\n\tSQL: ${sql}\n\n`; + const buffer: Buffer = Buffer.from(message, conversion._encoding); + log(conversion, message, undefined, true); + + fs.open(conversion._errorLogsPath, 'a', conversion._0777, (error: Error, fd: number) => { + if (!error) { + fs.write(fd, buffer, 0, buffer.length, null, () => { + fs.close(fd, () => resolve()); + }); + } + }); + }); +} + +/** + * Outputs given log. + * Writes given log to the "/all.log" file. + * If necessary, writes given log to the "/{tableName}.log" file. + */ +export function log(conversion: Conversion, log: string | NodeJS.ErrnoException, tableLogPath?: string, isErrorLog?: boolean): void { + const buffer: Buffer = Buffer.from(`${ log }\n\n`, conversion._encoding); + + if (!isErrorLog) { + console.log(log); + } + + fs.open(conversion._allLogsPath, 'a', conversion._0777, (error: Error, fd: number) => { + if (!error) { + fs.write(fd, buffer, 0, buffer.length, null, () => { + fs.close(fd, () => { + if (tableLogPath) { + fs.open(tableLogPath, 'a', conversion._0777, (error: Error, fd: number) => { + if (!error) { + fs.write(fd, buffer, 0, buffer.length, null, () => { + fs.close(fd, () => { + // Each async function MUST have a callback (according to Node.js >= 7). + }); + }); + } + }); + } + }); + }); + } + }); +} /** * Reads the configuration file. diff --git a/src/IndexAndKeyProcessor.ts b/src/IndexAndKeyProcessor.ts index 3762c22..10de079 100644 --- a/src/IndexAndKeyProcessor.ts +++ b/src/IndexAndKeyProcessor.ts @@ -18,7 +18,7 @@ * * @author Anatoly Khaytovich */ -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import DBAccess from './DBAccess'; import DBVendors from './DBVendors'; diff --git a/src/MigrationStateManager.ts b/src/MigrationStateManager.ts index f6362ea..aa86ca7 100644 --- a/src/MigrationStateManager.ts +++ b/src/MigrationStateManager.ts @@ -21,7 +21,7 @@ import DBAccess from './DBAccess'; import DBAccessQueryResult from './DBAccessQueryResult'; import DBVendors from './DBVendors'; -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; /** diff --git a/src/NullProcessor.ts b/src/NullProcessor.ts index 68212d4..af83101 100644 --- a/src/NullProcessor.ts +++ b/src/NullProcessor.ts @@ -18,7 +18,7 @@ * * @author Anatoly Khaytovich */ -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import DBAccess from './DBAccess'; import DBVendors from './DBVendors'; diff --git a/src/ReportGenerator.ts b/src/ReportGenerator.ts index 097faa5..a1866ca 100644 --- a/src/ReportGenerator.ts +++ b/src/ReportGenerator.ts @@ -18,7 +18,7 @@ * * @author Anatoly Khaytovich */ -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import { EventEmitter } from 'events'; diff --git a/src/SequencesProcessor.ts b/src/SequencesProcessor.ts index 042bb5d..4f624cc 100644 --- a/src/SequencesProcessor.ts +++ b/src/SequencesProcessor.ts @@ -18,7 +18,7 @@ * * @author Anatoly Khaytovich */ -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import DBAccess from './DBAccess'; import DBVendors from './DBVendors'; diff --git a/src/StructureLoader.ts b/src/StructureLoader.ts index 7873384..4ad7100 100644 --- a/src/StructureLoader.ts +++ b/src/StructureLoader.ts @@ -21,7 +21,7 @@ import DBAccess from './DBAccess'; import DBAccessQueryResult from './DBAccessQueryResult'; import DBVendors from './DBVendors'; -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import Table from './Table'; import { createTable } from './TableProcessor'; diff --git a/src/TableProcessor.ts b/src/TableProcessor.ts index 074ea96..e1270fa 100644 --- a/src/TableProcessor.ts +++ b/src/TableProcessor.ts @@ -18,7 +18,7 @@ * * @author Anatoly Khaytovich */ -import log from './Logger'; +import { log } from './FsOps'; import generateError from './ErrorGenerator'; import Conversion from './Conversion'; import DBAccess from './DBAccess'; diff --git a/src/VacuumProcessor.ts b/src/VacuumProcessor.ts index 392d08d..5d52d4f 100644 --- a/src/VacuumProcessor.ts +++ b/src/VacuumProcessor.ts @@ -18,7 +18,7 @@ * * @author Anatoly Khaytovich */ -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import DBAccess from './DBAccess'; import DBVendors from './DBVendors'; diff --git a/src/ViewGenerator.ts b/src/ViewGenerator.ts index 927efae..0142124 100644 --- a/src/ViewGenerator.ts +++ b/src/ViewGenerator.ts @@ -21,7 +21,7 @@ import * as fs from 'fs'; import { Stats } from 'fs'; import * as path from 'path'; -import log from './Logger'; +import { log } from './FsOps'; import Conversion from './Conversion'; import * as migrationStateManager from './MigrationStateManager'; import DBAccess from './DBAccess';