Update claritas integration to support large result sets.
The output is now pulled from a json file.
This commit is contained in:
Binary file not shown.
6
package-lock.json
generated
6
package-lock.json
generated
@@ -1408,9 +1408,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"typescript": {
|
"typescript": {
|
||||||
"version": "3.9.6",
|
"version": "3.9.7",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz",
|
||||||
"integrity": "sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==",
|
"integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"universalify": {
|
"universalify": {
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
"@typescript-eslint/parser": "^3.6.1",
|
"@typescript-eslint/parser": "^3.6.1",
|
||||||
"eslint": "^7.4.0",
|
"eslint": "^7.4.0",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"typescript": "^3.9.6"
|
"typescript": "^3.9.7"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.19.2",
|
"axios": "^0.19.2",
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ export abstract class ModuleStructure extends BaseModelStructure<Module> {
|
|||||||
|
|
||||||
protected async invokeClaritas(moduleCandidates: ModuleCandidate[]): Promise<void> {
|
protected async invokeClaritas(moduleCandidates: ModuleCandidate[]): Promise<void> {
|
||||||
if(this.getClaritasType() != null) {
|
if(this.getClaritasType() != null) {
|
||||||
const claritasExecutor = new ClaritasWrapper()
|
const claritasExecutor = new ClaritasWrapper(this.absoluteRoot)
|
||||||
|
|
||||||
let claritasCandidates = moduleCandidates
|
let claritasCandidates = moduleCandidates
|
||||||
const exceptionCandidates: [ModuleCandidate, ClaritasException][] = []
|
const exceptionCandidates: [ModuleCandidate, ClaritasException][] = []
|
||||||
|
|||||||
@@ -1,20 +1,36 @@
|
|||||||
import { JarExecutor } from './JarExecutor'
|
import { JarExecutor } from './JarExecutor'
|
||||||
import { join } from 'path'
|
import { join, resolve } from 'path'
|
||||||
import { ClaritasResult } from '../../model/claritas/ClaritasResult'
|
import { ClaritasResult } from '../../model/claritas/ClaritasResult'
|
||||||
import { MinecraftVersion } from '../MinecraftVersion'
|
import { MinecraftVersion } from '../MinecraftVersion'
|
||||||
import { LibraryType } from '../../model/claritas/ClaritasLibraryType'
|
import { LibraryType } from '../../model/claritas/ClaritasLibraryType'
|
||||||
|
import { pathExists, remove, readFile } from 'fs-extra'
|
||||||
|
|
||||||
export class ClaritasWrapper extends JarExecutor<ClaritasResult> {
|
export class ClaritasWrapper extends JarExecutor<ClaritasResult> {
|
||||||
|
|
||||||
constructor() {
|
private readonly WORK_DIR: string
|
||||||
|
private readonly OUTPUT_FILE: string
|
||||||
|
|
||||||
|
constructor(cwd: string) {
|
||||||
super('Claritas')
|
super('Claritas')
|
||||||
this.stdoutListeners.push((data) => {
|
|
||||||
const clean = data.toString('utf8').trim() as string
|
this.WORK_DIR = resolve(cwd, 'claritasWork')
|
||||||
const spike = 'results::'
|
this.OUTPUT_FILE = resolve(this.WORK_DIR, 'claritasOutput.json')
|
||||||
if(clean.startsWith(spike)) {
|
|
||||||
this.lastExecutionResult = JSON.parse(clean.substr(spike.length)) as ClaritasResult
|
this.onCloseListeners.push(async (code) => {
|
||||||
|
if(code !== 0) {
|
||||||
|
this.logger.error('Claritas finished with non-zero exit code, ', code)
|
||||||
|
this.lastExecutionResult = undefined!
|
||||||
|
} else {
|
||||||
|
if(pathExists(this.OUTPUT_FILE)) {
|
||||||
|
this.lastExecutionResult = JSON.parse((await readFile(this.OUTPUT_FILE)).toString('utf8'))
|
||||||
|
} else {
|
||||||
|
this.logger.error('Claritas output file not found when exit code is 0, is this a bug?')
|
||||||
|
this.lastExecutionResult = undefined!
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
await this.cleanOutput()
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected getJarPath(): string {
|
protected getJarPath(): string {
|
||||||
@@ -25,8 +41,16 @@ export class ClaritasWrapper extends JarExecutor<ClaritasResult> {
|
|||||||
return super.executeJar(
|
return super.executeJar(
|
||||||
'--absoluteJarPaths', absoluteJarPaths.join(','),
|
'--absoluteJarPaths', absoluteJarPaths.join(','),
|
||||||
'--libraryType', libraryType,
|
'--libraryType', libraryType,
|
||||||
'--mcVersion', mcVersion.toString()
|
'--mcVersion', mcVersion.toString(),
|
||||||
|
'--outputFile', this.OUTPUT_FILE,
|
||||||
|
'--previewOutput', 'true'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async cleanOutput(): Promise<void> {
|
||||||
|
if(pathExists(this.WORK_DIR)) {
|
||||||
|
remove(this.WORK_DIR)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,7 @@ export abstract class JarExecutor<T> {
|
|||||||
protected stdoutListeners: ((chunk: any) => void)[] = []
|
protected stdoutListeners: ((chunk: any) => void)[] = []
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
protected stderrListeners: ((chunk: any) => void)[] = []
|
protected stderrListeners: ((chunk: any) => void)[] = []
|
||||||
|
protected onCloseListeners: ((code: number) => Promise<void>)[] = []
|
||||||
|
|
||||||
protected lastExecutionResult!: T
|
protected lastExecutionResult!: T
|
||||||
|
|
||||||
@@ -34,10 +35,14 @@ export abstract class JarExecutor<T> {
|
|||||||
child.stderr.on('data', (data) => this.logger.error(data.toString('utf8').trim()))
|
child.stderr.on('data', (data) => this.logger.error(data.toString('utf8').trim()))
|
||||||
this.stderrListeners.forEach(l => child.stderr.on('data', l))
|
this.stderrListeners.forEach(l => child.stderr.on('data', l))
|
||||||
|
|
||||||
child.on('close', code => {
|
child.on('close', async code => {
|
||||||
this.logger.info('Exited with code', code)
|
this.logger.info('Exited with code', code)
|
||||||
|
for(const l of this.onCloseListeners) {
|
||||||
|
await l(code)
|
||||||
|
}
|
||||||
resolve(this.lastExecutionResult)
|
resolve(this.lastExecutionResult)
|
||||||
})
|
})
|
||||||
|
|
||||||
child.on('error', (err) => {
|
child.on('error', (err) => {
|
||||||
this.logger.info('Error during process execution', err)
|
this.logger.info('Error during process execution', err)
|
||||||
reject(err)
|
reject(err)
|
||||||
|
|||||||
Reference in New Issue
Block a user