aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/config
diff options
context:
space:
mode:
authorJeremy Davis <jeremy.davis@sonarsource.com>2021-11-11 11:20:48 +0100
committersonartech <sonartech@sonarsource.com>2021-11-16 20:03:55 +0000
commit8871c8fed824a18fe93d9ad167275492426720fa (patch)
tree7fa63de77bd21554d182c0a0641cc53c70e7f901 /server/sonar-web/config
parentbe28c6d7d70b85472a1213e2384a499432de2e99 (diff)
downloadsonarqube-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.js93
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);
+ }
+ }
+};