You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by db...@apache.org on 2005/12/08 06:22:55 UTC
svn commit: r354993 - in /geronimo/gbuild/trunk:
gbuild-agent-application/src/conf/
gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/
gbuild-agent/src/main/resources/META-INF/plexus/
Author: dblevins
Date: Wed Dec 7 21:21:47 2005
New Revision: 354993
URL: http://svn.apache.org/viewcvs?rev=354993&view=rev
Log:
Wrote an extension to gzip build output and send it with the results
Wrote another extension to log build output if the build was a failure.
Added:
geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildOutputExtension.java
geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/LogFailedBuildsExtension.java
Modified:
geronimo/gbuild/trunk/gbuild-agent-application/src/conf/application.xml
geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/ReportActivityExtension.java
geronimo/gbuild/trunk/gbuild-agent/src/main/resources/META-INF/plexus/components.xml
Modified: geronimo/gbuild/trunk/gbuild-agent-application/src/conf/application.xml
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent-application/src/conf/application.xml?rev=354993&r1=354992&r2=354993&view=diff
==============================================================================
--- geronimo/gbuild/trunk/gbuild-agent-application/src/conf/application.xml (original)
+++ geronimo/gbuild/trunk/gbuild-agent-application/src/conf/application.xml Wed Dec 7 21:21:47 2005
@@ -152,7 +152,7 @@
<implementation>org.apache.geronimo.gbuild.agent.WriteIncludeFileExtension</implementation>
<configuration>
<include-pattern>^include.*</include-pattern>
- <results-directory>results</results-directory>
+ <results-directory>${plexus.home}/results</results-directory>
<date-format>yyyy-MM</date-format>
<file-name-template>{date}/{project.name}/{project.version}/{build.name}-{build.id}.properties</file-name-template>
</configuration>
Added: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildOutputExtension.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildOutputExtension.java?rev=354993&view=auto
==============================================================================
--- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildOutputExtension.java (added)
+++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/BuildOutputExtension.java Wed Dec 7 21:21:47 2005
@@ -0,0 +1,99 @@
+/**
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.geronimo.gbuild.agent;
+
+import org.apache.maven.continuum.configuration.ConfigurationException;
+import org.apache.maven.continuum.configuration.ConfigurationService;
+import org.apache.maven.continuum.core.action.AbstractContinuumAction;
+import org.apache.maven.continuum.model.project.BuildResult;
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.store.ContinuumStore;
+import org.apache.maven.continuum.store.ContinuumStoreException;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class BuildOutputExtension extends AbstractLogEnabled implements BuildAgentExtension {
+
+ /**
+ * @plexus.requirement
+ */
+ private ConfigurationService configurationService;
+
+ /**
+ * @plexus.requirement
+ */
+ private ContinuumStore store;
+
+ public void preProcess(Map build) {
+ }
+
+ public void postProcess(Map build, Map results) {
+ File file = null;
+ try {
+ int projectId = AbstractContinuumAction.getProjectId(build);
+
+ Project project = store.getProject(projectId);
+
+ BuildResult buildResult = store.getBuildResult(project.getLatestBuildId());
+
+ file = configurationService.getBuildOutputFile(buildResult.getId(), projectId);
+
+ } catch (ContinuumStoreException e) {
+
+ getLogger().error("Unable to retrieve info from the ContinuumStore.", e);
+
+ return;
+
+ } catch (ConfigurationException e) {
+
+ getLogger().error("Unable to get the build output file from the configuration service.", e);
+
+ return;
+ }
+
+ if (!file.exists()) {
+
+ getLogger().warn("File to include doesn't exist: " + file.getAbsolutePath());
+
+ return;
+ }
+
+ try {
+
+ getLogger().debug("Reading " + file.getAbsolutePath());
+
+ byte[] bytes = GZipUtils.fileRead(file);
+
+ getLogger().debug("Including " + bytes.length + " - " + file.getAbsolutePath());
+
+ results.put("build.output-file.gz", bytes);
+
+ }
+ catch (IOException e) {
+ getLogger().warn("Error reading file to include: " + file.getAbsolutePath(), e);
+ }
+
+
+ }
+
+}
Added: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/LogFailedBuildsExtension.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/LogFailedBuildsExtension.java?rev=354993&view=auto
==============================================================================
--- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/LogFailedBuildsExtension.java (added)
+++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/LogFailedBuildsExtension.java Wed Dec 7 21:21:47 2005
@@ -0,0 +1,127 @@
+/**
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.geronimo.gbuild.agent;
+
+import org.apache.maven.continuum.core.action.AbstractContinuumAction;
+import org.apache.maven.continuum.model.project.BuildResult;
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.store.ContinuumStore;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Startable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.StartingException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.StoppingException;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class LogFailedBuildsExtension extends AbstractContinuumAgentAction implements BuildResultsExtension, Startable {
+
+ /**
+ * @plexus.configuration
+ */
+ private String fileNameTemplate;
+ private StringTemplate template;
+
+ /**
+ * @plexus.configuration
+ */
+ private String resultsDirectory;
+ private File directory;
+
+ /**
+ * @plexus.configuration
+ */
+ private String dateFormat;
+ private SimpleDateFormat dateFormatter;
+
+
+ public void start() throws StartingException {
+ template = new StringTemplate(fileNameTemplate);
+ directory = new File(resultsDirectory);
+ directory.mkdirs();
+
+ if (!directory.exists()) {
+ throw new IllegalStateException("File specified does not exist. " + directory.getAbsolutePath());
+ }
+
+ if (!directory.isDirectory()) {
+ throw new IllegalStateException("File specified is not a directory. " + directory.getAbsolutePath());
+ }
+
+ if (!directory.canWrite()) {
+ throw new IllegalStateException("Directory specified is not writable. " + directory.getAbsolutePath());
+ }
+
+ getLogger().info("Include files will be written to " + directory.getAbsolutePath());
+ dateFormatter = new SimpleDateFormat(dateFormat);
+ }
+
+ public void stop() throws StoppingException {
+ }
+
+ public void execute(Map context) throws Exception {
+ ContinuumStore store = AbstractContinuumAgentAction.getContinuumStore(context);
+
+ int projectId = AbstractContinuumAction.getProjectId(context);
+
+ Project project = store.getProject(projectId);
+
+ BuildResult buildResult = store.getBuildResult(project.getLatestBuildId());
+
+ int exitCode = buildResult.getExitCode();
+
+ if (exitCode == 0) {
+ return;
+ }
+
+ byte[] bytes = (byte[]) context.get("build.output-file.gz");
+
+ if (bytes == null) {
+
+ getLogger().debug("No build output to write.");
+
+ return;
+ }
+
+
+ Map map = new HashMap();
+
+ map.putAll(context);
+
+ map.put("date", dateFormatter.format(new Date()));
+
+ String fileName = template.apply(map);
+
+ File file = new File(directory, fileName);
+
+ File parent = file.getParentFile();
+
+ parent.mkdirs();
+
+ try {
+ GZipUtils.fileWrite(file, bytes);
+ } catch (IOException e) {
+ getLogger().error("Could not write to file " + file.getAbsolutePath(), e);
+ }
+ }
+}
Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/ReportActivityExtension.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/ReportActivityExtension.java?rev=354993&r1=354992&r2=354993&view=diff
==============================================================================
--- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/ReportActivityExtension.java (original)
+++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/ReportActivityExtension.java Wed Dec 7 21:21:47 2005
@@ -18,7 +18,9 @@
import org.apache.maven.continuum.core.action.AbstractContinuumAction;
import org.apache.maven.continuum.model.project.BuildResult;
+import org.apache.maven.continuum.model.project.Project;
import org.apache.maven.continuum.store.ContinuumStore;
+import org.apache.maven.continuum.store.ContinuumStoreException;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import java.util.Map;
@@ -47,7 +49,14 @@
int projectId = AbstractContinuumAction.getProjectId(build);
- BuildResult buildResult = store.getLatestBuildResultForProject(projectId);
+ BuildResult buildResult = null;
+ try {
+ Project project = store.getProject(projectId);
+
+ buildResult = store.getBuildResult(project.getLatestBuildId());
+ } catch (ContinuumStoreException e) {
+ getLogger().error("Unable to read data from ContinuumStore.", e);
+ }
long minutes = (buildResult.getEndTime() - buildResult.getStartTime()) / 60000;
Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/resources/META-INF/plexus/components.xml?rev=354993&r1=354992&r2=354993&view=diff
==============================================================================
--- geronimo/gbuild/trunk/gbuild-agent/src/main/resources/META-INF/plexus/components.xml (original)
+++ geronimo/gbuild/trunk/gbuild-agent/src/main/resources/META-INF/plexus/components.xml Wed Dec 7 21:21:47 2005
@@ -221,6 +221,9 @@
<implementation>org.apache.geronimo.gbuild.agent.ReportActivityExtension</implementation>
<requirements>
<requirement>
+ <role>org.apache.maven.continuum.store.ContinuumStore</role>
+ </requirement>
+ <requirement>
<role>org.apache.geronimo.gbuild.agent.BuildActivityNotifier</role>
</requirement>
</requirements>
@@ -237,6 +240,33 @@
</requirements>
<configuration>
<regex>.*geronimo-tck.*</regex>
+ </configuration>
+ </component>
+
+ <component>
+ <role>org.apache.geronimo.gbuild.agent.BuildAgentExtension</role>
+ <role-hint>build-output</role-hint>
+ <implementation>org.apache.geronimo.gbuild.agent.BuildOutputExtension</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.continuum.configuration.ConfigurationService</role>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.continuum.store.ContinuumStore</role>
+ </requirement>
+ </requirements>
+ <configuration>
+ </configuration>
+ </component>
+
+ <component>
+ <role>org.apache.geronimo.gbuild.agent.BuildResultsExtension</role>
+ <role-hint>log-failed-build-file</role-hint>
+ <implementation>org.apache.geronimo.gbuild.agent.LogFailedBuildsExtension</implementation>
+ <configuration>
+ <results-directory>${plexus.home}/failed</results-directory>
+ <date-format>yyyy-MM-dd-HHmm</date-format>
+ <file-name-template>{project.name}-{project.version}/{date}-{build.name}-{build.id}.txt</file-name-template>
</configuration>
</component>