Search in sources :

Example 1 with SupportProvider

use of com.cloudbees.jenkins.support.api.SupportProvider in project support-core-plugin by jenkinsci.

the class SupportPlugin method getBundlePrefix.

/**
 * Returns the prefix of the bundle name.
 *
 * @return the prefix of the bundle name.
 */
private static String getBundlePrefix() {
    // default bundle filename
    String filename = "support";
    final SupportPlugin instance = getInstance();
    if (instance != null) {
        SupportProvider supportProvider = instance.getSupportProvider();
        if (supportProvider != null) {
            // let the provider name it
            filename = supportProvider.getName();
        }
    }
    final String instanceType = BundleNameInstanceTypeProvider.getInstance().getInstanceType();
    if (StringUtils.isNotBlank(instanceType)) {
        filename = filename + "_" + instanceType;
    }
    return filename;
}
Also used : SupportProvider(com.cloudbees.jenkins.support.api.SupportProvider)

Example 2 with SupportProvider

use of com.cloudbees.jenkins.support.api.SupportProvider in project support-core-plugin by jenkinsci.

the class SupportPlugin method appendManifestHeader.

private static void appendManifestHeader(StringBuilder manifest) {
    SupportPlugin plugin = SupportPlugin.getInstance();
    SupportProvider supportProvider = plugin == null ? null : plugin.getSupportProvider();
    String bundleName = (supportProvider == null ? "Support" : supportProvider.getDisplayName()) + " Bundle Manifest";
    manifest.append(bundleName).append('\n').append(StringUtils.repeat("=", bundleName.length())).append("\n\n");
    SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ");
    f.setTimeZone(TimeZone.getTimeZone("UTC"));
    manifest.append("Generated on ").append(f.format(new Date())).append("\n\n");
}
Also used : SupportProvider(com.cloudbees.jenkins.support.api.SupportProvider) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date)

Example 3 with SupportProvider

use of com.cloudbees.jenkins.support.api.SupportProvider in project support-core-plugin by jenkinsci.

the class BundleFileName method getSupportProviderName.

/**
 * Returns the prefix of the bundle name.
 *
 * @return the prefix of the bundle name.
 */
private static String getSupportProviderName() {
    // default bundle filename
    String filename = "support";
    final SupportPlugin instance = SupportPlugin.getInstance();
    if (instance != null) {
        SupportProvider supportProvider = instance.getSupportProvider();
        if (supportProvider != null) {
            // let the provider name it
            filename = supportProvider.getName();
        }
    }
    return filename;
}
Also used : SupportProvider(com.cloudbees.jenkins.support.api.SupportProvider)

Example 4 with SupportProvider

use of com.cloudbees.jenkins.support.api.SupportProvider in project support-core-plugin by jenkinsci.

the class SupportPlugin method writeBundle.

public static void writeBundle(OutputStream outputStream, final List<Component> components) throws IOException {
    // TODO why is this not SupportPlugin.logger?
    Logger logger = Logger.getLogger(SupportPlugin.class.getName());
    final java.util.Queue<Content> toProcess = new ConcurrentLinkedQueue<Content>();
    final Set<String> names = new TreeSet<String>();
    Container container = new Container() {

        @Override
        public void add(@CheckForNull Content content) {
            if (content != null) {
                names.add(content.getName());
                toProcess.add(content);
            }
        }
    };
    StringBuilder manifest = new StringBuilder();
    SupportPlugin plugin = SupportPlugin.getInstance();
    SupportProvider supportProvider = plugin == null ? null : plugin.getSupportProvider();
    String bundleName = (supportProvider == null ? "Support" : supportProvider.getDisplayName()) + " Bundle Manifest";
    manifest.append(bundleName).append('\n');
    manifest.append(StringUtils.repeat("=", bundleName.length())).append('\n');
    manifest.append("\n");
    SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ");
    f.setTimeZone(TimeZone.getTimeZone("UTC"));
    manifest.append("Generated on ").append(f.format(new Date())).append("\n");
    manifest.append("\n");
    manifest.append("Requested components:\n\n");
    StringWriter errors = new StringWriter();
    PrintWriter errorWriter = new PrintWriter(errors);
    for (Component c : components) {
        try {
            manifest.append("  * ").append(c.getDisplayName()).append("\n\n");
            names.clear();
            c.addContents(container);
            for (String name : names) {
                manifest.append("      - `").append(name).append("`\n\n");
            }
        } catch (Throwable e) {
            String cDisplayName = null;
            try {
                cDisplayName = c.getDisplayName();
            } catch (Throwable e1) {
                // be very defensive
                cDisplayName = c.getClass().getName();
            }
            LogRecord logRecord = new LogRecord(Level.WARNING, "Could not get content from ''{0}'' for support bundle");
            logRecord.setThrown(e);
            logRecord.setParameters(new Object[] { cDisplayName });
            logger.log(logRecord);
            errorWriter.println(MessageFormat.format("Could not get content from ''{0}'' for support bundle", cDisplayName));
            errorWriter.println("-----------------------------------------------------------------------");
            errorWriter.println();
            SupportLogFormatter.printStackTrace(e, errorWriter);
            errorWriter.println();
        }
    }
    toProcess.add(new StringContent("manifest.md", manifest.toString()));
    try {
        ZipOutputStream zip = new ZipOutputStream(outputStream);
        try {
            BufferedOutputStream bos = new BufferedOutputStream(zip, 16384) {

                @Override
                public void close() throws IOException {
                    // don't let any of the contents accidentally close the zip stream
                    super.flush();
                }
            };
            while (!toProcess.isEmpty()) {
                Content c = toProcess.poll();
                if (c == null) {
                    continue;
                }
                final String name = c.getName();
                try {
                    ZipEntry entry = new ZipEntry(name);
                    entry.setTime(c.getTime());
                    zip.putNextEntry(entry);
                    c.writeTo(bos);
                } catch (Throwable e) {
                    LogRecord logRecord = new LogRecord(Level.WARNING, "Could not attach ''{0}'' to support bundle");
                    logRecord.setThrown(e);
                    logRecord.setParameters(new Object[] { name });
                    logger.log(logRecord);
                    errorWriter.println(MessageFormat.format("Could not attach ''{0}'' to support bundle", name));
                    errorWriter.println("-----------------------------------------------------------------------");
                    errorWriter.println();
                    SupportLogFormatter.printStackTrace(e, errorWriter);
                    errorWriter.println();
                } finally {
                    bos.flush();
                }
                zip.flush();
            }
            errorWriter.close();
            String errorContent = errors.toString();
            if (!StringUtils.isBlank(errorContent)) {
                try {
                    zip.putNextEntry(new ZipEntry("manifest/errors.txt"));
                    zip.write(errorContent.getBytes("utf-8"));
                } catch (IOException e) {
                // ignore
                }
                zip.flush();
            }
        } finally {
            zip.close();
        }
    } finally {
        outputStream.flush();
    }
}
Also used : ZipEntry(org.apache.tools.zip.ZipEntry) Logger(java.util.logging.Logger) Container(com.cloudbees.jenkins.support.api.Container) StringWriter(java.io.StringWriter) LogRecord(java.util.logging.LogRecord) TreeSet(java.util.TreeSet) CheckForNull(edu.umd.cs.findbugs.annotations.CheckForNull) Component(com.cloudbees.jenkins.support.api.Component) BufferedOutputStream(java.io.BufferedOutputStream) PrintWriter(java.io.PrintWriter) StringContent(com.cloudbees.jenkins.support.api.StringContent) SupportProvider(com.cloudbees.jenkins.support.api.SupportProvider) IOException(java.io.IOException) Date(java.util.Date) StringContent(com.cloudbees.jenkins.support.api.StringContent) Content(com.cloudbees.jenkins.support.api.Content) ZipOutputStream(org.apache.tools.zip.ZipOutputStream) JSONObject(net.sf.json.JSONObject) ConcurrentLinkedQueue(java.util.concurrent.ConcurrentLinkedQueue) SimpleDateFormat(java.text.SimpleDateFormat)

Aggregations

SupportProvider (com.cloudbees.jenkins.support.api.SupportProvider)4 SimpleDateFormat (java.text.SimpleDateFormat)2 Date (java.util.Date)2 Component (com.cloudbees.jenkins.support.api.Component)1 Container (com.cloudbees.jenkins.support.api.Container)1 Content (com.cloudbees.jenkins.support.api.Content)1 StringContent (com.cloudbees.jenkins.support.api.StringContent)1 CheckForNull (edu.umd.cs.findbugs.annotations.CheckForNull)1 BufferedOutputStream (java.io.BufferedOutputStream)1 IOException (java.io.IOException)1 PrintWriter (java.io.PrintWriter)1 StringWriter (java.io.StringWriter)1 TreeSet (java.util.TreeSet)1 ConcurrentLinkedQueue (java.util.concurrent.ConcurrentLinkedQueue)1 LogRecord (java.util.logging.LogRecord)1 Logger (java.util.logging.Logger)1 JSONObject (net.sf.json.JSONObject)1 ZipEntry (org.apache.tools.zip.ZipEntry)1 ZipOutputStream (org.apache.tools.zip.ZipOutputStream)1