Commits

Maxim Podkolzine committed 6f1ac3f

Porting from private repo

  • Participants

Comments (0)

Files changed (98)

+syntax: glob
+
+out
+workspace.xml
+
+Flaky Tests plugin
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AntConfiguration">
+    <defaultAnt bundledAnt="true" />
+    <buildFile url="file://$PROJECT_DIR$/build/ant.build.xml">
+      <additionalClassPath />
+      <antReference projectDefault="true" />
+      <customJdkName value="" />
+      <maximumHeapSize value="128" />
+      <maximumStackSize value="2" />
+      <properties />
+    </buildFile>
+  </component>
+</project>
+

.idea/artifacts/deploy.xml

+<component name="ArtifactManager">
+  <artifact name="deploy">
+    <output-path>$TeamCityDistribution$/../PluginDev.Data/plugins</output-path>
+    <root id="root">
+      <element id="artifact" artifact-name="plugin-zip" />
+    </root>
+  </artifact>
+</component>

.idea/artifacts/idea_resolve_helper.xml

+<component name="ArtifactManager">
+  <artifact type="exploded-war" name="idea-resolve-helper">
+    <output-path>$PROJECT_DIR$/out/artifacts/idea_resolve_helper</output-path>
+    <root id="root">
+      <element id="javaee-facet-resources" facet="idea-resolve-helper/web/Web" />
+      <element id="module-output" name="idea-resolve-helper" />
+      <element id="javaee-facet-resources" facet="server/web/server" />
+    </root>
+  </artifact>
+</component>

.idea/artifacts/plugin.xml

+<component name="ArtifactManager">
+  <artifact name="plugin">
+    <output-path>$PROJECT_DIR$/out/artifacts/plugin</output-path>
+    <properties id="ant-postprocessing">
+      <options enabled="true">
+        <file>file://$PROJECT_DIR$/build/ant.build.xml</file>
+        <target>replace-tokens-in-teamcity-plugin-xml</target>
+      </options>
+    </properties>
+    <root id="root">
+      <element id="directory" name="server">
+        <element id="archive" name="flaky-server.jar">
+          <element id="module-output" name="server" />
+        </element>
+        <element id="archive" name="flaky-resources.jar">
+          <element id="directory" name="buildServerResources">
+            <element id="dir-copy" path="$PROJECT_DIR$/server/resources" />
+          </element>
+        </element>
+      </element>
+      <element id="file-copy" path="$PROJECT_DIR$/server/teamcity-server-plugin.xml" output-file-name="teamcity-plugin.xml" />
+    </root>
+  </artifact>
+</component>

.idea/artifacts/plugin_zip.xml

+<component name="ArtifactManager">
+  <artifact name="plugin-zip">
+    <output-path>$PROJECT_DIR$/out/artifacts/plugin_zip</output-path>
+    <root id="root">
+      <element id="archive" name="flaky.zip">
+        <element id="artifact" artifact-name="plugin" />
+      </element>
+    </root>
+  </artifact>
+</component>

.idea/codeStyleSettings.xml

+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectCodeStyleSettingsManager">
+    <option name="PER_PROJECT_SETTINGS">
+      <value>
+        <option name="USE_SAME_INDENTS" value="true" />
+        <option name="IGNORE_SAME_INDENTS_FOR_LANGUAGES" value="true" />
+        <option name="OTHER_INDENT_OPTIONS">
+          <value>
+            <option name="INDENT_SIZE" value="2" />
+            <option name="CONTINUATION_INDENT_SIZE" value="8" />
+            <option name="TAB_SIZE" value="2" />
+            <option name="USE_TAB_CHARACTER" value="false" />
+            <option name="SMART_TABS" value="false" />
+            <option name="LABEL_INDENT_SIZE" value="0" />
+            <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+            <option name="USE_RELATIVE_INDENTS" value="false" />
+          </value>
+        </option>
+        <option name="FIELD_NAME_PREFIX" value="my" />
+        <option name="STATIC_FIELD_NAME_PREFIX" value="our" />
+        <XML>
+          <option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
+        </XML>
+        <codeStyleSettings language="CSS">
+          <indentOptions>
+            <option name="INDENT_SIZE" value="2" />
+            <option name="TAB_SIZE" value="2" />
+          </indentOptions>
+        </codeStyleSettings>
+        <codeStyleSettings language="CoffeeScript">
+          <indentOptions>
+            <option name="CONTINUATION_INDENT_SIZE" value="8" />
+          </indentOptions>
+        </codeStyleSettings>
+        <codeStyleSettings language="Gherkin">
+          <indentOptions>
+            <option name="TAB_SIZE" value="2" />
+          </indentOptions>
+        </codeStyleSettings>
+        <codeStyleSettings language="Groovy">
+          <indentOptions>
+            <option name="INDENT_SIZE" value="2" />
+            <option name="TAB_SIZE" value="2" />
+          </indentOptions>
+        </codeStyleSettings>
+        <codeStyleSettings language="JAVA">
+          <indentOptions>
+            <option name="INDENT_SIZE" value="2" />
+            <option name="TAB_SIZE" value="2" />
+          </indentOptions>
+        </codeStyleSettings>
+        <codeStyleSettings language="JSP">
+          <indentOptions>
+            <option name="INDENT_SIZE" value="2" />
+            <option name="TAB_SIZE" value="2" />
+          </indentOptions>
+        </codeStyleSettings>
+        <codeStyleSettings language="JavaScript">
+          <indentOptions>
+            <option name="INDENT_SIZE" value="2" />
+            <option name="CONTINUATION_INDENT_SIZE" value="8" />
+            <option name="TAB_SIZE" value="2" />
+          </indentOptions>
+        </codeStyleSettings>
+        <codeStyleSettings language="XML">
+          <indentOptions>
+            <option name="INDENT_SIZE" value="2" />
+            <option name="TAB_SIZE" value="2" />
+          </indentOptions>
+        </codeStyleSettings>
+        <codeStyleSettings language="jet">
+          <indentOptions>
+            <option name="INDENT_SIZE" value="2" />
+            <option name="TAB_SIZE" value="2" />
+          </indentOptions>
+        </codeStyleSettings>
+      </value>
+    </option>
+    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
+  </component>
+</project>
+

.idea/compiler.xml

+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <resourceExtensions />
+    <wildcardResourcePatterns>
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+      <entry name="?*.ftl" />
+    </wildcardResourcePatterns>
+    <annotationProcessing>
+      <profile default="true" name="Default" enabled="false">
+        <processorPath useClasspath="true" />
+      </profile>
+    </annotationProcessing>
+  </component>
+</project>
+

.idea/copyright/JetBrains_open_sourced.xml

+<component name="CopyrightManager">
+  <copyright>
+    <option name="notice" value="Copyright 2000-&amp;#36;today.year JetBrains s.r.o.&#10;&#10;Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);&#10;you may not use this file except in compliance with the License.&#10;You may obtain a copy of the License at&#10;&#10;http://www.apache.org/licenses/LICENSE-2.0&#10;&#10;Unless required by applicable law or agreed to in writing, software&#10;distributed under the License is distributed on an &quot;AS IS&quot; BASIS,&#10;WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&#10;See the License for the specific language governing permissions and&#10;limitations under the License." />
+    <option name="keyword" value="Copyright" />
+    <option name="allowReplaceKeyword" value="" />
+    <option name="myName" value="JetBrains open-sourced" />
+    <option name="myLocal" value="true" />
+  </copyright>
+</component>

.idea/copyright/profiles_settings.xml

+<component name="CopyrightManager">
+  <settings default="JetBrains open-sourced">
+    <module2copyright />
+    <LanguageOptions name="JSPX">
+      <option name="fileTypeOverride" value="1" />
+    </LanguageOptions>
+    <LanguageOptions name="Properties">
+      <option name="fileTypeOverride" value="1" />
+    </LanguageOptions>
+    <LanguageOptions name="XML">
+      <option name="fileTypeOverride" value="1" />
+    </LanguageOptions>
+  </settings>
+</component>

.idea/dictionaries/maxim.xml

+<component name="ProjectDictionaryState">
+  <dictionary name="maxim">
+    <words>
+      <w>jdbc</w>
+    </words>
+  </dictionary>
+</component>

.idea/encodings.xml

+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" defaultCharsetForPropertiesFiles="UTF-8" />
+</project>
+

.idea/libraries/Agent_Api.xml

+<component name="libraryTable">
+  <library name="Agent-Api">
+    <CLASSES>
+      <root url="jar://$TeamCityDistribution$/devPackage/agent-api.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$TeamCityDistribution$/devPackage/src/openApi-source.jar!/" />
+    </SOURCES>
+  </library>
+</component>

.idea/libraries/Common_Api.xml

+<component name="libraryTable">
+  <library name="Common-Api">
+    <CLASSES>
+      <root url="jar://$TeamCityDistribution$/devPackage/common-api.jar!/" />
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/annotations.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$TeamCityDistribution$/devPackage/src/openApi-source.jar!/" />
+    </SOURCES>
+  </library>
+</component>

.idea/libraries/Common_Impl.xml

+<component name="libraryTable">
+  <library name="Common-Impl">
+    <CLASSES>
+      <root url="jar://$TeamCityDistribution$/buildAgent/lib/common-impl.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>

.idea/libraries/Idea_OpenApi.xml

+<component name="libraryTable">
+  <library name="Idea-OpenApi">
+    <CLASSES>
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/util.jar!/" />
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/openapi.jar!/" />
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/trove4j.jar!/" />
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/resources_en.jar!/" />
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/jdom.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>

.idea/libraries/Server_Api.xml

+<component name="libraryTable">
+  <library name="Server-Api">
+    <CLASSES>
+      <root url="jar://$TeamCityDistribution$/devPackage/server-api.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$TeamCityDistribution$/devPackage/src/openApi-source.jar!/" />
+    </SOURCES>
+  </library>
+</component>

.idea/libraries/Servlet_Api.xml

+<component name="libraryTable">
+  <library name="Servlet Api">
+    <CLASSES>
+      <root url="jar://$TeamCityDistribution$/lib/servlet-api.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>

.idea/libraries/TeamCity_agent_runtime.xml

+<component name="libraryTable">
+  <library name="TeamCity agent runtime">
+    <CLASSES>
+      <root url="file://$TeamCityDistribution$/buildAgent/lib" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+    <jarDirectory url="file://$TeamCityDistribution$/buildAgent/lib" recursive="false" />
+  </library>
+</component>

.idea/libraries/TeamCity_server_runtime.xml

+<component name="libraryTable">
+  <library name="TeamCity server runtime">
+    <CLASSES>
+      <root url="file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+    <jarDirectory url="file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib" recursive="false" />
+  </library>
+</component>

.idea/libraries/Test_Api.xml

+<component name="libraryTable">
+  <library name="Test-Api">
+    <CLASSES>
+      <root url="jar://$TeamCityDistribution$/devPackage/tests/tests-support.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>

.idea/libraries/Test_Api_libs.xml

+<component name="libraryTable">
+  <library name="Test-Api libs">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/lib/jmock/jmock-core-1.2.0.jar!/" />
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/xmlrpc-2.0.1.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>

.idea/libraries/idea_annotations_jar.xml

+<component name="libraryTable">
+  <library name="idea annotations.jar">
+    <CLASSES>
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/annotations.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>

.idea/libraries/jmock.xml

+<component name="libraryTable">
+  <library name="jmock">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/lib/jmock/hamcrest-core-1.1.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/jmock/hamcrest-library-1.1.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/jmock/jmock-2.5.1.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/jmock/jmock-core-1.2.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$PROJECT_DIR$/lib/jmock/jmock-2.5.1-javadoc.zip!/jmock-2.5.1/doc" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/lib/jmock/hamcrest-core-1.1.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/jmock/hamcrest-library-1.1.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/jmock/jmock-2.5.1.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lib/jmock/jmock-core-1.2.0.jar!/" />
+    </SOURCES>
+  </library>
+</component>

.idea/libraries/log4j.xml

+<component name="libraryTable">
+  <library name="log4j">
+    <CLASSES>
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/log4j-1.2.12.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>

.idea/libraries/spring.xml

+<component name="libraryTable">
+  <library name="spring">
+    <CLASSES>
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/spring.jar!/" />
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/spring-webmvc.jar!/" />
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/spring-security.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>

.idea/libraries/standard_jar.xml

+<component name="libraryTable">
+  <library name="standard.jar">
+    <CLASSES>
+      <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/standard.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>

.idea/libraries/testng.xml

+<component name="libraryTable">
+  <library name="testng">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/lib/testng/testng-5.14.1.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="LOCALE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="ModuleEditorState">
+    <option name="LAST_EDITED_MODULE_NAME" />
+    <option name="LAST_EDITED_TAB_NAME" />
+  </component>
+  <component name="ProjectResources">
+    <default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
+

.idea/modules.xml

+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/idea-resolve-helper.iml" filepath="$PROJECT_DIR$/idea-resolve-helper.iml" />
+      <module fileurl="file://$PROJECT_DIR$/server/server.iml" filepath="$PROJECT_DIR$/server/server.iml" />
+      <module fileurl="file://$PROJECT_DIR$/tests/tests.iml" filepath="$PROJECT_DIR$/tests/tests.iml" />
+    </modules>
+  </component>
+</project>
+

.idea/projectCodeStyle.xml

+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CodeStyleSettingsManager">
+    <option name="PER_PROJECT_SETTINGS">
+      <value>
+        <ADDITIONAL_INDENT_OPTIONS fileType="java">
+          <option name="INDENT_SIZE" value="4" />
+          <option name="CONTINUATION_INDENT_SIZE" value="8" />
+          <option name="TAB_SIZE" value="4" />
+          <option name="USE_TAB_CHARACTER" value="false" />
+          <option name="SMART_TABS" value="false" />
+          <option name="LABEL_INDENT_SIZE" value="0" />
+          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+          <option name="USE_RELATIVE_INDENTS" value="false" />
+        </ADDITIONAL_INDENT_OPTIONS>
+        <ADDITIONAL_INDENT_OPTIONS fileType="jsp">
+          <option name="INDENT_SIZE" value="4" />
+          <option name="CONTINUATION_INDENT_SIZE" value="8" />
+          <option name="TAB_SIZE" value="4" />
+          <option name="USE_TAB_CHARACTER" value="false" />
+          <option name="SMART_TABS" value="false" />
+          <option name="LABEL_INDENT_SIZE" value="0" />
+          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+          <option name="USE_RELATIVE_INDENTS" value="false" />
+        </ADDITIONAL_INDENT_OPTIONS>
+        <ADDITIONAL_INDENT_OPTIONS fileType="xml">
+          <option name="INDENT_SIZE" value="4" />
+          <option name="CONTINUATION_INDENT_SIZE" value="8" />
+          <option name="TAB_SIZE" value="4" />
+          <option name="USE_TAB_CHARACTER" value="false" />
+          <option name="SMART_TABS" value="false" />
+          <option name="LABEL_INDENT_SIZE" value="0" />
+          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+          <option name="USE_RELATIVE_INDENTS" value="false" />
+        </ADDITIONAL_INDENT_OPTIONS>
+      </value>
+    </option>
+  </component>
+</project>
+

.idea/runConfigurations/All_Tests.xml

+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="All Tests" type="TestNG" factoryName="TestNG">
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <module name="tests" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="SUITE_NAME" value="$PROJECT_DIR$/tests/src/testng-fast.xml" />
+    <option name="PACKAGE_NAME" value="" />
+    <option name="MAIN_CLASS_NAME" value="" />
+    <option name="METHOD_NAME" value="" />
+    <option name="GROUP_NAME" value="" />
+    <option name="TEST_OBJECT" value="SUITE" />
+    <option name="VM_PARAMETERS" value="" />
+    <option name="PARAMETERS" value="" />
+    <option name="WORKING_DIRECTORY" value="" />
+    <option name="OUTPUT_DIRECTORY" value="" />
+    <option name="ANNOTATION_TYPE" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <option name="TEST_SEARCH_SCOPE">
+      <value defaultName="moduleWithDependencies" />
+    </option>
+    <option name="USE_DEFAULT_REPORTERS" value="false" />
+    <option name="PROPERTIES_FILE" value="" />
+    <envs />
+    <properties />
+    <listeners />
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method />
+  </configuration>
+</component>

.idea/runConfigurations/Server.xml

+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="Server" type="#com.intellij.j2ee.web.tomcat.TomcatRunConfigurationFactory" factoryName="Local" APPLICATION_SERVER_NAME="Tomcat 7.0.27">
+    <option name="OPEN_IN_BROWSER" value="false" />
+    <option name="OPEN_IN_BROWSER_URL" value="http://localhost:8111" />
+    <option name="COMMON_VM_ARGUMENTS" value="-ea -Xmx2384m -XX:MaxPermSize=200m -Ddebug=true -server -XX:+HeapDumpOnOutOfMemoryError -Djava.awt.headless -DTC.res.disableAll=true -Dteamcity.development.mode=true -Dteamcity.development.shadowCopyClasses=true -Dteamcity.data.path=$TeamCityDistribution$/../PluginDev.Data -Dteamcity_logs=$TeamCityDistribution$/logs -Dlog4j.configuration=file:$TeamCityDistribution$/conf/teamcity-server-log4j.xml" />
+    <option name="UPDATING_POLICY" value="redeploy-artifacts" />
+    <deployment>
+      <file path="$TeamCityDistribution$/webapps/ROOT">
+        <settings>
+          <option name="CONTEXT_PATH" value="/bs" />
+        </settings>
+      </file>
+    </deployment>
+    <server-settings>
+      <option name="BASE_DIRECTORY_NAME" value="Unnamed__NETPackagesSupport_2" />
+    </server-settings>
+    <predefined_log_file id="TOMCAT_LOCALHOST_LOG_ID" enabled="true" />
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <RunnerSettings RunnerId="Cover" />
+    <RunnerSettings RunnerId="Debug">
+      <option name="DEBUG_PORT" value="60644" />
+      <option name="TRANSPORT" value="0" />
+      <option name="LOCAL" value="true" />
+    </RunnerSettings>
+    <RunnerSettings RunnerId="Profile ">
+      <option name="myExternalizedOptions" value="&#10;additional-options2=onexit\=snapshot&#10;" />
+    </RunnerSettings>
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="Cover">
+      <option name="USE_ENV_VARIABLES" value="true" />
+      <STARTUP>
+        <option name="USE_DEFAULT" value="true" />
+        <option name="SCRIPT" value="" />
+        <option name="VM_PARAMETERS" value="" />
+        <option name="PROGRAM_PARAMETERS" value="" />
+      </STARTUP>
+      <SHUTDOWN>
+        <option name="USE_DEFAULT" value="true" />
+        <option name="SCRIPT" value="" />
+        <option name="VM_PARAMETERS" value="" />
+        <option name="PROGRAM_PARAMETERS" value="" />
+      </SHUTDOWN>
+    </ConfigurationWrapper>
+    <ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="Debug">
+      <option name="USE_ENV_VARIABLES" value="true" />
+      <STARTUP>
+        <option name="USE_DEFAULT" value="true" />
+        <option name="SCRIPT" value="" />
+        <option name="VM_PARAMETERS" value="" />
+        <option name="PROGRAM_PARAMETERS" value="" />
+      </STARTUP>
+      <SHUTDOWN>
+        <option name="USE_DEFAULT" value="true" />
+        <option name="SCRIPT" value="" />
+        <option name="VM_PARAMETERS" value="" />
+        <option name="PROGRAM_PARAMETERS" value="" />
+      </SHUTDOWN>
+    </ConfigurationWrapper>
+    <ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="Profile ">
+      <option name="USE_ENV_VARIABLES" value="true" />
+      <STARTUP>
+        <option name="USE_DEFAULT" value="true" />
+        <option name="SCRIPT" value="" />
+        <option name="VM_PARAMETERS" value="" />
+        <option name="PROGRAM_PARAMETERS" value="" />
+      </STARTUP>
+      <SHUTDOWN>
+        <option name="USE_DEFAULT" value="true" />
+        <option name="SCRIPT" value="" />
+        <option name="VM_PARAMETERS" value="" />
+        <option name="PROGRAM_PARAMETERS" value="" />
+      </SHUTDOWN>
+    </ConfigurationWrapper>
+    <ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="Run">
+      <option name="USE_ENV_VARIABLES" value="true" />
+      <STARTUP>
+        <option name="USE_DEFAULT" value="true" />
+        <option name="SCRIPT" value="" />
+        <option name="VM_PARAMETERS" value="" />
+        <option name="PROGRAM_PARAMETERS" value="" />
+      </STARTUP>
+      <SHUTDOWN>
+        <option name="USE_DEFAULT" value="true" />
+        <option name="SCRIPT" value="" />
+        <option name="VM_PARAMETERS" value="" />
+        <option name="PROGRAM_PARAMETERS" value="" />
+      </SHUTDOWN>
+    </ConfigurationWrapper>
+    <method>
+      <option name="BuildArtifacts" enabled="true">
+        <artifact name="deploy" />
+      </option>
+    </method>
+  </configuration>
+</component>

.idea/scopes/scope_settings.xml

+<component name="DependencyValidationManager">
+  <state>
+    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+  </state>
+</component>

.idea/uiDesigner.xml

+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/../" vcs="hg4idea" />
+  </component>
+</project>
+
+Flaky tests plugin

build/ant.build.xml

+<project name="build hooks" default="replace-tokens-in-teamcity-plugin-xml" basedir=".">
+
+
+  <target name="replace-tokens-in-teamcity-plugin-xml">
+    <property name="home" value="${artifact.output.path}"/>
+
+    <echo message="replacing tokens in teamcity-plugin.xml file under ${home}"/>
+
+    <condition property="build.number" value="snapshot" else="${build.number}">
+      <not>
+        <isset property="build.number"/>
+      </not>
+    </condition>
+
+    <echo message="Setting version to: ${build.number}"/>
+    <!-- update all references in teamcity-plugin.xml files -->
+    <replace dir="${home}" summary="true">
+      <include name="**/teamcity-plugin.xml"/>
+
+      <replacefilter token="@Plugin_Version@" value="${build.number}"/>
+      <replacefilter token="@Plugin_Vendor@" value="JetBrains, s.r.o."/>
+      <replacefilter token="@Plugin_Vendor_Url@" value="http://www.jetbrains.com"/>
+    </replace>
+  </target>
+
+</project>

idea-resolve-helper.iml

+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="Spring" name="Spring">
+      <configuration>
+        <fileset id="fileset1" name="idea resolve helper" removed="false">
+          <file>file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/build-server-plugin-agents-statistics-web.xml</file>
+          <file>file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/build-server-plugin-buildFailures.xml</file>
+          <file>file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/build-server-plugin-dotnet-pdb.xml</file>
+          <file>file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/build-server-plugin-freespace.xml</file>
+          <file>file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/buildServerConfigurator.xml</file>
+          <file>file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/buildServerPluginsSupportWeb.xml</file>
+          <file>file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/buildServerSpringStatistics.xml</file>
+          <file>file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/buildServerSpringWeb.xml</file>
+        </fileset>
+      </configuration>
+    </facet>
+    <facet type="web" name="Web">
+      <configuration>
+        <descriptors>
+          <deploymentDescriptor name="web.xml" url="file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/web.xml" />
+        </descriptors>
+        <webroots>
+          <root url="file://$TeamCityDistribution$/webapps/ROOT" relative="/" />
+        </webroots>
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$TeamCityDistribution$/webapps/ROOT">
+      <sourceFolder url="file://$TeamCityDistribution$/webapps/ROOT" isTestSource="false" />
+      <excludeFolder url="file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/plugins" />
+      <excludeFolder url="file://$TeamCityDistribution$/webapps/ROOT/plugins" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/standard.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="library" name="standard.jar" level="project" />
+    <orderEntry type="library" name="TeamCity server runtime" level="project" />
+  </component>
+</module>
+

lib/jdbc/hsqldb.jar

Binary file added.

lib/jdbc/jtds-1.2.2.jar

Binary file added.

lib/jdbc/mysql-connector-java-5.1.6-bin.jar

Binary file added.

lib/jdbc/ojdbc6.jar

Binary file added.

lib/jdbc/orai18n.jar

Binary file added.

lib/jdbc/postgresql-8.2-505.jdbc3.jar

Binary file added.

lib/jdbc/sqljdbc4.jar

Binary file added.

lib/jdbc/sybase-ase15-jconn4.jar

Binary file added.

lib/jmock/hamcrest-core-1.1.jar

Binary file added.

lib/jmock/hamcrest-library-1.1.jar

Binary file added.

lib/jmock/jmock-2.5.1-javadoc.zip

Binary file added.

lib/jmock/jmock-2.5.1.jar

Binary file added.

lib/jmock/jmock-core-1.2.0.jar

Binary file added.

lib/testng/testng-5.14.1-javadoc.jar

Binary file added.

lib/testng/testng-5.14.1.jar

Binary file added.

server/fake-teamcity-server-plugin-context.xml

+<?xml version="1.0" encoding="UTF-8"?>
+<!--suppress SpringBeanInstantiationInspection -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
+       default-autowire="constructor">
+  <!-- this is a fake spring context xml to make IDEA know all implicit beans that are available for plugin -->
+  <bean class="jetbrains.buildServer.web.openapi.PluginDescriptor"/>
+</beans>

server/resources/analysis.css

+/* Tests list */
+
+#flaky .testFailedInPart {
+  display: none;
+}
+
+.env {
+  width: 40%;
+}
+
+.action-bar .env {
+  padding-left: 0.8em;
+}
+
+/* Start button */
+
+#start-button {
+  margin: 0.5em 0 3em 0;
+}
+
+#flaky .buttonWrapper {
+  width: 96px;
+}
+
+#flaky .buttonWrapper .btn_main {
+  width: 80px;
+}
+
+/* Test details */
+
+.test-details {
+  padding: 0.5em 0 1em 2.3em;
+  background: #f5f5f5;
+}
+
+.test-details table {
+  width: 100%;
+  border-collapse: collapse;
+}
+
+.test-details table.modificationBuilds {
+  width: 80%;
+  margin: 0.4em 0 0 0;
+}
+
+.lt1200 .test-details table.modificationBuilds {
+  width: 100%;
+}
+
+.test-details .reason {
+  margin-bottom: 1.5em;
+}
+
+.test-details .stats {
+  margin-bottom: 0.4em;
+}
+
+.test-details table.modificationBuilds tr {
+  border: none;
+}
+
+.test-details table.modificationBuilds td {
+  padding-top: 2px;
+  padding-bottom: 1px;
+  border: none;
+  vertical-align: top;
+  line-height: 1em;
+}
+
+.test-details table.modificationBuilds td.fail {
+  padding-left: 0;
+  color: red;
+  white-space: nowrap;
+}
+
+.test-details table.modificationBuilds td.success {
+  padding-left: 0;
+  color: green;
+  white-space: nowrap;
+}
+
+.test-details table.modificationBuilds .bt {
+  width: 20%;
+  white-space: nowrap;
+}
+
+.test-details table.modificationBuilds .build {
+  width: 70%;
+}
+
+.test-details td.block {
+  width: 30%;
+  vertical-align: top;
+  padding-right: 0.5em;
+}
+
+.test-details div.block {
+  background: #E3E9EF;
+  padding: 2px;
+}
+
+.test-details .block .title {
+  padding: 0 5px;
+}
+
+.test-details .block .content {
+  background: #fff;
+  padding: 5px;
+}
+
+.test-details .block .content td {
+  white-space: nowrap;
+}
+
+.test-details .block .zero {
+  opacity: 0.5;
+
+  -webkit-transition: opacity 0.1s linear;
+  -moz-transition: opacity 0.1s linear;
+  -ms-transition: opacity 0.1s linear;
+  -o-transition: opacity 0.1s linear;
+  transition: opacity 0.1s linear;
+}
+
+.test-details .block .zero:hover {
+  opacity: 1.0;
+}
+
+.test-details .block .procent {
+  width: 3em;
+  text-align: right;
+  padding-left: 1em;
+}
+
+/* Settings dialog */
+
+#settingsFormDialog {
+  width: 30em;
+}
+
+#dialog-contents table {
+  width: 100%;
+}
+
+#dialog-contents td {
+  vertical-align: top;
+}
+
+#dialog-contents {
+  min-height: 11em;
+  padding: 0.5em;
+}
+
+#dialog-contents td.head {
+  width: 10em;
+}
+
+#excludeBuildTypes {
+  width: 100%;
+  height: 10em;
+}
+
+#analyseTimePeriodDays {
+  width: 100%;
+}

server/resources/analysis.js

+BS.Flaky = {
+  start: function(projectId) {
+    var progressIcon = $j("#startAnalysisProgress");
+    progressIcon.show();
+
+    var parameters = {
+      projectId: projectId,
+      excludeBuildTypes: ($j("#excludeBuildTypes").val() || []).join(":"),
+      analyseTimePeriodDays: $j("#analyseTimePeriodDays").val(),
+      analyseFullHistory: $j("#analyseFullHistory").is(":checked"),
+      speedUpAlwaysFailing: $j("#speedUpAlwaysFailing").is(":checked"),
+      minSeriesNumber: $j("#minSeriesNumber").val(),
+      averageSeriesLength: $j("#averageSeriesLength").val()
+    };
+
+    BS.ajaxRequest("analyzeTests.html", {
+      method: "POST",
+      parameters: parameters,
+      onComplete: function() {
+        progressIcon.hide();
+        $("flaky").refresh();
+      }
+    });
+    return false;
+  },
+
+  scheduleReload: function() {
+    setTimeout(function() {
+      $("flaky").refresh();
+    }, 2000);
+  }
+};
+
+BS.Flaky.Dialog = OO.extend(BS.AbstractModalDialog, {
+  show: function() {
+    this.showCentered();
+    this.initTabs();
+    this.initFields();
+    return false;
+  },
+
+  initTabs: function() {
+    $j("#dialog-tabs a").each(function() {
+      var link = $j(this);
+      var li = link.parent().parent();
+      var id = li.attr("id");
+      link.click(function() {
+        $j("#dialog-contents > div").hide();
+        $j("#" + id + "-content").show();
+        li.addClass("selected")
+          .siblings().removeClass("selected");
+        return false;
+      });
+    })
+  },
+
+  initFields: function() {
+    this._saveValues();
+    $j("#analyseFullHistory").change(function() {
+      var checked = $j(this).is(":checked");
+      $j("#analyseTimePeriodDays").prop("disabled", checked);
+    });
+  },
+
+  validate: function() {
+    var period = $j("#analyseTimePeriodDays").val();
+    if (!this._isInteger(period)) {
+      alert("Incorrect time period value");
+      return false;
+    }
+    if (!this._isPositive(period)) {
+      alert("Incorrect time period value: should be positive");
+      return false;
+    }
+
+    var seriesNum = $j("#minSeriesNumber").val();
+    if (!this._isInteger(seriesNum)) {
+      alert("Incorrect series number value");
+      return false;
+    }
+    if (!this._isPositive(seriesNum)) {
+      alert("Incorrect series number value: should be positive");
+      return false;
+    }
+
+    var seriesLength = $j("#averageSeriesLength").val();
+    if (!this._isFloat(seriesLength)) {
+      alert("Incorrect series length value");
+      return false;
+    }
+    if (!this._isPositive(seriesLength)) {
+      alert("Incorrect series length value: should be positive");
+      return false;
+    }
+
+    return true;
+  },
+
+  cancel: function() {
+    this._restoreValues();
+    this.doClose();
+    return false;
+  },
+
+  start: function(projectId) {
+    if (this.validate()) {
+      BS.Flaky.start(projectId);
+      this.doClose();
+    }
+    return false;
+  },
+
+  // http://stackoverflow.com/questions/1019515/javascript-test-for-an-integer
+  _isInteger: function(value) {
+    return (parseFloat(value) == parseInt(value)) && !isNaN(value);
+  },
+
+  _isPositive: function(value) {
+    return parseFloat(value) > 0;
+  },
+
+  _isFloat: function(value) {
+    return !isNaN(parseFloat(value));
+  },
+
+  _saveValues: function() {
+    if (this._values) return;
+
+    var values = this._values = {};
+    $j("#dialog-contents").find("input[type=text], select").each(function() {
+      var self = $j(this);
+      values[self.attr("id")] = self.val();
+    });
+    $j("#dialog-contents").find("input[type=checkbox]").each(function() {
+      var self = $j(this);
+      values[self.attr("id")] = self.prop("checked");
+    });
+  },
+
+  _restoreValues: function() {
+    var values = this._values;
+    $j("#dialog-contents").find("input[type=text], select").each(function() {
+      var self = $j(this);
+      self.val(values[self.attr("id")]).trigger("change");
+    });
+    $j("#dialog-contents").find("input[type=checkbox]").each(function() {
+      var self = $j(this);
+      self.prop("checked", values[self.attr("id")]).trigger("change");
+    });
+  },
+
+  getContainer: function() {
+    return $('settingsFormDialog');
+  },
+
+  formElement: function() {
+    return $('settingsForm');
+  },
+});
+
+BS.TestDetails._toggleDetails = BS.TestDetails.toggleDetails;
+BS.TestDetails.toggleDetails = function(link, url) {
+  var idx = url.indexOf("?");
+  url = "/flakyTestDetails.html" + url.substr(idx);
+  return this._toggleDetails(link, url);
+};

server/resources/analysis.jsp

+<%@ include file="/include.jsp" %><%@
+    taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@
+    taglib prefix="tt" tagdir="/WEB-INF/tags/tests" %><%@
+    taglib prefix="bs" tagdir="/WEB-INF/tags"
+%><jsp:useBean id="bean" type="jetbrains.buildServer.serverSide.flaky.web.TestsAnalysisBean" scope="request"
+
+/><bs:refreshable containerId="flaky" pageUrl="${pageUrl}">
+  <c:choose>
+    <c:when test="${bean.inProgress}">
+      <forms:progressRing className="progressRingInline"/> ${bean.progress.currentStep}
+      <c:if test="${bean.progress.totalSize > 0}">
+        <b><fmt:formatNumber value="${(bean.progress.doneSize / bean.progress.totalSize) * 100}"
+                             maxFractionDigits="0" />%</b> done
+        (${bean.progress.doneSize} of ${bean.progress.totalSize})
+      </c:if>
+      <script type="text/javascript">
+        BS.Flaky.scheduleReload();
+      </script>
+    </c:when>
+
+    <c:when test="${not bean.hasData}">
+      <c:choose>
+        <c:when test="${bean.testAnalysisEverStarted}">
+          <jsp:include page="printResultShort.jsp"/>
+        </c:when>
+        <c:otherwise>
+          No tests were analyzed in this project so far.
+          <jsp:include page="startButton.jsp"/>
+        </c:otherwise>
+      </c:choose>
+    </c:when>
+
+    <c:when test="${bean.hasData}">
+      <jsp:include page="printResultShort.jsp"/>
+
+      <c:if test="${bean.hasFlaky}">
+        <c:set var="title">Environment-dependent tests: ${bean.flakyTestsSize}</c:set>
+        <bs:_collapsibleBlock title="${title}" id="flakyTestsBlock">
+          <bs:trimWhitespace
+            ><tt:testGroupWithActions groupedTestsBean="${bean.flakyTests}"
+                                      defaultOption="package"
+                                      groupSelector="true"
+                                      id="flaky">
+              <jsp:attribute name="afterToolbar">
+                <td class="env">Environment specifics</td>
+                <td>&nbsp;</td>
+              </jsp:attribute>
+              <jsp:attribute name="testAfterName">
+                <bs:changeRequest key="testBean" value="${testBean}">
+                  <jsp:include page="environmentDetails.jsp"/>
+                </bs:changeRequest>
+              </jsp:attribute>
+             </tt:testGroupWithActions
+          ></bs:trimWhitespace>
+        </bs:_collapsibleBlock>
+      </c:if>
+
+      <c:if test="${bean.hasSuspicious}">
+        <c:set var="title">Suspicious tests: ${bean.suspiciousTestsSize}</c:set>
+        <bs:_collapsibleBlock title="${title}" id="suspiciousTestsBlock">
+          <tt:testGroupWithActions groupedTestsBean="${bean.suspiciousTests}"
+                                   defaultOption="package"
+                                   groupSelector="true"
+                                   id="suspicious">
+            <jsp:attribute name="afterToolbar">
+              <td class="env">Environment specifics</td>
+              <td>&nbsp;</td>
+            </jsp:attribute>
+            <jsp:attribute name="testAfterName">
+              <bs:changeRequest key="testBean" value="${testBean}">
+                <jsp:include page="environmentDetails.jsp"/>
+              </bs:changeRequest>
+            </jsp:attribute>
+          </tt:testGroupWithActions>
+        </bs:_collapsibleBlock>
+      </c:if>
+
+      <c:if test="${bean.hasAlwaysFailing}">
+        <c:set var="title">Tests that always fail: ${bean.alwaysFailingTestsSize}</c:set>
+        <bs:_collapsibleBlock title="${title}" id="alwaysFailingTestsBlock" collapsedByDefault="true">
+          <tt:testGroupWithActions groupedTestsBean="${bean.alwaysFailingTests}"
+                                         defaultOption="package"
+                                         groupSelector="true"
+                                         id="always">
+          </tt:testGroupWithActions>
+        </bs:_collapsibleBlock>
+      </c:if>
+    </c:when>
+  </c:choose>
+
+  <jsp:include page="customSettingsDialog.jsp"/>
+</bs:refreshable>

server/resources/buildTypes.jsp

+<%@ include file="/include.jsp" %><%@
+    taglib prefix="util" uri="/WEB-INF/functions/util"
+  %><jsp:useBean id="buildTypes" type="java.util.List" scope="request"
+
+  /><c:set var="id" value="${util:uniqueId()}"
+  /><c:choose>
+<c:when test="${fn:length(buildTypes) == 1}"><bs:buildTypeLink buildType="${buildTypes[0]}"/> build configuration</c:when>
+<c:otherwise>
+  <bs:simplePopup controlId="popup${id}" linkOpensPopup="true"
+                  popup_options="shift: {x: -140, y: 20}">
+    <jsp:attribute name="content">
+      <c:forEach items="${buildTypes}" var="bt">
+        <div>
+          <bs:buildTypeLinkFull buildType="${bt}"/>
+        </div>
+      </c:forEach>
+    </jsp:attribute>
+    <jsp:body>
+      ${fn:length(buildTypes)} build configurations
+    </jsp:body>
+  </bs:simplePopup>
+</c:otherwise>
+</c:choose>

server/resources/customSettingsDialog.jsp

+<%@ include file="/include.jsp"
+%><jsp:useBean id="bean" type="jetbrains.buildServer.serverSide.flaky.web.TestsAnalysisBean" scope="request"/>
+
+<bs:modalDialog formId="settingsForm"
+                title="Custom Test Analysis"
+                action=""
+                closeCommand="return BS.Flaky.Dialog.cancel();"
+                saveCommand="return BS.Flaky.Dialog.start('${bean.project.projectId}');">
+  <c:set var="settings" value="${bean.testAnalysisResult.settings}"/>
+
+  <div id="dialog-tabs" class="simpleTabs clearfix" style="margin-bottom: 0.5em;">
+    <ul class="tabs">
+      <li class="first selected" id="tab-0"><p><a href="#">Build configurations filter</a></p></li>
+      <li id="tab-1"><p><a href="#">Time period</a></p></li>
+      <li class="last" id="tab-2"><p><a href="#">Heuristics</a></p></li>
+    </ul>
+  </div>
+
+  <div id="dialog-contents">
+    <div id="tab-0-content">
+      <select id="excludeBuildTypes" multiple="multiple">
+        <c:forEach items="${bean.buildTypeSettings}" var="entry">
+          <forms:option value="${entry.key.buildTypeId}" selected="${entry.value}">
+            <c:out value="${entry.key.name}"/>
+          </forms:option>
+        </c:forEach>
+      </select>
+
+      <div class="grayNote">Selected build configurations will not be used in analysis</div>
+    </div>
+
+    <div id="tab-1-content" style="display: none;">
+      <div style="margin-bottom: 1em;">
+        <forms:checkbox name="analyseFullHistory" checked="${settings.analyseFullHistory}"/>
+        <label for="analyseFullHistory">Analyse full history for each test</label>
+
+        <div class="grayNote">Unchecking this option may speed-up the analysis</div>
+      </div>
+
+      <div>
+        <table>
+          <tr>
+            <td class="head">
+              <label for="analyseTimePeriodDays">Time period (days):</label>
+            </td>
+            <td>
+              <forms:textField name="analyseTimePeriodDays" value="${settings.analyseTimePeriodDays}"
+                               disabled="${settings.analyseFullHistory}"/>
+            </td>
+          </tr>
+        </table>
+        <div class="grayNote">Only builds started in a specified time slot will be processed</div>
+      </div>
+    </div>
+
+    <div id="tab-2-content" style="display: none;">
+      <div style="margin-bottom: 1em;">
+        <forms:checkbox name="speedUpAlwaysFailing" checked="${settings.speedUpAlwaysFailing}"/>
+        <label for="speedUpAlwaysFailing">Speed up processing of tests with 100% failure rate</label>
+
+        <div class="grayNote">Checking this option may produce inaccurate results, but work significantly faster</div>
+      </div>
+
+      <div>
+        <table>
+          <tr>
+            <td class="head">
+              <label for="minSeriesNumber">Minimum series number:</label>
+            </td>
+            <td>
+              <forms:textField name="minSeriesNumber" value="${settings.minSeriesNumber}"/>
+            </td>
+          </tr>
+          <tr>
+            <td class="head">
+              <label for="averageSeriesLength">Maximum average series length:</label>
+            </td>
+            <td>
+              <forms:textField name="averageSeriesLength" value="${settings.averageSeriesLength}"/>
+            </td>
+          </tr>
+        </table>
+      </div>
+      <div class="grayNote">
+        The values are used to determine tests that fail suspiciously too often.
+        The <i>series</i> means a collection of consecutive test failures.
+      </div>
+    </div>
+  </div>
+
+  <div class="popupSaveButtonsBlock">
+    <forms:cancel onclick="return BS.Flaky.Dialog.cancel();"/>
+    <forms:submit label="Start" onclick="return BS.Flaky.Dialog.start('${bean.project.projectId}');"/>
+  </div>
+</bs:modalDialog>

server/resources/environmentDetails.jsp

+<%@ include file="/include.jsp"
+%><jsp:useBean id="testBean" type="jetbrains.buildServer.web.problems.STestBean" scope="request"
+/><jsp:useBean id="bean" type="jetbrains.buildServer.serverSide.flaky.web.TestsAnalysisBean" scope="request"
+
+/><c:set var="test" value="${testBean.run.test}"
+/><c:set var="details" value="${bean.details[test.testNameId]}"/>
+<%--@elvariable id="details" type="jetbrains.buildServer.serverSide.flaky.web.TestWebDetails"--%>
+
+</td>
+<td class="env">
+  <c:if test="${details.failedOnlyInSingleBuildType or details.failedOnlyOnSingleAgent}">
+    fails only
+    <c:if test="${details.failedOnlyInSingleBuildType}">
+      in <bs:buildTypeLink buildType="${details.failedInBuildTypes[0]}"/>
+    </c:if>
+    <c:if test="${details.failedOnlyOnSingleAgent}">
+      on <bs:agentDetailsLink agent="${details.failedOnAgents[0]}"/>
+    </c:if>
+  </c:if>
+</td>
+<td>

server/resources/failureRate.jsp

+<%@ include file="/include.jsp" %>
+<jsp:useBean id="failureRate" type="jetbrains.buildServer.serverSide.flaky.data.FailureRate" scope="request"/>
+<td class="procent" <bs:tooltipAttrs text="${failureRate.failures} / ${failureRate.totalRuns}"/> >
+  <fmt:formatNumber value="${(failureRate.failures / failureRate.totalRuns) * 100}"
+                    minFractionDigits="1"
+                    maxFractionDigits="1" />%
+</td>

server/resources/printResultShort.jsp

+<%@ include file="/include.jsp"
+%><jsp:useBean id="bean" type="jetbrains.buildServer.serverSide.flaky.web.TestsAnalysisBean" scope="request"
+/><c:set var="testAnalysisResult" value="${bean.testAnalysisResult}" />
+<div>
+  Last test analysis performed <bs:elapsedTime time="${testAnalysisResult.finishDate}"/> (completed in ${bean.testAnalysisDuration}).
+  Total tests analysed: <b>${testAnalysisResult.totalTests}</b>.
+</div>
+<div>
+  <c:set var="settings" value="${testAnalysisResult.settings}"/>
+  Settings used:
+  <c:if test="${empty settings.excludeBuildTypes}">all build configurations included,</c:if>
+  <c:if test="${not empty settings.excludeBuildTypes}">
+    <bs:changeRequest key="buildTypes" value="${bean.excludedBuildTypes}">
+      <jsp:include page="buildTypes.jsp"/>
+    </bs:changeRequest>
+    excluded,
+  </c:if>
+
+  <c:if test="${settings.analyseFullHistory}">full tests history processed,</c:if>
+  <c:if test="${not settings.analyseFullHistory}">tests history for last ${settings.analyseTimePeriodDays} days processed,</c:if>
+
+  magic numbers (heuristics): <c:if test="${settings.speedUpAlwaysFailing}">fast processing of tests with 100% failure rate,</c:if>
+  minimum series number <b>${settings.minSeriesNumber}</b>, maximum average series length <b>${settings.averageSeriesLength}</b>.
+</div>
+
+<jsp:include page="startButton.jsp"/>

server/resources/startButton.jsp

+<%@ include file="/include.jsp"
+%><jsp:useBean id="project" type="jetbrains.buildServer.serverSide.SProject" scope="request"
+/><jsp:useBean id="bean" type="jetbrains.buildServer.serverSide.flaky.web.TestsAnalysisBean" scope="request"
+
+/><c:set var="caption" value="${bean.testAnalysisEverStarted ? 'Start Again' : 'Start Now'}"/>
+
+<div id="start-button">
+  <span class="buttonWrapper">
+    <button class="btn btn_mini btn_main" onclick="return BS.Flaky.start('${project.projectId}');">${caption}</button>
+    <button class="btn btn_mini btn_append" onclick="return BS.Flaky.Dialog.show();" title="Run custom build">...</button>
+  </span>
+  <forms:progressRing id="startAnalysisProgress" className="progressRingInline" style="display:none"/>
+</div>

server/resources/testDetails.jsp

+<%@ include file="/include.jsp" %><%@
+    taglib prefix="bs" tagdir="/WEB-INF/tags"
+%><jsp:useBean id="testDetails" type="jetbrains.buildServer.serverSide.flaky.web.TestWebDetails" scope="request"
+
+/><div class="test-details">
+  <c:if test="${testDetails.hasReason}">
+    <div class="reason">
+      <c:choose>
+        <c:when test="${testDetails.withoutChangesReason}">
+          <div>Diagnosis: test failed in a build without changes: <bs:buildLinkFull build="${testDetails.buildWithoutChanges}"/></div>
+        </c:when>
+        <c:when test="${testDetails.buildsOnSameModificationReason}">
+          <div>Diagnosis: test run differently in builds with same sources:</div>
+
+          <table class="modificationBuilds">
+            <c:set var="build" value="${testDetails.failedInBuild}"/>
+            <tr class="buildTypeProblem">
+              <td class="fail">Failed in:</td>
+              <td class="bt"><bs:buildTypeLink buildType="${build.buildType}"/></td>
+              <td class="build"><%@ include file="/changeBuild.jspf" %></td>
+            </tr>
+
+            <tr class="buildTypeProblem">
+              <c:set var="build" value="${testDetails.successfulInBuild}"/>
+              <td class="success">Successful in:</td>
+              <td class="bt"><bs:buildTypeLink buildType="${build.buildType}"/></td>
+              <td class="build"><%@ include file="/changeBuild.jspf" %></td>
+            </tr>
+          </table>
+        </c:when>
+        <c:when test="${testDetails.suspiciousStatisticsReason}">
+          <c:set var="suspiciousStats" value="${testDetails.suspiciousStatistics}"/>
+          <div>Diagnosis: test had <b>${suspiciousStats.second}</b> series of consecutive failures with average length of
+               <b><fmt:formatNumber value="${suspiciousStats.first / suspiciousStats.second}"
+                                    minFractionDigits="1"
+                                    maxFractionDigits="1" /></b> builds</div>
+        </c:when>
+      </c:choose>
+    </div>
+  </c:if>
+
+  <div class="stats">
+    <c:set var="stats" value="${testDetails.stats}"/>
+
+    Total test runs: <b>${stats.first}</b>, total failures: <b>${stats.second}</b>,
+    failure rate: <b><fmt:formatNumber value="${stats.first > 0 ? (stats.second / stats.first) * 100 : 0}"
+                                       minFractionDigits="1"
+                                       maxFractionDigits="1" />%</b>
+    <br>
+    Failure rates in different build configurations and agents:
+  </div>
+
+  <table>
+    <tr>
+      <td class="block">
+        <div class="block">
+          <div class="title">Build Types</div>
+          <div class="content">
+            <table>
+              <c:forEach items="${testDetails.allBuildTypes}" var="bt">
+                <c:set var="failureRate" value="${testDetails.testData.buildTypeFailureRates[bt.buildTypeId]}"/>
+                <tr ${failureRate.failures == 0 ? "class='zero'" : ""}>
+                  <td><bs:buildTypeLink buildType="${bt}"/></td>
+                  <bs:changeRequest key="failureRate" value="${failureRate}">
+                    <jsp:include page="failureRate.jsp"/>
+                  </bs:changeRequest>
+                </tr>
+              </c:forEach>
+            </table>
+          </div>
+        </div>
+      </td>
+      <td class="block">
+        <div class="block">
+          <div class="title">Agents</div>
+          <div class="content">
+            <table>
+              <c:forEach items="${testDetails.allAgents}" var="agent">
+                <c:set var="failureRate" value="${testDetails.testData.agentFailureRates[agent.name]}"/>
+                <tr ${failureRate.failures == 0 ? "class='zero'" : ""}>
+                  <%--<td><bs:agentDetailsLink agent="${agent}"/></td>--%>
+                  <td><bs:agentDetailsFullLink agent="${agent}"
+                                               doNotShowOutdated="true"
+                                               doNotShowOSIcon="false"
+                                               doNotShowPoolInfo="true"
+                                               showRunningStatus="false"
+                                               doNotShowUnavailableStatus="true"/></td>
+                  <bs:changeRequest key="failureRate" value="${failureRate}">
+                    <jsp:include page="failureRate.jsp"/>
+                  </bs:changeRequest>
+                </tr>
+              </c:forEach>
+            </table>
+          </div>
+        </div>
+      </td>
+      <td></td>
+    </tr>
+  </table>
+
+  <c:url var="testDetailUrl"
+         value="/project.html?tab=testDetails&testNameId=${testDetails.testData.testId}&projectId=${testDetails.testData.projectId}"/>
+  <a href="${testDetailUrl}" title="View test details">Complete test details &raquo;</a>
+</div>

server/server.iml

+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="Spring" name="Spring">
+      <configuration>
+        <fileset id="fileset1" name="Server" removed="false">
+          <file>file://$MODULE_DIR$/fake-teamcity-server-plugin-context.xml</file>
+          <file>jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/server.jar!/META-INF/build-server-declarative-extensibility.xml</file>
+          <file>jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/server.jar!/META-INF/build-server-plugin-agents-statistics.xml</file>
+          <file>jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/server.jar!/META-INF/buildServerCompatMode.xml</file>
+          <file>jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/server.jar!/META-INF/buildServerPermissions.xml</file>
+          <file>jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/server.jar!/META-INF/buildServerPluginsSupport.xml</file>
+          <file>jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/server.jar!/META-INF/buildServerSpring.xml</file>
+          <file>jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/common-impl.jar!/META-INF/shared-spring-sub-container.xml</file>
+          <file>jar://$TeamCityDistribution$/webapps/ROOT/WEB-INF/lib/common-impl.jar!/META-INF/plugin-model-shared-spring.xml</file>
+          <file>file://$TeamCityDistribution$/webapps/ROOT/WEB-INF/buildServerSpringWeb.xml</file>
+          <file>file://$MODULE_DIR$/src/META-INF/build-server-plugin-flaky.xml</file>
+          <file>jar://$TeamCityDistribution$/buildAgent/lib/common-impl.jar!/META-INF/per-plugin-shared-spring.xml</file>
+          <file>jar://$TeamCityDistribution$/buildAgent/lib/common-impl.jar!/META-INF/plugin-model-shared-spring.xml</file>
+          <file>jar://$TeamCityDistribution$/buildAgent/lib/common-impl.jar!/META-INF/shared-spring-sub-container.xml</file>
+        </fileset>
+      </configuration>
+    </facet>
+    <facet type="web" name="server">
+      <configuration>
+        <webroots>
+          <root url="file://$MODULE_DIR$/resources" relative="/plugins/SPECIAL_NAME" />
+        </webroots>
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="idea annotations.jar" level="project" />
+    <orderEntry type="library" name="Common-Api" level="project" />
+    <orderEntry type="library" name="Server-Api" level="project" />
+    <orderEntry type="library" name="standard.jar" level="project" />
+    <orderEntry type="library" name="Idea-OpenApi" level="project" />
+    <orderEntry type="library" name="Servlet Api" level="project" />
+    <orderEntry type="library" name="spring" level="project" />
+    <orderEntry type="library" name="TeamCity server runtime" level="project" />
+  </component>
+</module>
+

server/src/META-INF/build-server-plugin-flaky.xml

+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+
+<!--suppress SpringFacetInspection -->
+<beans default-autowire="constructor">
+  <bean class="jetbrains.buildServer.serverSide.flaky.data.TestAnalysisResultHolder"/>
+  <bean class="jetbrains.buildServer.serverSide.flaky.data.TestAnalysisProgressManager"/>
+  <bean class="jetbrains.buildServer.serverSide.flaky.analyser.AlgorithmsHolder"/>
+  <bean class="jetbrains.buildServer.serverSide.flaky.analyser.TestsAnalyser"/>
+  <bean class="jetbrains.buildServer.serverSide.flaky.web.TestsAnalysisTab"/>
+  <bean class="jetbrains.buildServer.serverSide.flaky.web.RunTestsAnalysisController"/>
+  <bean class="jetbrains.buildServer.serverSide.flaky.web.ShowTestDetailsController"/>
+</beans>

server/src/jetbrains/buildServer/serverSide/flaky/analyser/AlgorithmsHolder.java

+/*
+ * Copyright (c) 2000-2012 by JetBrains s.r.o. All Rights Reserved.
+ * Use is subject to license terms.
+ */
+package jetbrains.buildServer.serverSide.flaky.analyser;
+
+import jetbrains.buildServer.serverSide.SBuildServer;
+import jetbrains.buildServer.serverSide.flaky.data.TestAnalysisSettings;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Holds all test analysis algorithms.
+ *
+ * @author Maxim Podkolzine (maxim.podkolzine@jetbrains.com)
+ * @since 8.0
+ */
+public class AlgorithmsHolder {
+  private final SBuildServer myBuildServer;
+
+  public AlgorithmsHolder(@NotNull SBuildServer buildServer) {
+    myBuildServer = buildServer;
+  }
+
+  @NotNull
+  public List<CheckAlgorithm> getAlgorithms(@NotNull TestAnalysisSettings settings) {
+    List<CheckAlgorithm> algorithms = new ArrayList<CheckAlgorithm>();
+    algorithms.add(new SimpleStatusAlgorithm());