diff options
author | Jeremy Davis <jeremy.davis@sonarsource.com> | 2021-11-11 11:20:48 +0100 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2021-11-16 20:03:55 +0000 |
commit | 8871c8fed824a18fe93d9ad167275492426720fa (patch) | |
tree | 7fa63de77bd21554d182c0a0641cc53c70e7f901 /server/sonar-web/config | |
parent | be28c6d7d70b85472a1213e2384a499432de2e99 (diff) | |
download | sonarqube-8871c8fed824a18fe93d9ad167275492426720fa.tar.gz sonarqube-8871c8fed824a18fe93d9ad167275492426720fa.zip |
SONAR-15633 collect jest test data for Kibana
Diffstat (limited to 'server/sonar-web/config')
-rw-r--r-- | server/sonar-web/config/jest/ElasticSearchReporter.js | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/server/sonar-web/config/jest/ElasticSearchReporter.js b/server/sonar-web/config/jest/ElasticSearchReporter.js new file mode 100644 index 00000000000..e0c8b571642 --- /dev/null +++ b/server/sonar-web/config/jest/ElasticSearchReporter.js @@ -0,0 +1,93 @@ +/* + * SonarQube + * Copyright (C) 2009-2021 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* eslint-disable no-console */ + +const fse = require('fs-extra'); +const { tokenToString } = require('typescript'); + +const ES_ITEM_CATEGORY = 'Validate-UT-Typescript'; +const ES_ITEM_KIND = 'testcase'; +const ES_ITEM_OPERATION = 'total'; +const ES_ITEM_SUITE = 'Standalone'; + +module.exports = class ElasticSearchReporter { + constructor(globalConfig, options) { + this.rootDir = globalConfig.rootDir; + this.outputFilepath = options.outputFilepath; + } + + stripFilePath(path) { + return path.replace(this.rootDir, ''); + } + + writeToFile(data) { + try { + fse.writeJsonSync(this.outputFilepath, data); + } catch (e) { + console.error(e); + } + } + + collectTestData(testClassResults) { + const commit = process.env.GIT_SHA1; + const build = process.env.BUILD_NUMBER; + + const data = testClassResults.reduce((flattenedTestResults, testClassResult) => { + const formattedTestResults = this.formatTestResults(testClassResult, commit, build); + + return flattenedTestResults.concat(formattedTestResults); + }, []); + + this.writeToFile(data); + } + + formatTestResults(testClassResult, commit, build) { + const timestamp = new Date(testClassResult.perfStats.start).toISOString(); + const testClass = this.stripFilePath(testClassResult.testFilePath); + + return testClassResult.testResults.map(testResult => ({ + fields: { + commit, + build, + category: ES_ITEM_CATEGORY, + kind: ES_ITEM_KIND, + operation: ES_ITEM_OPERATION, + suite: ES_ITEM_SUITE, + measureClass: '', + measureMethod: '', + timestamp, + testClass, + testMethod: testResult.fullName, + duration: testResult.duration + } + })); + } + + onRunComplete(contexts, { testResults }) { + if (process.env.CIRRUS_BRANCH === 'branch-nightly-build') { + if (!this.outputFilepath) { + throw new Error('option `outputFilepath` is undefined'); + } + + this.collectTestData(testResults); + } + } +}; |