diff --git a/src/routes/tasks.ts b/src/routes/tasks.ts index 6a7303f..de068b7 100644 --- a/src/routes/tasks.ts +++ b/src/routes/tasks.ts @@ -17,6 +17,7 @@ type TRequest = { task: ExportTask, url: string, timeZoneName: string, + apiKey: string, }, }; @@ -66,6 +67,11 @@ async function addTask(req: TRequest, res) { res.status(400).send('"task" field is required'); return; } + const apiKey = body.apiKey; + if (_.isEmpty(apiKey)) { + res.status(400).send('"apiKey" field is required'); + return; + } try { validateGrafanaUrl(clientUrl); @@ -87,15 +93,16 @@ async function addTask(req: TRequest, res) { } const exporter = exporterFactory.getExporter(); - exporter.export(task, datasourceUrl, body.timeZoneName); + exporter.export(task, datasourceUrl, body.timeZoneName, apiKey); res.status(200).send(`Export process started`); } async function deleteTask(req, res) { - let taskId = req.body.taskId; - let csvFilePath = path.join(CSV_PATH, `${taskId}.csv`); - let jsonFilePath = path.join(CSV_PATH, `${taskId}.json`); - + const taskId = req.body.taskId; + const jsonFilePath = path.join(CSV_PATH, `${taskId}.json`); + const data = fs.readFileSync(jsonFilePath, 'utf8'); + const csvName = JSON.parse(data)['filename']; + const csvFilePath = path.join(CSV_PATH, `${csvName}.csv`); if(fs.existsSync(csvFilePath)) { fs.unlink(csvFilePath, err => console.error(err)); } diff --git a/src/services/exporter.ts b/src/services/exporter.ts index 85605f6..7c4c2e3 100644 --- a/src/services/exporter.ts +++ b/src/services/exporter.ts @@ -29,7 +29,7 @@ const DEFAULT_PROGRESS = { export class Exporter { private _task: ExportTask; - public async export(task: ExportTask, datasourceUrl: string, timeZoneName: string) { + public async export(task: ExportTask, datasourceUrl: string, timeZoneName: string, apiKey: string) { try { this._task = _.cloneDeep(task); this._task.id = uuidv4(); @@ -72,9 +72,6 @@ export class Exporter { let values = []; for(const queryConfig of queryConfigs) { - const host = new URL(datasourceUrl).origin; - const apiKey = getApiKey(host); - const datasourceMetrics = await queryByConfig(queryConfig, datasourceUrl, from, to, apiKey); if(_.isEmpty(columns)) { @@ -117,15 +114,15 @@ export class Exporter { const csvStream = csv.createWriteStream({ headers: true, delimiter: this._task.csvDelimiter }) .on('error', async e => await this._updateProgress({ status: ExportStatus.ERROR, errorMessage: e.message })); - const writableStream = fs.createWriteStream(this._getFilePath('csv')); + const writableStream = fs.createWriteStream(this._getCsvFilePath()); csvStream.pipe(writableStream); writableStream.on('finish', async () => { if(this._task.progress.status !== ExportStatus.ERROR) { - console.log(`Everything is written to ${this._getFilename('csv')}`); + console.log(`Everything is written to ${this._getCsvFilename()}`); await this._updateProgress({ status: ExportStatus.FINISHED, progress: 1 }); } else { - console.log(`${this._getFilename('csv')} export is finished with error`); + console.log(`${this._getCsvFilename()} export is finished with error`); } }); @@ -141,7 +138,7 @@ export class Exporter { progress: _.assign(this._task.progress, progress, { time }), }; - await promisify(fs.writeFile)(this._getFilePath('json'), JSON.stringify(data), 'utf8'); + await promisify(fs.writeFile)(this._getJsonFilePath(), JSON.stringify(data), 'utf8'); } catch(err) { console.error(err); throw new Error('Can`t write file'); @@ -174,12 +171,16 @@ export class Exporter { } } - private _getFilename(extension: string): string { - return `${this._task.filename}.${extension}`; + private _getCsvFilename(): string { + return `${this._task.filename}.csv`; } - private _getFilePath(extension: string): string { - let filename = this._getFilename(extension); + private _getCsvFilePath(): string { + let filename = this._getCsvFilename(); return path.join(CSV_PATH, filename); } + + private _getJsonFilePath(): string { + return path.join(CSV_PATH, `${this._task.id}.json`); + } }