Mercurial > hg > tc-symbol-server
annotate agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java @ 117:d2c79f95c2a6 default tip
remove tailing slash in teamcity server url when constructing symbol server url
author | Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net |
---|---|
date | Fri, 27 May 2016 15:27:30 +0300 |
parents | 8d6bfbd57bd7 |
children |
rev | line source |
---|---|
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
1 package jetbrains.buildServer.symbols; |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
2 |
3 | 3 import jetbrains.buildServer.agent.*; |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
4 import jetbrains.buildServer.agent.artifacts.ArtifactsWatcher; |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
5 import jetbrains.buildServer.agent.impl.artifacts.ArtifactsBuilderAdapter; |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
6 import jetbrains.buildServer.agent.impl.artifacts.ArtifactsCollection; |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
7 import jetbrains.buildServer.agent.plugins.beans.PluginDescriptor; |
27
76ed2d58c871
- reused home path between all srcsrv-related utilities
Evgeniy.Koshkin
parents:
26
diff
changeset
|
8 import jetbrains.buildServer.symbols.tools.JetSymbolsExe; |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
9 import jetbrains.buildServer.util.EventDispatcher; |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
10 import jetbrains.buildServer.util.FileUtil; |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
11 import org.apache.log4j.Logger; |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
12 import org.jdom.JDOMException; |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
13 import org.jetbrains.annotations.NotNull; |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
14 import org.jetbrains.annotations.Nullable; |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
15 |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
16 import java.io.File; |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
17 import java.io.FileInputStream; |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
18 import java.io.FileOutputStream; |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
19 import java.io.IOException; |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
20 import java.util.*; |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
21 import java.util.concurrent.ConcurrentHashMap; |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
22 |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
23 /** |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
24 * @author Evgeniy.Koshkin |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
25 */ |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
26 public class SymbolsIndexer extends ArtifactsBuilderAdapter { |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
27 |
7 | 28 private static final Logger LOG = Logger.getLogger(SymbolsIndexer.class); |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
29 |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
30 public static final String PDB_FILE_EXTENSION = "pdb"; |
81 | 31 private static final String X64_SRCSRV = "\\x64\\srcsrv"; |
32 private static final String X86_SRCSRV = "\\x86\\srcsrv"; | |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
33 |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
34 @NotNull private final ArtifactsWatcher myArtifactsWatcher; |
110
0d0a3c1aa428
fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
104
diff
changeset
|
35 @NotNull private final ArtifactPathHelper myArtifactPathHelper; |
0d0a3c1aa428
fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
104
diff
changeset
|
36 |
27
76ed2d58c871
- reused home path between all srcsrv-related utilities
Evgeniy.Koshkin
parents:
26
diff
changeset
|
37 @NotNull private final JetSymbolsExe myJetSymbolsExe; |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
38 @NotNull private final Map<File, String> myFileToArtifactMapToProcess = new ConcurrentHashMap<File, String>(); |
48 | 39 |
40 @Nullable private BuildProgressLogger myProgressLogger; | |
41 @Nullable private File myBuildTempDirectory; | |
42 @Nullable private File mySrcSrvHomeDir; | |
43 @Nullable private FileUrlProvider myFileUrlProvider; | |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
44 |
110
0d0a3c1aa428
fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
104
diff
changeset
|
45 public SymbolsIndexer(@NotNull final PluginDescriptor pluginDescriptor, |
0d0a3c1aa428
fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
104
diff
changeset
|
46 @NotNull final EventDispatcher<AgentLifeCycleListener> agentDispatcher, |
0d0a3c1aa428
fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
104
diff
changeset
|
47 @NotNull final ArtifactsWatcher artifactsWatcher, |
0d0a3c1aa428
fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
104
diff
changeset
|
48 @NotNull final ArtifactPathHelper artifactPathHelper) { |
12 | 49 myArtifactsWatcher = artifactsWatcher; |
27
76ed2d58c871
- reused home path between all srcsrv-related utilities
Evgeniy.Koshkin
parents:
26
diff
changeset
|
50 myJetSymbolsExe = new JetSymbolsExe(new File(pluginDescriptor.getPluginRoot(), "bin")); |
110
0d0a3c1aa428
fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
104
diff
changeset
|
51 myArtifactPathHelper = artifactPathHelper; |
12 | 52 |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
53 agentDispatcher.addListener(new AgentLifeCycleAdapter() { |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
54 @Override |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
55 public void buildStarted(@NotNull final AgentRunningBuild runningBuild) { |
98
6d1877c10a3b
mention running build id in agent debug logs
Evgeniy.Koshkin
parents:
81
diff
changeset
|
56 final long buildId = runningBuild.getBuildId(); |
48 | 57 if(runningBuild.getBuildFeaturesOfType(SymbolsConstants.BUILD_FEATURE_TYPE).isEmpty()){ |
98
6d1877c10a3b
mention running build id in agent debug logs
Evgeniy.Koshkin
parents:
81
diff
changeset
|
58 LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature disabled. No indexing will be performed for build with id " + buildId); |
48 | 59 return; |
60 } | |
98
6d1877c10a3b
mention running build id in agent debug logs
Evgeniy.Koshkin
parents:
81
diff
changeset
|
61 LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled for build with id " + buildId); |
48 | 62 |
63 myProgressLogger = runningBuild.getBuildLogger(); | |
64 myBuildTempDirectory = runningBuild.getBuildTempDirectory(); | |
65 | |
81 | 66 mySrcSrvHomeDir = getSrcSrvHomeDir(runningBuild); |
51
39a530910a6a
improve logging in case windbg tools weren't found
Evgeniy.Koshkin
parents:
50
diff
changeset
|
67 if (mySrcSrvHomeDir == null) { |
98
6d1877c10a3b
mention running build id in agent debug logs
Evgeniy.Koshkin
parents:
81
diff
changeset
|
68 LOG.error("Failed to find Source Server tools home directory. No symbol and source indexing will be performed for build with id " + buildId); |
51
39a530910a6a
improve logging in case windbg tools weren't found
Evgeniy.Koshkin
parents:
50
diff
changeset
|
69 myProgressLogger.error("Failed to find Source Server tools home directory. No symbol and source indexing will be performed."); |
39a530910a6a
improve logging in case windbg tools weren't found
Evgeniy.Koshkin
parents:
50
diff
changeset
|
70 return; |
48 | 71 } |
51
39a530910a6a
improve logging in case windbg tools weren't found
Evgeniy.Koshkin
parents:
50
diff
changeset
|
72 LOG.debug("Source Server tools home directory located. " + mySrcSrvHomeDir.getAbsolutePath()); |
39a530910a6a
improve logging in case windbg tools weren't found
Evgeniy.Koshkin
parents:
50
diff
changeset
|
73 myProgressLogger.message("Source Server tools home directory located. " + mySrcSrvHomeDir.getAbsolutePath()); |
48 | 74 |
75 myFileUrlProvider = FileUrlProviderFactory.getProvider(runningBuild, myProgressLogger); | |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
76 } |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
77 |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
78 @Override |
5 | 79 public void afterAtrifactsPublished(@NotNull AgentRunningBuild build, @NotNull BuildFinishedStatus buildStatus) { |
80 super.afterAtrifactsPublished(build, buildStatus); | |
48 | 81 if(!isIndexingApplicable()) return; |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
82 if (myFileToArtifactMapToProcess.isEmpty()) { |
48 | 83 myProgressLogger.warning("Symbols weren't found in artifacts to be published."); |
98
6d1877c10a3b
mention running build id in agent debug logs
Evgeniy.Koshkin
parents:
81
diff
changeset
|
84 LOG.debug("Symbols weren't found in artifacts to be published for build with id " + build.getBuildId()); |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
85 } else { |
48 | 86 myProgressLogger.message("Collecting symbol files signatures."); |
87 LOG.debug("Collecting symbol files signatures."); | |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
88 try { |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
89 final Set<PdbSignatureIndexEntry> signatureLocalFilesData = getSignatures(myFileToArtifactMapToProcess.keySet()); |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
90 if(!signatureLocalFilesData.isEmpty()){ |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
91 final Set<PdbSignatureIndexEntry> indexData = new HashSet<PdbSignatureIndexEntry>(); |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
92 for(PdbSignatureIndexEntry signatureIndexEntry : signatureLocalFilesData){ |
116
8d6bfbd57bd7
fixed searching of pdb by name in order to restore backward compatibility
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
110
diff
changeset
|
93 final String artifactPath = signatureIndexEntry.getArtifactPath(); |
8d6bfbd57bd7
fixed searching of pdb by name in order to restore backward compatibility
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
110
diff
changeset
|
94 if(artifactPath == null) continue; |
8d6bfbd57bd7
fixed searching of pdb by name in order to restore backward compatibility
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
110
diff
changeset
|
95 final File targetPdbFile = new File(artifactPath); |
104
1c462701ed75
fix possible key not found exception
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
101
diff
changeset
|
96 if(myFileToArtifactMapToProcess.containsKey(targetPdbFile)) { |
116
8d6bfbd57bd7
fixed searching of pdb by name in order to restore backward compatibility
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
110
diff
changeset
|
97 indexData.add(new PdbSignatureIndexEntry(signatureIndexEntry.getGuid(), targetPdbFile.getName(), myFileToArtifactMapToProcess.get(targetPdbFile))); |
104
1c462701ed75
fix possible key not found exception
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
101
diff
changeset
|
98 } |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
99 } |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
100 final File indexDataFile = FileUtil.createTempFile(myBuildTempDirectory, SymbolsConstants.SYMBOL_SIGNATURES_FILE_NAME_PREFIX, ".xml", false); |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
101 PdbSignatureIndexUtil.write(new FileOutputStream(indexDataFile), indexData); |
48 | 102 myProgressLogger.message("Publishing collected symbol files signatures."); |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
103 myArtifactsWatcher.addNewArtifactsPath(indexDataFile + "=>" + ".teamcity/symbols"); |
5 | 104 } |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
105 } catch (Exception e) { |
98
6d1877c10a3b
mention running build id in agent debug logs
Evgeniy.Koshkin
parents:
81
diff
changeset
|
106 LOG.error("Error while dumping symbols/binaries signatures for build with id " + build.getBuildId(), e); |
48 | 107 myProgressLogger.error("Error while dumping symbols/binaries signatures."); |
108 myProgressLogger.exception(e); | |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
109 } |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
110 } |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
111 myFileToArtifactMapToProcess.clear(); |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
112 } |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
113 }); |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
114 } |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
115 |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
116 @Override |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
117 public void afterCollectingFiles(@NotNull List<ArtifactsCollection> artifacts) { |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
118 super.afterCollectingFiles(artifacts); |
48 | 119 if(!isIndexingApplicable()){ |
51
39a530910a6a
improve logging in case windbg tools weren't found
Evgeniy.Koshkin
parents:
50
diff
changeset
|
120 LOG.debug("Symbols and sources indexing skipped."); |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
121 return; |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
122 } |
41
4c516ddbddf1
located srcsrv tools home dir under win sdk home dir
Evgeniy.Koshkin
parents:
34
diff
changeset
|
123 |
48 | 124 LOG.debug("Searching for symbol files in publishing artifacts."); |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
125 final Map<File, String> pdbFiles = getArtifactPathsByFileExtension(artifacts, PDB_FILE_EXTENSION); |
25 | 126 if(pdbFiles.isEmpty()) return; |
127 | |
50
89220bce43c8
skipped source indexing of pdb's which weren't built during current build; the reason is that its impossible to construct url's for sources in this case
Evgeniy.Koshkin
parents:
48
diff
changeset
|
128 final PdbFilePatcher pdbFilePatcher = new PdbFilePatcher(myBuildTempDirectory, mySrcSrvHomeDir, new SrcSrvStreamBuilder(myFileUrlProvider, myProgressLogger)); |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
129 for(File pdbFile : pdbFiles.keySet()){ |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
130 if(myFileToArtifactMapToProcess.containsKey(pdbFile)){ |
26
87b24e4efcc3
fixed multiple indexing of the same pdb file
Evgeniy.Koshkin
parents:
25
diff
changeset
|
131 LOG.debug(String.format("File %s already processed. Skipped.", pdbFile.getAbsolutePath())); |
87b24e4efcc3
fixed multiple indexing of the same pdb file
Evgeniy.Koshkin
parents:
25
diff
changeset
|
132 continue; |
87b24e4efcc3
fixed multiple indexing of the same pdb file
Evgeniy.Koshkin
parents:
25
diff
changeset
|
133 } |
12 | 134 try { |
48 | 135 myProgressLogger.message("Indexing sources appeared in file " + pdbFile.getAbsolutePath()); |
136 pdbFilePatcher.patch(pdbFile, myProgressLogger); | |
110
0d0a3c1aa428
fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
104
diff
changeset
|
137 myFileToArtifactMapToProcess.put(pdbFile, myArtifactPathHelper.concatenateArtifactPath(pdbFiles.get(pdbFile), pdbFile.getName())); |
12 | 138 } catch (Throwable e) { |
139 LOG.error("Error occurred while patching symbols file " + pdbFile, e); | |
48 | 140 myProgressLogger.error("Error occurred while patching symbols file " + pdbFile); |
141 myProgressLogger.exception(e); | |
12 | 142 } |
143 } | |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
144 } |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
145 |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
146 private Set<PdbSignatureIndexEntry> getSignatures(Collection<File> files) throws IOException, JDOMException { |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
147 final File guidDumpFile = FileUtil.createTempFile(myBuildTempDirectory, "symbol-signatures-local-", ".xml", false); |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
148 myJetSymbolsExe.dumpGuidsToFile(files, guidDumpFile, myProgressLogger); |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
149 if(guidDumpFile.exists()){ |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
150 myArtifactsWatcher.addNewArtifactsPath(guidDumpFile + "=>" + ".teamcity/symbols"); |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
151 } |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
152 if(guidDumpFile.isFile()) |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
153 return PdbSignatureIndexUtil.read(new FileInputStream(guidDumpFile)); |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
154 else |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
155 return Collections.emptySet(); |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
156 } |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
157 |
81 | 158 @Nullable |
159 private File getSrcSrvHomeDir(@NotNull AgentRunningBuild build) { | |
160 final Map<String,String> agentConfigParameters = build.getAgentConfiguration().getConfigurationParameters(); | |
161 String winDbgHomeDir = agentConfigParameters.get(WinDbgToolsDetector.WIN_DBG_PATH); | |
162 if(winDbgHomeDir == null){ | |
163 LOG.debug("WinDbg tools are not mentioned in agent configuration."); | |
164 return null; | |
165 } | |
166 File srcSrvHomeDir = new File(winDbgHomeDir, X64_SRCSRV); | |
167 if (srcSrvHomeDir.isDirectory()) return srcSrvHomeDir; | |
168 srcSrvHomeDir = new File(winDbgHomeDir, X86_SRCSRV); | |
169 if (srcSrvHomeDir.isDirectory()) return srcSrvHomeDir; | |
170 LOG.debug("Failed to find Source Server tools home directory under WinDbg tools home directory detected on path " + winDbgHomeDir); | |
171 return null; | |
172 } | |
173 | |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
174 private Map<File, String> getArtifactPathsByFileExtension(List<ArtifactsCollection> artifactsCollections, String fileExtension){ |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
175 final Map<File, String> result = new HashMap<File, String>(); |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
176 for(ArtifactsCollection artifactsCollection : artifactsCollections){ |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
177 if(artifactsCollection.isEmpty()) continue; |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
178 final Map<File, String> filePathMap = artifactsCollection.getFilePathMap(); |
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
179 for (final File artifact : filePathMap.keySet()){ |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
180 if(FileUtil.getExtension(artifact.getPath()).equalsIgnoreCase(fileExtension)) |
101
52fc27842bc1
fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents:
98
diff
changeset
|
181 result.put(artifact, filePathMap.get(artifact)); |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
182 } |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
183 } |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
184 return result; |
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
185 } |
48 | 186 |
187 private boolean isIndexingApplicable() { | |
188 return myFileUrlProvider != null && mySrcSrvHomeDir != null; | |
189 } | |
2
c6ca0a26d93e
initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff
changeset
|
190 } |