changeset 48:c6dfb8e038ce

logging improved (fixed TW-31876)
author Evgeniy.Koshkin
date Tue, 01 Oct 2013 15:43:17 +0400
parents ac1c53584add
children 4c3322e901e1
files agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java
diffstat 1 files changed, 46 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java	Tue Oct 01 10:54:38 2013 +0400
+++ b/agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java	Tue Oct 01 15:43:17 2013 +0400
@@ -31,8 +31,12 @@
 
   @NotNull private final ArtifactsWatcher myArtifactsWatcher;
   @NotNull private final JetSymbolsExe myJetSymbolsExe;
-  @Nullable private AgentRunningBuild myBuild;
-  @Nullable private Collection<File> mySymbolsToProcess;
+  @NotNull private final Collection<File> mySymbolsToProcess = new CopyOnWriteArrayList<File>();
+
+  @Nullable private BuildProgressLogger myProgressLogger;
+  @Nullable private File myBuildTempDirectory;
+  @Nullable private File mySrcSrvHomeDir;
+  @Nullable private FileUrlProvider myFileUrlProvider;
 
   public SymbolsIndexer(@NotNull final PluginDescriptor pluginDescriptor, @NotNull final EventDispatcher<AgentLifeCycleListener> agentDispatcher, @NotNull final ArtifactsWatcher artifactsWatcher) {
     myArtifactsWatcher = artifactsWatcher;
@@ -41,34 +45,50 @@
     agentDispatcher.addListener(new AgentLifeCycleAdapter() {
       @Override
       public void buildStarted(@NotNull final AgentRunningBuild runningBuild) {
-        myBuild = runningBuild;
-        mySymbolsToProcess = new CopyOnWriteArrayList<File>();
+        if(runningBuild.getBuildFeaturesOfType(SymbolsConstants.BUILD_FEATURE_TYPE).isEmpty()){
+          LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature disabled. No indexing performed.");
+          return;
+        }
+        LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled.");
+
+        myProgressLogger = runningBuild.getBuildLogger();
+        myBuildTempDirectory = runningBuild.getBuildTempDirectory();
+
+        mySrcSrvHomeDir = WinDbgToolsHelper.getSrcSrvHomeDir(runningBuild);
+        if(mySrcSrvHomeDir == null) {
+          myProgressLogger.error("Failed to find Source Server tools home directory.");
+          LOG.error("Failed to find Source Server tools home directory.");
+        }
+        else
+          myProgressLogger.message("Source Server tools home directory located. " + mySrcSrvHomeDir.getAbsolutePath());
+
+        myFileUrlProvider = FileUrlProviderFactory.getProvider(runningBuild, myProgressLogger);
       }
 
       @Override
       public void afterAtrifactsPublished(@NotNull AgentRunningBuild build, @NotNull BuildFinishedStatus buildStatus) {
         super.afterAtrifactsPublished(build, buildStatus);
-        if (myBuild == null || mySymbolsToProcess == null) return;
-        if(myBuild.getBuildFeaturesOfType(SymbolsConstants.BUILD_FEATURE_TYPE).isEmpty()) return;
-
+        if(!isIndexingApplicable()) return;
         if (mySymbolsToProcess.isEmpty()) {
-          myBuild.getBuildLogger().warning("Symbols weren't found in artifacts to be published.");
+          myProgressLogger.warning("Symbols weren't found in artifacts to be published.");
           LOG.debug("Symbols weren't found in artifacts to be published.");
         } else {
+          myProgressLogger.message("Collecting symbol files signatures.");
+          LOG.debug("Collecting symbol files signatures.");
           try {
-            final File symbolSignaturesFile = FileUtil.createTempFile(myBuild.getBuildTempDirectory(), "symbol-signatures-", ".xml", false);
-            myJetSymbolsExe.dumpGuidsToFile(mySymbolsToProcess, symbolSignaturesFile,  myBuild.getBuildLogger());
+            final File symbolSignaturesFile = FileUtil.createTempFile(myBuildTempDirectory, "symbol-signatures-", ".xml", false);
+            myJetSymbolsExe.dumpGuidsToFile(mySymbolsToProcess, symbolSignaturesFile, myProgressLogger);
             if(symbolSignaturesFile.exists()){
+              myProgressLogger.message("Publishing collected symbol files signatures.");
               myArtifactsWatcher.addNewArtifactsPath(symbolSignaturesFile + "=>" + ".teamcity/symbols");
             }
           } catch (IOException e) {
             LOG.error("Error while dumping symbols/binaries signatures.", e);
-            myBuild.getBuildLogger().error("Error while dumping symbols/binaries signatures.");
-            myBuild.getBuildLogger().exception(e);
+            myProgressLogger.error("Error while dumping symbols/binaries signatures.");
+            myProgressLogger.exception(e);
           }
         }
-        mySymbolsToProcess = null;
-        myBuild = null;
+        mySymbolsToProcess.clear();
       }
     });
   }
@@ -76,42 +96,29 @@
   @Override
   public void afterCollectingFiles(@NotNull List<ArtifactsCollection> artifacts) {
     super.afterCollectingFiles(artifacts);
-    if(myBuild == null || mySymbolsToProcess == null) return;
-    final BuildProgressLogger buildLogger = myBuild.getBuildLogger();
-    if(myBuild.getBuildFeaturesOfType(SymbolsConstants.BUILD_FEATURE_TYPE).isEmpty()){
-      LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature disabled. No indexing performed.");
+    if(!isIndexingApplicable()){
+      LOG.debug("Indexing skipped.");
       return;
     }
 
-    final File srcSrvHomeDir = WinDbgToolsHelper.getSrcSrvHomeDir(myBuild);
-    if(srcSrvHomeDir == null) {
-      buildLogger.error("Failed to find Source Server tools home directory.");
-      LOG.error("Failed to find Source Server tools home directory.");
-      return;
-    }
-    buildLogger.message("Source Server tools home directory located. " + srcSrvHomeDir.getAbsolutePath());
-
-    LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled. Searching for suitable files.");
+    LOG.debug("Searching for symbol files in publishing artifacts.");
     final Collection<File> pdbFiles = getArtifactPathsByFileExtension(artifacts, PDB_FILE_EXTENSION);
     if(pdbFiles.isEmpty()) return;
 
-    final FileUrlProvider urlProvider = FileUrlProviderFactory.getProvider(myBuild, buildLogger);
-    if(urlProvider == null) return;
-
-    final PdbFilePatcher pdbFilePatcher = new PdbFilePatcher(myBuild.getBuildTempDirectory(), srcSrvHomeDir, new SrcSrvStreamBuilder(urlProvider));
+    final PdbFilePatcher pdbFilePatcher = new PdbFilePatcher(myBuildTempDirectory, mySrcSrvHomeDir, new SrcSrvStreamBuilder(myFileUrlProvider));
     for(File pdbFile : pdbFiles){
       if(mySymbolsToProcess.contains(pdbFile)){
         LOG.debug(String.format("File %s already processed. Skipped.", pdbFile.getAbsolutePath()));
         continue;
       }
       try {
-        buildLogger.message("Indexing sources appeared in file " + pdbFile.getAbsolutePath());
-        pdbFilePatcher.patch(pdbFile, buildLogger);
+        myProgressLogger.message("Indexing sources appeared in file " + pdbFile.getAbsolutePath());
+        pdbFilePatcher.patch(pdbFile, myProgressLogger);
         mySymbolsToProcess.add(pdbFile);
       } catch (Throwable e) {
         LOG.error("Error occurred while patching symbols file " + pdbFile, e);
-        buildLogger.error("Error occurred while patching symbols file " + pdbFile);
-        buildLogger.exception(e);
+        myProgressLogger.error("Error occurred while patching symbols file " + pdbFile);
+        myProgressLogger.exception(e);
       }
     }
   }
@@ -127,4 +134,8 @@
     }
     return result;
   }
+
+  private boolean isIndexingApplicable() {
+    return myFileUrlProvider != null && mySrcSrvHomeDir != null;
+  }
 }