Index: src/core/org/apache/jmeter/resources/messages_fr.properties
===================================================================
--- src/core/org/apache/jmeter/resources/messages_fr.properties	(revision 1498167)
+++ src/core/org/apache/jmeter/resources/messages_fr.properties	(working copy)
@@ -139,6 +139,10 @@
 bsh_script_parameters=Param\u00E8tres  (-> String Parameters et String []bsh.args)
 bsh_script_reset_interpreter=R\u00E9initialiser l'interpr\u00E9teur bsh avant chaque appel
 bsh_script_variables=Les variables suivantes sont d\u00E9finies pour le script \:\nSampleResult, ResponseCode, ResponseMessage, IsSuccess, Label, FileName, ctx, vars, props, log
+bug_report=Paquetage rapport de bug
+bug_report_creation_success=Le paquetage pour rapport de bug a \u00E9t\u00E9 cr\u00E9\u00E9 dans
+bug_report_error=Erreur lors de la cr\u00E9ation du paquetage pour rapport de bug
+bug_report_menu=Paquetage rapport de bug
 busy_testing=Je suis occup\u00E9 \u00E0 tester, veuillez arr\u00EAter le test avant de changer le param\u00E8trage
 cache_manager_size=Nombre maximum d'\u00E9l\u00E9ments dans le cache
 cache_manager_title=Gestionnaire de cache HTTP
Index: src/core/org/apache/jmeter/resources/messages.properties
===================================================================
--- src/core/org/apache/jmeter/resources/messages.properties	(revision 1498167)
+++ src/core/org/apache/jmeter/resources/messages.properties	(working copy)
@@ -145,6 +145,10 @@
 bsh_script_parameters=Parameters (-> String Parameters and String []bsh.args)
 bsh_script_reset_interpreter=Reset bsh.Interpreter before each call
 bsh_script_variables=The following variables are defined for the script\:\nSampleResult, ResponseCode, ResponseMessage, IsSuccess, Label, FileName, ctx, vars, props, log
+bug_report=Bug report bundle
+bug_report_creation_success=Bug report bundle was created in
+bug_report_error=Error creating bug report bundle
+bug_report_menu=Bug report bundle
 busy_testing=I'm busy testing, please stop the test before changing settings
 cache_manager_size=Max Number of elements in cache
 cache_manager_title=HTTP Cache Manager
Index: src/core/org/apache/jmeter/gui/util/JMeterMenuBar.java
===================================================================
--- src/core/org/apache/jmeter/gui/util/JMeterMenuBar.java	(revision 1498167)
+++ src/core/org/apache/jmeter/gui/util/JMeterMenuBar.java	(working copy)
@@ -257,6 +257,8 @@
 
         JMenuItem heapDump = makeMenuItemRes("heap_dump", ActionNames.HEAP_DUMP);//$NON-NLS-1$
 
+        JMenuItem reportBug = makeMenuItemRes("bug_report", ActionNames.REPORT_BUG);//$NON-NLS-1$
+
         help_about = makeMenuItemRes("about", 'A', ActionNames.ABOUT); //$NON-NLS-1$
 
         helpMenu.add(contextHelp);
@@ -265,6 +267,7 @@
         helpMenu.add(setDebug);
         helpMenu.add(resetDebug);
         helpMenu.add(heapDump);
+        helpMenu.add(reportBug);
         helpMenu.addSeparator();
         helpMenu.add(help_about);
     }
Index: src/core/org/apache/jmeter/gui/action/ActionNames.java
===================================================================
--- src/core/org/apache/jmeter/gui/action/ActionNames.java	(revision 1498167)
+++ src/core/org/apache/jmeter/gui/action/ActionNames.java	(working copy)
@@ -73,6 +73,7 @@
     public static final String REMOTE_STOP      = "remote_stop"; // $NON-NLS-1$
     public static final String REMOTE_STOP_ALL  = "remote_stop_all"; // $NON-NLS-1$
     public static final String REMOVE           = "remove"; // $NON-NLS-1$
+    public static final String REPORT_BUG           = "report_bug"; // $NON-NLS-1$
     public static final String RESET_GUI        = "reset_gui"; // $NON-NLS-1$
     public static final String REVERT_PROJECT   = "revert_project"; // $NON-NLS-1$
     public static final String SAVE             = "save"; // $NON-NLS-1$
Index: src/core/org/apache/jmeter/gui/action/ReportBugCommand.java
===================================================================
--- src/core/org/apache/jmeter/gui/action/ReportBugCommand.java	(revision 0)
+++ src/core/org/apache/jmeter/gui/action/ReportBugCommand.java	(revision 0)
@@ -0,0 +1,207 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jmeter.gui.action;
+
+import java.awt.HeadlessException;
+import java.awt.event.ActionEvent;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.UUID;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import javax.swing.JOptionPane;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.jmeter.NewDriver;
+import org.apache.jmeter.gui.GuiPackage;
+import org.apache.jmeter.util.JMeterUtils;
+import org.apache.jorphan.util.JOrphanUtils;
+
+/**
+ * Collect all necessary information for a bug report
+ * 
+ * @since 2.10
+ */
+public class ReportBugCommand extends AbstractAction {
+
+    private static final Set<String> commands = new HashSet<String>();
+
+    static {
+        commands.add(ActionNames.REPORT_BUG);
+    }
+
+    /**
+     * @see Command#doAction(ActionEvent)
+     */
+    @Override
+    public void doAction(ActionEvent evt) {
+        ZipOutputStream zos = null;
+        try {
+            String folderName = UUID.randomUUID().toString();
+            File bugReportFolder = new File(
+                    System.getProperty("java.io.tmpdir"), folderName);
+            File zipFile = new File(System.getProperty("java.io.tmpdir"), folderName+".zip");
+            backupConfig(bugReportFolder);
+            backupLog(bugReportFolder);
+            doReport(bugReportFolder);
+            
+            zos = new 
+                    ZipOutputStream(new FileOutputStream(zipFile)); 
+            zos.setMethod(ZipEntry.DEFLATED);
+            zipDir(bugReportFolder.getAbsolutePath(), bugReportFolder, zos);
+            FileUtils.deleteDirectory(bugReportFolder);
+            try {
+                JOptionPane.showMessageDialog(GuiPackage.getInstance()
+                        .getMainFrame(), 
+                        JMeterUtils.getResString("bug_report_creation_success")+":"+ zipFile.getAbsolutePath(), 
+                        JMeterUtils.getResString("bug_report"),
+                        JOptionPane.INFORMATION_MESSAGE);
+            } catch (HeadlessException e) {
+                // Cannot happen
+            }
+        } catch (Exception e) {
+            JMeterUtils.reportErrorToUser(e.getMessage(),
+                    JMeterUtils.getResString("bug_report_error")); // $NON-NLS-1$
+        } finally {
+            JOrphanUtils.closeQuietly(zos);
+        }
+
+    }
+
+    private void backupLog(File bugReportFolder) throws IOException {
+        File logs = new File(bugReportFolder, "log");
+        logs.mkdirs();
+        FileUtils.copyFile(
+                new File(NewDriver.getJMeterDir(), "bin/jmeter.log"), new File(
+                        logs, "jmeter.log"));
+
+    }
+
+    private void backupConfig(File bugReportFolder) throws IOException {
+        File config = new File(bugReportFolder, "config");
+        config.mkdirs();
+        File[] files = new File(NewDriver.getJMeterDir(), "bin").listFiles();
+        for (int i = 0; i < files.length; i++) {
+            if (files[i].isFile()) {
+                FileUtils.copyFile(files[i],
+                        new File(config, files[i].getName()));
+            }
+        }
+    }
+
+    private void doReport(File config) throws IOException {
+        File reportFile = new File(config, "report.txt");
+        BufferedWriter writer = null;
+        SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy");
+        try {
+            writer = new BufferedWriter(new OutputStreamWriter(
+                    new FileOutputStream(reportFile), "UTF-8"));
+            File libDir = new File(NewDriver.getJMeterDir(), "lib");
+            File[] jars = libDir.listFiles();
+            writer.write("===============================================================================\r\n");
+            writer.write("Files in lib folder:\r\n");
+            for (int i = 0; i < jars.length; i++) {
+                writer.write(jars[i].getName() + "(size:" + jars[i].length()+", date:"+dateFormat.format(new Date(jars[i].lastModified()))
+                        + ")\r\n");
+            }
+
+            File libExtDir = new File(libDir, "ext");
+            jars = libExtDir.listFiles();
+            writer.write("===============================================================================\r\n");
+            writer.write("Files in lib/ext folder:\r\n");
+            for (int i = 0; i < jars.length; i++) {
+                writer.write(jars[i].getName() + "(size:" + jars[i].length()+", date:"+dateFormat.format(new Date(jars[i].lastModified()))
+                        + ")\r\n");
+            }
+
+            writer.write("===============================================================================\r\n");
+            writer.write("System properties:\r\n");
+            Properties p = System.getProperties();
+            for (Iterator iterator = p.entrySet().iterator(); iterator
+                    .hasNext();) {
+                Map.Entry<String, String> entry = (Map.Entry<String, String>) iterator
+                        .next();
+                writer.write(entry.getKey() + "=" + entry.getValue() + "\r\n");
+            }
+            writer.write("===============================================================================\r\n");
+            writer.write("JMeter properties:\r\n");
+            p = JMeterUtils.getJMeterProperties();
+            for (Iterator iterator = p.entrySet().iterator(); iterator
+                    .hasNext();) {
+                Map.Entry<String, String> entry = (Map.Entry<String, String>) iterator
+                        .next();
+                writer.write(entry.getKey() + "=" + entry.getValue() + "\r\n");
+            }
+        } finally {
+            JOrphanUtils.closeQuietly(writer);
+        }
+    }
+
+    private void zipDir(String baseDir, File zipDir, ZipOutputStream zos) 
+        throws Exception
+    { 
+        String[] dirList = zipDir.list(); 
+        byte[] readBuffer = new byte[8*1024]; 
+        int bytesIn = 0; 
+        for(int i=0; i<dirList.length; i++) 
+        { 
+            File f = new File(zipDir, dirList[i]); 
+            if(f.isDirectory()) 
+            { 
+                String filePath = f.getAbsolutePath(); 
+                zipDir(baseDir, new File(filePath), zos); 
+            } else {
+                FileInputStream fis = null;
+                try {
+                    fis = new FileInputStream(f); 
+                    String entryName = f.getAbsolutePath().substring(baseDir.length());
+                    ZipEntry anEntry = new ZipEntry(entryName); 
+                    anEntry.setMethod(ZipEntry.DEFLATED);
+                    zos.putNextEntry(anEntry); 
+                    while((bytesIn = fis.read(readBuffer)) != -1) 
+                    { 
+                        zos.write(readBuffer, 0, bytesIn); 
+                    } 
+                    zos.closeEntry();
+                } finally {
+                    JOrphanUtils.closeQuietly(fis);
+                }
+            }
+        } 
+    }
+    /**
+     * @see Command#getActionNames()
+     */
+    @Override
+    public Set<String> getActionNames() {
+        return commands;
+    }
+}
