Skip to content

Commit

Permalink
TC Bot refactoring: tcbot-common and -teamcity modules extracted
Browse files Browse the repository at this point in the history
  • Loading branch information
dspavlov committed Jun 1, 2019
1 parent ce0fbcf commit dc45d34
Show file tree
Hide file tree
Showing 198 changed files with 1,026 additions and 754 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -20,7 +20,7 @@ Should you have any questions, please contact Ignite Developers at dev@ignite.ap
Locally code can be set up using IntelliJ idea and gradle project import.
Locally it can be run using org.apache.ignite.ci.web.Launcher.main() method.
The bot will create necessary configs in ~/.ignite-teamcity-helper - it is bot Home directory.
In can be changed with org.apache.ignite.ci.tcbot.TcBotSystemProperties.TEAMCITY_HELPER_HOME system property.
In can be changed with TcBotSystemProperties.TEAMCITY_HELPER_HOME system property.

Examples of configs can be found in [conf](conf) directory.
Main config file is [conf/branches.json](conf/branches.json). This file needs to be placed to work directory, (under user home by default).
Expand Down
6 changes: 6 additions & 0 deletions build.gradle
Expand Up @@ -38,7 +38,11 @@ subprojects {
}

allprojects {

ext {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'

jettyVer = '9.4.12.v20180830'

// ignVer = '2.7.0'
Expand All @@ -52,6 +56,8 @@ allprojects {

// MIT/X11 license, category A;
slf4jVer = '1.7.25'

gsonVer = '2.8.2'
}

repositories {
Expand Down
3 changes: 3 additions & 0 deletions ignite-tc-helper-web/build.gradle
Expand Up @@ -28,6 +28,9 @@ repositories {

// https://www.apache.org/legal/resolved.html#category-a
dependencies {
compile (project(":tcbot-common"));
compile (project(":tcbot-teamcity"));

compile group: 'com.google.guava', name: 'guava', version: guavaVer

compile group: 'org.apache.ignite', name: 'ignite-core', version: ignVer
Expand Down
Expand Up @@ -24,10 +24,11 @@
import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.Properties;
import org.apache.ignite.ci.tcbot.TcBotSystemProperties;

import org.apache.ignite.ci.tcbot.conf.BranchesTracked;
import org.apache.ignite.ci.util.Base64Util;
import org.apache.ignite.ci.util.ExceptionUtil;
import org.apache.ignite.tcbot.common.util.Base64Util;
import org.apache.ignite.tcbot.common.conf.TcBotWorkDir;
import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -68,7 +69,6 @@ public class HelperConfig {
@Deprecated
public static final String SLACK_CHANNEL = "slack.channel";
public static final String LOGS = "logs";
public static final String ENDL = String.format("%n");

public static Properties loadAuthProperties(File workDir, String cfgFileName) {
try {
Expand Down Expand Up @@ -107,28 +107,6 @@ private static String prefixedWithServerName(@Nullable String tcName, String nam
return isNullOrEmpty(tcName) ? name : (tcName + "." + name);
}

public static File ensureDirExist(File workDir) {
if (!workDir.exists())
checkState(workDir.mkdirs(), "Unable to make directory [" + workDir + "]");

return workDir;
}

public static File resolveWorkDir() {
File workDir = null;
String property = System.getProperty(TcBotSystemProperties.TEAMCITY_HELPER_HOME);
if (isNullOrEmpty(property)) {
String conf = ".ignite-teamcity-helper";
String prop = System.getProperty("user.home");
//relative in work dir
workDir = isNullOrEmpty(prop) ? new File(conf) : new File(prop, conf);
}
else
workDir = new File(property);

return ensureDirExist(workDir);
}

@NotNull public static String userPwdToToken(String user, String pwd) {
return Base64Util.encodeUtf8String(user + ":" + pwd);
}
Expand All @@ -141,7 +119,7 @@ public static String getMandatoryProperty(Properties props, String key, String c
}

public static BranchesTracked getTrackedBranches() {
final File workDir = resolveWorkDir();
final File workDir = TcBotWorkDir.resolveWorkDir();
final File file = new File(workDir, "branches.json");

try (FileReader json = new FileReader(file)) {
Expand All @@ -155,7 +133,7 @@ public static BranchesTracked getTrackedBranches() {
public static Properties loadEmailSettings() {
try {
String respConf = prefixedWithServerName(null, MAIL_PROPS);
final File workDir = resolveWorkDir();
final File workDir = TcBotWorkDir.resolveWorkDir();
File file = new File(workDir, respConf);
return loadProps(file);
}
Expand All @@ -165,8 +143,4 @@ public static Properties loadEmailSettings() {
}
}

@NotNull static File resolveLogs(File workDir, String logsProp) {
final File logsDirFileConfigured = new File(logsProp);
return logsDirFileConfigured.isAbsolute() ? logsDirFileConfigured : new File(workDir, logsProp);
}
}
Expand Up @@ -17,6 +17,8 @@

package org.apache.ignite.ci;

import org.apache.ignite.tcservice.ITeamcity;

/**
* Combination of REST data and persisted statistics.
*/
Expand Down
Expand Up @@ -32,25 +32,25 @@
import org.apache.ignite.IgniteCache;
import org.apache.ignite.ci.analysis.IVersionedEntity;
import org.apache.ignite.ci.analysis.LogCheckResult;
import org.apache.ignite.ci.analysis.SingleBuildRunCtx;
import org.apache.ignite.ci.db.DbMigrations;
import org.apache.ignite.ci.db.TcHelperDb;
import org.apache.ignite.ci.di.AutoProfiling;
import org.apache.ignite.ci.tcbot.conf.ITcServerConfig;
import org.apache.ignite.ci.tcmodel.agent.Agent;
import org.apache.ignite.ci.tcmodel.changes.Change;
import org.apache.ignite.ci.tcmodel.changes.ChangesList;
import org.apache.ignite.ci.tcmodel.conf.BuildType;
import org.apache.ignite.ci.tcmodel.conf.Project;
import org.apache.ignite.ci.tcmodel.conf.bt.BuildTypeFull;
import org.apache.ignite.ci.tcmodel.hist.BuildRef;
import org.apache.ignite.ci.tcmodel.mute.MuteInfo;
import org.apache.ignite.ci.tcmodel.result.Build;
import org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrences;
import org.apache.ignite.ci.tcmodel.result.stat.Statistics;
import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrencesFull;
import org.apache.ignite.ci.tcmodel.user.User;
import org.apache.ignite.ci.util.ObjectInterner;
import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
import org.apache.ignite.tcbot.common.conf.ITcServerConfig;
import org.apache.ignite.tcservice.ITeamcity;
import org.apache.ignite.tcservice.model.agent.Agent;
import org.apache.ignite.tcservice.model.changes.Change;
import org.apache.ignite.tcservice.model.changes.ChangesList;
import org.apache.ignite.tcservice.model.conf.BuildType;
import org.apache.ignite.tcservice.model.conf.Project;
import org.apache.ignite.tcservice.model.conf.bt.BuildTypeFull;
import org.apache.ignite.tcservice.model.hist.BuildRef;
import org.apache.ignite.tcservice.model.mute.MuteInfo;
import org.apache.ignite.tcservice.model.result.Build;
import org.apache.ignite.tcservice.model.result.problems.ProblemOccurrences;
import org.apache.ignite.tcservice.model.result.stat.Statistics;
import org.apache.ignite.tcservice.model.result.tests.TestOccurrencesFull;
import org.apache.ignite.tcservice.model.user.User;
import org.apache.ignite.tcbot.common.util.ObjectInterner;
import org.apache.ignite.ci.web.model.hist.VisasHistoryStorage;
import org.jetbrains.annotations.NotNull;

Expand Down Expand Up @@ -139,21 +139,16 @@ private IgniteCache<Integer, LogCheckResult> logCheckResultCache() {
return getOrCreateCacheV2(ignCacheNme(LOG_CHECK_RESULT));
}

/** {@inheritDoc} */
@Override public CompletableFuture<File> unzipFirstFile(CompletableFuture<File> fut) {
return teamcity.unzipFirstFile(fut);
}

/** {@inheritDoc} */
@Override public CompletableFuture<File> downloadBuildLogZip(int id) {
return teamcity.downloadBuildLogZip(id);
}

/** {@inheritDoc} */
@Override public CompletableFuture<LogCheckResult> analyzeBuildLog(Integer buildId, SingleBuildRunCtx ctx) {
return loadFutureIfAbsentVers(logCheckResultCache(), buildId,
k -> teamcity.analyzeBuildLog(buildId, ctx));
}
// @Override public CompletableFuture<LogCheckResult> analyzeBuildLog(Integer buildId, SingleBuildRunCtx ctx) {
// return loadFutureIfAbsentVers(logCheckResultCache(), buildId,
// k -> teamcity.analyzeBuildLog(buildId, ctx));
// }


@AutoProfiling
Expand Down
Expand Up @@ -22,8 +22,8 @@
import java.util.Objects;
import java.util.concurrent.Future;
import java.util.stream.Stream;
import org.apache.ignite.ci.tcmodel.result.Build;
import org.apache.ignite.ci.util.TimeUtil;
import org.apache.ignite.tcservice.model.result.Build;
import org.apache.ignite.tcbot.common.util.TimeUtil;
import org.jetbrains.annotations.NotNull;

/**
Expand Down
Expand Up @@ -17,7 +17,7 @@

package org.apache.ignite.ci.analysis;

import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrenceFull;
import org.apache.ignite.tcservice.model.result.tests.TestOccurrenceFull;
import org.apache.ignite.ci.teamcity.ignited.IRunHistory;

/**
Expand Down
Expand Up @@ -22,7 +22,7 @@
import org.apache.ignite.ci.logs.handlers.TestLogHandler;
import org.apache.ignite.ci.logs.handlers.ThreadDumpInMemoryHandler;

import static org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence.JAVA_LEVEL_DEADLOCK;
import static org.apache.ignite.tcservice.model.result.problems.ProblemOccurrence.JAVA_LEVEL_DEADLOCK;

/**
*
Expand Down
Expand Up @@ -32,10 +32,10 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nonnull;
import org.apache.ignite.ci.tcbot.conf.ITcServerConfig;
import org.apache.ignite.ci.tcmodel.hist.BuildRef;
import org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence;
import org.apache.ignite.ci.tcmodel.result.stat.Statistics;
import org.apache.ignite.tcbot.common.conf.ITcServerConfig;
import org.apache.ignite.tcservice.model.hist.BuildRef;
import org.apache.ignite.tcservice.model.result.problems.ProblemOccurrence;
import org.apache.ignite.tcservice.model.result.stat.Statistics;
import org.apache.ignite.ci.teamcity.ignited.IRunHistory;
import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
import org.apache.ignite.ci.teamcity.ignited.change.ChangeCompacted;
Expand Down
Expand Up @@ -32,10 +32,13 @@
import java.util.regex.Pattern;
import java.util.stream.Stream;
import javax.annotation.Nonnull;
import org.apache.ignite.ci.ITeamcity;

import org.apache.ignite.tcbot.common.conf.IParameterValueSpec;
import org.apache.ignite.tcservice.ITeamcity;
import org.apache.ignite.ci.tcbot.conf.BuildParameterSpec;
import org.apache.ignite.ci.tcbot.conf.ITcServerConfig;
import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrenceFull;
import org.apache.ignite.tcbot.common.conf.IBuildParameterSpec;
import org.apache.ignite.tcbot.common.conf.ITcServerConfig;
import org.apache.ignite.tcservice.model.result.tests.TestOccurrenceFull;
import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
import org.apache.ignite.ci.teamcity.ignited.buildtype.ParametersCompacted;
import org.apache.ignite.ci.teamcity.ignited.change.ChangeCompacted;
Expand Down Expand Up @@ -275,16 +278,16 @@ public Set<String> tags() {

public void addTagsFromParameters(ParametersCompacted parameters, ITcServerConfig tcCfg,
IStringCompactor compactor) {
for (BuildParameterSpec parm : tcCfg.filteringParameters()) {
if (!parm.isFilled())
for (IBuildParameterSpec parm0 : tcCfg.filteringParameters()) {
if (!parm0.isFilled())
continue;

String propVal = getPropertyOrSpecialValue(parameters, compactor, parm.name());
String propVal = getPropertyOrSpecialValue(parameters, compactor, parm0.name());

if (Strings.isNullOrEmpty(propVal))
continue;

parm.selection().stream()
parm0.selection().stream()
.filter(pvs -> {
String valRegExp = pvs.valueRegExp();

Expand Down
Expand Up @@ -21,7 +21,7 @@
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrenceFull;
import org.apache.ignite.tcservice.model.result.tests.TestOccurrenceFull;
import org.apache.ignite.ci.teamcity.ignited.IRunHistory;
import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
import org.apache.ignite.ci.teamcity.ignited.fatbuild.TestCompacted;
Expand Down
Expand Up @@ -35,7 +35,7 @@
import org.apache.ignite.ci.issue.IssueKey;
import org.apache.ignite.ci.issue.IssuesStorage;
import org.apache.ignite.ci.observer.CompactBuildsInfo;
import org.apache.ignite.ci.tcmodel.result.Build;
import org.apache.ignite.tcservice.model.result.Build;
import org.apache.ignite.ci.web.model.CompactContributionKey;
import org.apache.ignite.ci.web.model.CompactVisa;
import org.apache.ignite.ci.web.model.CompactVisaRequest;
Expand Down
Expand Up @@ -26,8 +26,8 @@
import java.util.stream.Collectors;
import org.apache.ignite.Ignite;
import org.apache.ignite.Ignition;
import org.apache.ignite.ci.HelperConfig;
import org.apache.ignite.ci.di.AutoProfiling;
import org.apache.ignite.tcbot.common.conf.TcBotWorkDir;
import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
import org.apache.ignite.ci.di.MonitoredTask;
import org.apache.ignite.ci.web.model.Version;
import org.apache.ignite.cluster.BaselineNode;
Expand Down Expand Up @@ -101,7 +101,7 @@ protected String activate() {

@NotNull
private IgniteConfiguration getIgniteConfiguration() {
final File workDir = HelperConfig.resolveWorkDir();
final File workDir = TcBotWorkDir.resolveWorkDir();
Ignite2Configurer.configLogger(workDir, "tcbot_logs");

final IgniteConfiguration cfg = new IgniteConfiguration();
Expand Down
Expand Up @@ -24,12 +24,13 @@
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
import java.io.File;
import java.io.IOException;
import org.apache.ignite.ci.HelperConfig;
import org.apache.ignite.ci.tcbot.TcBotSystemProperties;

import org.apache.ignite.tcbot.common.conf.TcBotSystemProperties;
import org.apache.ignite.configuration.DataRegionConfiguration;
import org.apache.ignite.configuration.DataStorageConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.configuration.WALMode;
import org.apache.ignite.tcbot.common.conf.TcBotWorkDir;
import org.jetbrains.annotations.NotNull;
import org.slf4j.LoggerFactory;

Expand All @@ -49,7 +50,7 @@ public static void configLogger(File workDir, String subdir) {
rollingFa.setAppend(true);

final File logs = new File(workDir, subdir);
HelperConfig.ensureDirExist(logs);
TcBotWorkDir.ensureDirExist(logs);

TimeBasedRollingPolicy logFilePolicy = new TimeBasedRollingPolicy();
logFilePolicy.setContext(logCtx);
Expand Down
Expand Up @@ -36,10 +36,11 @@
import org.apache.ignite.ci.tcbot.TcBotBusinessServicesModule;
import org.apache.ignite.ci.tcbot.issue.IssueDetector;
import org.apache.ignite.ci.teamcity.ignited.TeamcityIgnitedModule;
import org.apache.ignite.ci.util.ExceptionUtil;
import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;
import org.apache.ignite.ci.web.TcUpdatePool;
import org.apache.ignite.ci.web.model.hist.VisasHistoryStorage;
import org.apache.ignite.ci.web.rest.exception.ServiceStartingException;
import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;

/**
*
Expand Down
Expand Up @@ -28,7 +28,7 @@
import java.util.concurrent.atomic.AtomicReference;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.ignite.ci.util.TimeUtil;
import org.apache.ignite.tcbot.common.util.TimeUtil;
import org.jetbrains.annotations.NotNull;

public class MonitoredTaskInterceptor implements MethodInterceptor {
Expand Down
Expand Up @@ -31,7 +31,7 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.ci.db.TcHelperDb;
import org.apache.ignite.ci.di.AutoProfiling;
import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
import org.apache.ignite.ci.di.MonitoredTask;
import org.apache.ignite.ci.di.scheduler.IScheduler;
import org.apache.ignite.ci.github.GitHubBranchKey;
Expand Down
Expand Up @@ -26,7 +26,7 @@
import javax.inject.Provider;
import org.apache.ignite.ci.github.pure.IGitHubConnection;
import org.apache.ignite.ci.github.pure.IGitHubConnectionProvider;
import org.apache.ignite.ci.util.ExceptionUtil;
import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;

class GitHubIgnitedProvImpl implements IGitHubConnIgnitedProvider {
@Inject IGitHubConnectionProvider pureConnProv;
Expand Down
Expand Up @@ -24,7 +24,7 @@
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import javax.inject.Provider;
import org.apache.ignite.ci.util.ExceptionUtil;
import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;

class GitHubCachingProvider implements IGitHubConnectionProvider {
@Inject private Provider<IGitHubConnection> factory;
Expand Down

0 comments on commit dc45d34

Please sign in to comment.