[Fuego] [PATCH 1/3] ftc: gen-report: Add pdf formatter

Hoang Van Tuyen tuyen.hoangvan at toshiba-tsdv.com
Thu Mar 8 02:48:01 UTC 2018


It has some difference between html and plain text format.

I re-send the patch as an attachment.

Best regards,

Tuyen


On 3/8/2018 6:04 AM, Tim.Bird at sony.com wrote:
> This patch also has wrapping issues.
>   -- Tim
>
>> -----Original Message-----
>> From: fuego-bounces at lists.linuxfoundation.org [mailto:fuego-
>> bounces at lists.linuxfoundation.org] On Behalf Of Hoang Van Tuyen
>> Sent: Thursday, March 01, 2018 7:36 PM
>> To: fuego at lists.linuxfoundation.org
>> Subject: [Fuego] [PATCH 1/3] ftc: gen-report: Add pdf formatter
>>
>> Add a formatter for pdf report output. By default, the pdf
>> output file is stored in /fuego-rw/report with name report.pdf.
>>
>> It uses a reportlab python library for generating the report,
>> So, please make sure that the library is available in the system.
>>
>> Signed-off-by: Hoang Van Tuyen <tuyen.hoangvan at toshiba-tsdv.com>
>> ---
>>    engine/scripts/ftc | 50
>> +++++++++++++++++++++++++++++++++++++++++++++++++-
>>    1 file changed, 49 insertions(+), 1 deletion(-)
>>
>> diff --git a/engine/scripts/ftc b/engine/scripts/ftc
>> index c6a0f3d..0b99f94 100755
>> --- a/engine/scripts/ftc
>> +++ b/engine/scripts/ftc
>> @@ -2037,6 +2037,46 @@ def gen_html_report(header_data, report_data):
>>
>>        return report
>>
>> +# add page number for a pdf file
>> +def add_page_number(canvas, doc):
>> +    from reportlab.lib.units import mm
>> +
>> +    page_num = canvas.getPageNumber()
>> +    text = "Page %s" % page_num
>> +    canvas.drawRightString(200*mm, 20*mm, text)
>> +
>> +def gen_pdf_report(header_data, report_data, report_dir):
>> +    from reportlab.lib import colors
>> +    from reportlab.lib.pagesizes import A4
>> +    from reportlab.lib.styles import getSampleStyleSheet
>> +    from reportlab.platypus import SimpleDocTemplate, Table,
>> TableStyle, Paragraph
>> +
>> +    # create a pdf file
>> +    doc = SimpleDocTemplate(report_dir + "report.pdf", pagesize=A4)
>> +    elements = []
>> +
>> +    # generate header
>> +    styles = getSampleStyleSheet()
>> +    elements.append(Paragraph("Fuego Test Report\n", styles["Heading1"]))
>> +    for field,val_str in header_data:
>> +        elements.append(Paragraph("%s: %s\n" % (field, val_str),
>> styles["Normal"]))
>> +
>> +    # generate lines for this report
>> +    fields = report_data[0]
>> +
>> +    # create the table with a header row in each page
>> +    report_data = [[Paragraph(str(cell), styles["Normal"]) for cell in
>> row] for row in report_data]
>> +    table = Table(report_data, repeatRows=1, colWidths=[75,75])
>> +
>> +    # format for table in the report file
>> +    table.setStyle(TableStyle([("INNERGRID", (0, 0), (-1, -1), 0.25,
>> colors.black),
>> +                               ("BOX", (0, 0), (-1, -1), 0.25,
>> colors.black),
>> +                               ("BACKGROUND",(0, 0), (len(fields) -
>> 1,0), colors.silver),
>> +                               ("VALIGN",(0, 0), (-1, -1), "MIDDLE")]))
>> +
>> +    elements.append(table)
>> +    doc.build(elements, onFirstPage=add_page_number,
>> onLaterPages=add_page_number)
>> +
>>    # generate a report from run results
>>    def do_gen_report(conf, options):
>>        global quiet, verbose
>> @@ -2058,7 +2098,7 @@ def do_gen_report(conf, options):
>>        fmt="txt"
>>        if "--format" in options:
>>            fmt = options[options.index("--format")+1]
>> -        if fmt not in ["txt","html"]:
>> +        if fmt not in ["txt","html","pdf"]:
>>                error_out("Unsupported format '%s' specified" % fmt)
>>
>>        if "--layout" in options:
>> @@ -2073,6 +2113,11 @@ def do_gen_report(conf, options):
>>            #fields = ["test_name", "spec", "board", "timestamp", "tguid",
>> "status"]
>>            #rfields = ["test_name", "spec", "board", "timestamp",
>> "tguid", "tguid:measure", "tguid:unit", "tguid:status", "tguid:result"]
>>
>> +        # create a directory to save report files
>> +        report_dir = "/fuego-rw/report/"
>> +        if not os.path.exists(report_dir):
>> +            os.makedirs(report_dir)
>> +
>>        # get data for report
>>        header_data = get_report_header_data(run_list, run_map,
>> header_fields)
>>        report_data = get_report_data(run_list, run_map, fields)
>> @@ -2081,6 +2126,9 @@ def do_gen_report(conf, options):
>>           report = gen_text_report(header_data, report_data)
>>        if fmt=="html":
>>            report = gen_html_report(header_data, report_data)
>> +    if fmt=="pdf":
>> +        gen_pdf_report(header_data, report_data, report_dir)
>> +        sys.exit(0)
>>
>>        print report
>>
>> --
>> 2.1.4
>>
>>
>>
>> _______________________________________________
>> Fuego mailing list
>> Fuego at lists.linuxfoundation.org
>> https://lists.linuxfoundation.org/mailman/listinfo/fuego

_______________________________________________
Fuego mailing list
Fuego at lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/fuego

-------------- next part --------------
>From ae8643f43b4469c02d9366e95a5def70aaf706ff Mon Sep 17 00:00:00 2001
From: Hoang Van Tuyen <tuyen.hoangvan at toshiba-tsdv.com>
Date: Thu, 1 Mar 2018 14:10:22 +0700
Subject: [PATCH 1/3] ftc: gen-report: Add pdf formatter

Add a formatter for pdf report output. By default, the pdf
output file is stored in /fuego-rw/report with name report.pdf.

It uses a reportlab python library for generating the report,
So, please make sure that the library is available in the system.

Signed-off-by: Hoang Van Tuyen <tuyen.hoangvan at toshiba-tsdv.com>
---
 engine/scripts/ftc | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 49 insertions(+), 1 deletion(-)

diff --git a/engine/scripts/ftc b/engine/scripts/ftc
index c6a0f3d..0b99f94 100755
--- a/engine/scripts/ftc
+++ b/engine/scripts/ftc
@@ -2037,6 +2037,46 @@ def gen_html_report(header_data, report_data):
 
     return report
 
+# add page number for a pdf file
+def add_page_number(canvas, doc):
+    from reportlab.lib.units import mm
+
+    page_num = canvas.getPageNumber()
+    text = "Page %s" % page_num
+    canvas.drawRightString(200*mm, 20*mm, text)
+
+def gen_pdf_report(header_data, report_data, report_dir):
+    from reportlab.lib import colors
+    from reportlab.lib.pagesizes import A4
+    from reportlab.lib.styles import getSampleStyleSheet
+    from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph
+
+    # create a pdf file
+    doc = SimpleDocTemplate(report_dir + "report.pdf", pagesize=A4)
+    elements = []
+
+    # generate header
+    styles = getSampleStyleSheet()
+    elements.append(Paragraph("Fuego Test Report\n", styles["Heading1"]))
+    for field,val_str in header_data:
+        elements.append(Paragraph("%s: %s\n" % (field, val_str), styles["Normal"]))
+
+    # generate lines for this report
+    fields = report_data[0]
+
+    # create the table with a header row in each page
+    report_data = [[Paragraph(str(cell), styles["Normal"]) for cell in row] for row in report_data]
+    table = Table(report_data, repeatRows=1, colWidths=[75,75])
+
+    # format for table in the report file
+    table.setStyle(TableStyle([("INNERGRID", (0, 0), (-1, -1), 0.25, colors.black),
+                               ("BOX", (0, 0), (-1, -1), 0.25, colors.black),
+                               ("BACKGROUND",(0, 0), (len(fields) - 1,0), colors.silver),
+                               ("VALIGN",(0, 0), (-1, -1), "MIDDLE")]))
+
+    elements.append(table)
+    doc.build(elements, onFirstPage=add_page_number, onLaterPages=add_page_number)
+
 # generate a report from run results
 def do_gen_report(conf, options):
     global quiet, verbose
@@ -2058,7 +2098,7 @@ def do_gen_report(conf, options):
     fmt="txt"
     if "--format" in options:
         fmt = options[options.index("--format")+1]
-        if fmt not in ["txt","html"]:
+        if fmt not in ["txt","html","pdf"]:
             error_out("Unsupported format '%s' specified" % fmt)
 
     if "--layout" in options:
@@ -2073,6 +2113,11 @@ def do_gen_report(conf, options):
         #fields = ["test_name", "spec", "board", "timestamp", "tguid", "status"]
         #rfields = ["test_name", "spec", "board", "timestamp", "tguid", "tguid:measure", "tguid:unit", "tguid:status", "tguid:result"]
 
+        # create a directory to save report files
+        report_dir = "/fuego-rw/report/"
+        if not os.path.exists(report_dir):
+            os.makedirs(report_dir)
+
     # get data for report
     header_data = get_report_header_data(run_list, run_map, header_fields)
     report_data = get_report_data(run_list, run_map, fields)
@@ -2081,6 +2126,9 @@ def do_gen_report(conf, options):
        report = gen_text_report(header_data, report_data)
     if fmt=="html":
         report = gen_html_report(header_data, report_data)
+    if fmt=="pdf":
+        gen_pdf_report(header_data, report_data, report_dir)
+        sys.exit(0)
 
     print report
 
-- 
2.1.4

-------------- next part --------------
-- 
This mail was scanned by BitDefender
For more information please visit http://www.bitdefender.com


More information about the Fuego mailing list