Skip to content

Commit

Permalink
feat: add logger components (#709)
Browse files Browse the repository at this point in the history
Adds `FifoLoggerProvider`, `FifoLoggerDialog`, `FifoLoggerToolbarItem`, `useFifoLogger`, `useFifoLogs` to the API

Closes: #449
  • Loading branch information
stropitek committed Apr 12, 2024
1 parent 69ba0eb commit 30b6212
Show file tree
Hide file tree
Showing 22 changed files with 355 additions and 114 deletions.
17 changes: 17 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
"peerDependencies": {
"@blueprintjs/core": "^5.3.2",
"@blueprintjs/icons": "^5.1.7",
"fifo-logger": "^1.0.0",
"react": ">=18.0.0",
"react-dom": ">=18.0.0"
},
Expand Down Expand Up @@ -128,6 +129,7 @@
"eslint": "^8.57.0",
"eslint-config-zakodium": "^8.1.0",
"eslint-plugin-storybook": "^0.8.0",
"fifo-logger": "^1.0.0",
"prettier": "^3.2.5",
"react": "^18.2.0",
"react-dom": "^18.2.0",
Expand Down
11 changes: 6 additions & 5 deletions src/app-data/loaders/biologicLoader.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { parseMPR, parseMPT } from 'biologic-converter';
import type { MeasurementVariable } from 'cheminfo-types';
import type { FifoLogger } from 'fifo-logger';
import type { FileCollection } from 'filelist-utils';

import type { Measurements, MeasurementBase } from '../index';
import type { MeasurementBase, Measurements } from '../index';

import { getMeasurementInfoFromFile } from './utility/getMeasurementInfoFromFile';
import { createLogEntry, ParserLog } from './utility/parserLog';

/* the MeasurementBase has got a data key,
and inside a variable key, compatible with this type */
Expand All @@ -18,7 +18,7 @@ type MeasurementDataVariable = Record<string, MeasurementVariable>;
*/
export async function biologicLoader(
fileCollection: FileCollection,
logs?: ParserLog[],
logger?: FifoLogger,
): Promise<Partial<Measurements>> {
const measurements: Partial<Measurements> = {};
const entries: MeasurementBase[] = [];
Expand Down Expand Up @@ -67,14 +67,15 @@ export async function biologicLoader(
} catch (error) {
//send error to UI to show to User ?
if (error instanceof Error) {
if (logs) {
logs.push(createLogEntry({ error, relativePath: file.relativePath }));
if (logger) {
logger.error(error);
} else {
throw error;
}
}
}
}
logger?.debug(`Loaded ${entries.length} entries with biologicLoader`);
measurements.iv = { entries };
return measurements;
}
Expand Down
21 changes: 8 additions & 13 deletions src/app-data/loaders/cdfLoader.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
import type { FifoLogger } from 'fifo-logger';
import type { FileCollection } from 'filelist-utils';
import { NetCDFReader } from 'netcdfjs';

import { assert } from '../../components/index';
import type { MeasurementBase, Measurements, MeasurementKind } from '../index';
import type { MeasurementBase, MeasurementKind, Measurements } from '../index';

import { getMeasurementInfoFromFile } from './utility/getMeasurementInfoFromFile';
import { ParserLog, createLogEntry } from './utility/parserLog';

export async function cdfLoader(
fileCollection: FileCollection,
logs?: ParserLog[],
logger?: FifoLogger,
): Promise<Partial<Measurements>> {
const newMeasurements: Partial<Measurements> = {};
let kind: MeasurementKind | undefined;
let count = 0;
for (const file of fileCollection) {
if (/\.cdf$/i.test(file.name)) {
try {
Expand Down Expand Up @@ -57,26 +58,20 @@ export async function cdfLoader(
: chromatogram(reader),
};
newMeasurements[kind]?.entries.push(newMeasurement);
count++;
} catch (error) {
if (error instanceof Error) {
//send error to UI ?
if (logs) {
logs.push(
createLogEntry({
error,
parser: 'cdfLoader',
message: 'error parsing file from cdfLoader',
relativePath: file.relativePath,
}),
);
if (logger) {
logger.error(error);
} else {
throw error;
}
}
}
}
}

logger?.debug(`Loaded ${count} measurements with cdfLoader`);
return newMeasurements;
}

Expand Down
19 changes: 7 additions & 12 deletions src/app-data/loaders/jcampLoader.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import type { FifoLogger } from 'fifo-logger';
import type { FileCollection } from 'filelist-utils';
import { convert } from 'jcampconverter';

import { assert } from '../../components/index';
import type { MeasurementKind, Measurements } from '../index';

import { getMeasurementInfoFromFile } from './utility/getMeasurementInfoFromFile';
import { createLogEntry, ParserLog } from './utility/parserLog';

/**
*
Expand All @@ -15,8 +15,9 @@ import { createLogEntry, ParserLog } from './utility/parserLog';
*/
export async function jcampLoader(
fileCollection: FileCollection,
logs?: ParserLog[],
logger?: FifoLogger,
): Promise<Partial<Measurements>> {
let count = 0;
const newMeasurements: Partial<Measurements> = {};
for (const file of fileCollection) {
if (/(?:\.jdx|\.dx)$/i.test(file.name)) {
Expand Down Expand Up @@ -50,22 +51,15 @@ export async function jcampLoader(
meta: measurement.meta,
data: normalizeSpectra(measurement.spectra),
};
count++;
Object.assign(newMeasurement.info, measurement.info);
newMeasurements[kind]?.entries.push(newMeasurement);
}
}
} catch (error) {
// send error to UI ?
if (error instanceof Error) {
if (logs) {
logs.push(
createLogEntry({
error,
parser: 'jcamp converter',
relativePath: file.relativePath,
message: 'error parsing jdx or dx file',
}),
);
if (logger) {
logger?.error(error);
} else {
throw error;
}
Expand All @@ -74,6 +68,7 @@ export async function jcampLoader(
}
}

logger?.debug(`Loaded ${count} measurements with jcampLoader`);
return newMeasurements;
}

Expand Down
11 changes: 6 additions & 5 deletions src/app-data/loaders/loadMeasurements.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import type { FifoLogger } from 'fifo-logger';
import type { FileCollection } from 'filelist-utils';
import { xMinMaxValues } from 'ml-spectra-processing';

import { Measurements, enhance, Enhancers, MeasurementBase } from '../index';
import { enhance, Enhancers, MeasurementBase, Measurements } from '../index';

import {
MeasurementsLoader,
Expand All @@ -12,20 +13,20 @@ import type { ParserLog } from './utility/parserLog';
export interface LoadOptions {
loaders?: MeasurementsLoader[];
enhancers?: Partial<Enhancers>;
logger?: boolean;
logger?: FifoLogger;
}

export async function loadMeasurements(
fileCollection: FileCollection,
options: LoadOptions = {},
options: LoadOptions,
) {
const measurements: Partial<Measurements> = {};
const logs: ParserLog[] = [];
const { loaders = [], enhancers = {}, logger = true } = options;
const { loaders = [], enhancers = {}, logger } = options;
for (const loader of loaders) {
// TODO: load in parallel

Check warning on line 27 in src/app-data/loaders/loadMeasurements.ts

View workflow job for this annotation

GitHub Actions / nodejs / lint-eslint

Unexpected 'todo' comment: 'TODO: load in parallel'
// eslint-disable-next-line no-await-in-loop
const loaderData = await loader(fileCollection, logger ? logs : undefined);
const loaderData = await loader(fileCollection, logger);
for (const { entries } of Object.values(loaderData)) {
for (const entry of entries) {
computeMinMax(entry);
Expand Down
24 changes: 8 additions & 16 deletions src/app-data/loaders/proprietary/agilent/cary500Loader.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
import type { FileCollectionItem, FileCollection } from 'filelist-utils';
import type { FifoLogger } from 'fifo-logger';
import type { FileCollection, FileCollectionItem } from 'filelist-utils';

import {
Measurements,
MeasurementBase,
getMeasurementInfoFromFile,
ParserLog,
createLogEntry,
MeasurementBase,
Measurements,
} from '../../../index';

export async function cary500Loader(
fileCollection: FileCollection,
logs?: ParserLog[],
logger?: FifoLogger,
): Promise<Partial<Measurements>> {
const newMeasurements: Partial<Measurements> = {};
const entries: MeasurementBase[] = [];
Expand All @@ -26,23 +25,16 @@ export async function cary500Loader(
}
} catch (error) {
if (error instanceof Error) {
if (logs) {
logs.push(
createLogEntry({
kind: 'error',
parser: 'cary500Loader',
message: 'Error parsing cary500 experiment.',
error,
relativePath: file.relativePath,
}),
);
if (logger) {
logger.error(error);
} else {
throw error;
}
}
}
}
}
logger?.debug(`Loaded ${entries.length} entries with cary500Loader`);
newMeasurements.uvvis = { entries };
return newMeasurements;
}
Expand Down
18 changes: 6 additions & 12 deletions src/app-data/loaders/spcLoader.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import type { FifoLogger } from 'fifo-logger';
import type { FileCollection } from 'filelist-utils';
import { parse, guessSpectraType } from 'spc-parser';
import { guessSpectraType, parse } from 'spc-parser';

import { assert } from '../../components/index';
import type { MeasurementKind, Measurements, MeasurementBase } from '../index';
import type { MeasurementBase, MeasurementKind, Measurements } from '../index';

import { getMeasurementInfoFromFile } from './utility/getMeasurementInfoFromFile';
import { ParserLog, createLogEntry } from './utility/parserLog';

/**
*
Expand All @@ -15,7 +15,7 @@ import { ParserLog, createLogEntry } from './utility/parserLog';
*/
export async function spcLoader(
fileCollection: FileCollection,
logs?: ParserLog[],
logger?: FifoLogger,
): Promise<Partial<Measurements>> {
const measurements: Partial<Measurements> = {};
for (const file of fileCollection) {
Expand All @@ -38,14 +38,8 @@ export async function spcLoader(
data: parsed.spectra as unknown as MeasurementBase['data'],
});
} catch (error) {
if (error instanceof Error && logs) {
logs.push(
createLogEntry({
parser: 'spc-parser',
relativePath: file.relativePath,
error,
}),
);
if (error instanceof Error && logger) {
logger.error(error);
} else {
throw error;
}
Expand Down
5 changes: 2 additions & 3 deletions src/app-data/loaders/utility/measurementLoader.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import type { FifoLogger } from 'fifo-logger';
import type { FileCollection } from 'filelist-utils';

import { assert } from '../../../components/index';
import type { MeasurementBase, Measurements } from '../../index';

import type { ParserLog } from './parserLog';

export type MeasurementsLoader = (
fileCollection: FileCollection,
logs?: ParserLog[],
logger?: FifoLogger,
) => Promise<Partial<Measurements>>;

export function mergeMeasurements(
Expand Down
17 changes: 5 additions & 12 deletions src/app-data/loaders/wdfLoader.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { MeasurementVariable } from 'cheminfo-types';
import type { FifoLogger } from 'fifo-logger';
import type { FileCollection } from 'filelist-utils';
import { parse, Wdf } from 'wdf-parser';

import type { Measurements, MeasurementBase } from '../index';
import type { MeasurementBase, Measurements } from '../index';

import { getMeasurementInfoFromFile } from './utility/getMeasurementInfoFromFile';
import { ParserLog, createLogEntry } from './utility/parserLog';

/**
*
Expand All @@ -15,7 +15,7 @@ import { ParserLog, createLogEntry } from './utility/parserLog';
*/
export async function wdfLoader(
fileCollection: FileCollection,
logs?: ParserLog[],
logger?: FifoLogger,
): Promise<Partial<Measurements>> {
const measurements: Partial<Measurements> = {};
const entries: MeasurementBase[] = [];
Expand All @@ -33,15 +33,8 @@ export async function wdfLoader(
});
} catch (error) {
if (error instanceof Error) {
if (logs) {
logs.push(
createLogEntry({
parser: 'wdf',
error,
message: 'error reading wdf file',
relativePath: file.relativePath,
}),
);
if (logger) {
logger.error(error);
} else {
throw error;
}
Expand Down
Loading

0 comments on commit 30b6212

Please sign in to comment.