diff options
Diffstat (limited to 'tests/perf/src/main/java')
-rw-r--r-- | tests/perf/src/main/java/org/sonarsource/sonarqube/perf/MavenLogs.java | 84 | ||||
-rw-r--r-- | tests/perf/src/main/java/org/sonarsource/sonarqube/perf/ServerLogs.java | 61 |
2 files changed, 145 insertions, 0 deletions
diff --git a/tests/perf/src/main/java/org/sonarsource/sonarqube/perf/MavenLogs.java b/tests/perf/src/main/java/org/sonarsource/sonarqube/perf/MavenLogs.java new file mode 100644 index 00000000000..69f0289f440 --- /dev/null +++ b/tests/perf/src/main/java/org/sonarsource/sonarqube/perf/MavenLogs.java @@ -0,0 +1,84 @@ +/* + * SonarQube + * Copyright (C) 2009-2016 SonarSource SA + * mailto:contact 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. + */ +package org.sonarsource.sonarqube.perf; + +import org.apache.commons.lang.StringUtils; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class MavenLogs { + + /** + * Total time: 6.015s + * Total time: 3:14.025s + */ + public static Long extractTotalTime(String logs) { + Pattern pattern = Pattern.compile("^.*Total time: (\\d*:)?(\\d+).(\\d+)s.*$", Pattern.DOTALL); + Matcher matcher = pattern.matcher(logs); + if (matcher.matches()) { + String minutes = StringUtils.defaultIfBlank(StringUtils.removeEnd(matcher.group(1), ":"), "0"); + String seconds = StringUtils.defaultIfBlank(matcher.group(2), "0"); + String millis = StringUtils.defaultIfBlank(matcher.group(3), "0"); + + return (Long.parseLong(minutes) * 60000) + (Long.parseLong(seconds) * 1000) + Long.parseLong(millis); + } + throw new IllegalStateException("Maven logs do not contain \"Total time\""); + } + + /** + * Final Memory: 68M/190M + */ + public static Long extractEndMemory(String logs) { + return extractLong(logs, ".*Final Memory: (\\d+)M/[\\d]+M.*"); + } + + public static Long extractMaxMemory(String logs) { + return extractLong(logs, ".*Final Memory: [\\d]+M/(\\d+)M.*"); + } + + private static Long extractLong(String logs, String format) { + Pattern pattern = Pattern.compile(format); + Matcher matcher = pattern.matcher(logs); + if (matcher.matches()) { + String s = matcher.group(1); + return Long.parseLong(s); + } + return null; + } + + /** + * 2015.09.29 16:57:45 INFO web[o.s.s.c.q.CeWorkerRunnableImpl] Executed task | project=com.github.kevinsawicki:http-request-parent | id=AVAZm9oHIXrp54OmOeQe | time=2283ms + */ + public static Long extractComputationTotalTime(List<String> logs) { + Pattern pattern = Pattern.compile(".*INFO.*Executed task.* \\| time=(\\d+)ms.*"); + for (int i = logs.size() - 1; i >= 0; i--) { + String line = logs.get(i); + Matcher matcher = pattern.matcher(line); + if (matcher.matches()) { + String duration = matcher.group(1); + return Long.parseLong(duration); + } + } + + return null; + } +} diff --git a/tests/perf/src/main/java/org/sonarsource/sonarqube/perf/ServerLogs.java b/tests/perf/src/main/java/org/sonarsource/sonarqube/perf/ServerLogs.java new file mode 100644 index 00000000000..7bf90524153 --- /dev/null +++ b/tests/perf/src/main/java/org/sonarsource/sonarqube/perf/ServerLogs.java @@ -0,0 +1,61 @@ +/* + * SonarQube + * Copyright (C) 2009-2016 SonarSource SA + * mailto:contact 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. + */ +package org.sonarsource.sonarqube.perf; + +import com.sonar.orchestrator.Orchestrator; +import org.apache.commons.io.FileUtils; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +public class ServerLogs { + + static Date extractDate(String line) { + String pattern = "yyyy.MM.dd HH:mm:ss"; + SimpleDateFormat format = new SimpleDateFormat(pattern); + if (line.length() > 19) { + try { + return format.parse(line.substring(0, 19)); + } catch (Exception e) { + // ignore + } + } + return null; + } + + public static Date extractFirstDate(List<String> lines) { + for (String line : lines) { + Date d = ServerLogs.extractDate(line); + if (d != null) { + return d; + } + } + return null; + } + + public static void clear(Orchestrator orch) throws IOException { + if (orch.getServer() != null && orch.getServer().getLogs() != null) { + FileUtils.write(orch.getServer().getLogs(), "", false); + } + } + +} |