wiki:BUG_REPORT_FORM_R0

Version 7 (modified by deni, 15 years ago) (diff)

--

Error: Macro BackLinksMenu(None) failed
compressed data is corrupt

Error: Macro TicketQuery(summary=BUG_REPORT_FORM_R0, format=table, col=summary|owner|status|type|component|priority|effort|importance, rows=description|analysis_owners|analysis_reviewers|analysis_score|design_owners|design_reviewers|design_score|implementation_owners|implementation_reviewers|implementation_score|test_owners|test_reviewers|test_score|) failed
current transaction is aborted, commands ignored until end of transaction block

Analysis

Overview

Bug report form should actually send the bug reports somewhere

Task requirements

  • For report form
    • Add a "Send Report" button to the bug report form
    • Rename the "Save as File" to "Save Report As"
    • Add "Attach a file" for attaching books, etc.
  • For the server that will handle the information
    • Create a database to handle the error reports
      • The database should support fields (see implementation idea)
    • Create a limit for the size of the reports
      • Think of way to block spam
    • [Optional] Create a UI for the database so developers can access the information
      • create different sort and group ways for the information - for example by OS, by Java version, by user e-mail

Task result

Code

Implementation idea

  • On clicking the 'Send' button, a HTTP POST request to sophie2.org/bugreports should be sent.
  • Since it may contain an attached file, its format should be as if posted by a form using ENCTYPE="multipart/form-data"
  • The database may contain the following fields:
    • Date & Time
    • Log
    • Exception
    • User e-mail address
    • User notes
  • The attached files may not be saved in the database, but in a special folder on the server.
    • However, they should be renamed, so that there are no files with the same name and it is possible to understand to which bug report they were attached. For example: ReportNo<N>Attachment.<extension>, where <N> is the number of the report and <extension> is the original extension of the file.
  • Write a php script that fills the information in the database and uploads the files.

APP_BUG_REPORT_FORM_R0

How to demo

  • Open the bug report from from the Help menu
  • Send a bug report with an attached file
  • Using the UI for the database or a console, if it is not yet ready, make sure that the bug report was stored on sophie2.org

Design

  • Restore the 'Attach File' control from an older version of trunk:
    • In BugReportDialog there should be:
      • a nested class AttachmentField extending BoundTextField;
      • public Prop<AttachmentField> attachmentField() - text field for the absolute name of the attached file;
      • ATTACH_FILE in EventIds enum.
    • The operation ON_ATTACH_FILE in BugReportLogic should handle changing the attached file in the bug report form.
  • 'Send Report' button:
    • add SEND_REPORT BugReportDialog.EventIds enum
    • in BugReportDialog.swingComponent...create() create a new LogicR3Button that fires a SEND_REPORT event when clicked and add it to the bottom panel
  • 'Send Report' logic:
    • A new operation ON_SEND_REPORT in BugReportLogic should handle a user request to send a bug report.
    • Using the util class ConnectionUtil (see below) it will open a new HTTP connection to "sophie2.org/bugreports", send the bug report data (which may include an attached file) as a multi-part HTTP request and read the response from the server
    • If no exceptions occurred during the communication with the server, an informative MessageDialogInput will be shown.
      • The response of the server will be a string which will be shown in this dialog.
    • If an exception occured during the communication with the server, an error dialog will appear to inform the user that ther bug report was not processed.
      • (?) However, no new bug report form will appear.
  • Move some of the logic for sending multi-part requests from FacadeInvocationHandler to a new class ConnectionUtil in org.sophie2.base.commons.util package.
    • The new class will contain the following methods:
      • public static HttpURLConnection createConnection(String urlAddress) throws IOException - creates an HttpURLConnection to the HTTP server referred to by the given URL.
      • public static void writeData(HttpURLConnection connection, String[] names, Object[] dataValues) throws IOException - sends a multi-part POST request using the specified connection (as if from a form using ENCTYPE="multipart/form-data").
        • The names argument contains the names of the fields to send.
        • The values argument contains the values to send. They should be either Strings or Files.
        • Files are Base64 encoded.
      • public static String readResponse(HttpURLConnection connection) throws IOException - reads the response sent through the specified connection.
  • Database:
    • Create a new database on sophie2.org with a single table reports .
    • The table should contain the following columns:
      • id - INTEGER AUTO_INCREMENT PRIMARY KEY
      • date - DATETIME - the time when the report was submitted
      • stacktrace - TEXT - stacktrace of the exception that caused the bug report form to appear and the user to submit the report
      • log - TEXT - the contents of Sophie's Log file around the time when the exception occurred
      • systemProperties - TEXT - all Java system properties at the moment of the bug report submission, serialized as string.
      • email - VARCHAR(50) - user e-mail
      • userExplanation - TEXT - user notes
  • Php script to process the bug reports:
    • reads the data in $_POST and using a simple sql query, writes it in the database;
    • renames the attached files in the way specified in the implementation idea and uploads them in a special folder on the server

Implementation

(Describe and link the implementation results here (from the wiki or the repository).)

Testing

(Place the testing results here.)

Comments

(Write comments for this or later revisions here.)

Attachments