1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
11 from py_utils
import cloud_storage
13 from telemetry
.internal
.results
import chart_json_output_formatter
14 from telemetry
.internal
.results
import output_formatter
16 from tracing
import results_renderer
17 from tracing
.value
import convert_chart_json
20 class HtmlOutputFormatter(output_formatter
.OutputFormatter
):
21 def __init__(self
, output_stream
, metadata
, reset_results
,
23 super(HtmlOutputFormatter
, self
).__init
__(output_stream
)
24 self
._metadata
= metadata
25 self
._upload
_bucket
= upload_bucket
26 self
._reset
_results
= reset_results
28 def _ConvertChartJson(self
, page_test_results
):
29 chart_json
= chart_json_output_formatter
.ResultsAsChartDict(
30 self
._metadata
, page_test_results
.all_page_specific_values
,
31 page_test_results
.all_summary_values
)
32 info
= page_test_results
.telemetry_info
33 chart_json
['label'] = info
.label
34 chart_json
['benchmarkStartMs'] = info
.benchmark_start_ms
36 file_descriptor
, chart_json_path
= tempfile
.mkstemp()
37 os
.close(file_descriptor
)
38 json
.dump(chart_json
, file(chart_json_path
, 'w'))
40 vinn_result
= convert_chart_json
.ConvertChartJson(chart_json_path
)
42 os
.remove(chart_json_path
)
44 if vinn_result
.returncode
!= 0:
45 logging
.error('Error converting chart json to Histograms:\n' +
48 return json
.loads(vinn_result
.stdout
)
50 def Format(self
, page_test_results
):
51 histograms
= page_test_results
.value_set
53 histograms
= self
._ConvertChartJson
(page_test_results
)
55 results_renderer
.RenderHTMLView(histograms
,
56 self
._output
_stream
, self
._reset
_results
)
57 file_path
= os
.path
.abspath(self
._output
_stream
.name
)
58 if self
._upload
_bucket
:
59 remote_path
= ('html-results/results-%s' %
60 datetime
.datetime
.now().strftime('%Y-%m-%d_%H-%M-%S'))
62 url
= cloud_storage
.Insert(self
._upload
_bucket
, remote_path
, file_path
)
63 print 'View HTML results online at %s' % url
64 except cloud_storage
.PermissionError
as e
:
65 logging
.error('Cannot upload profiling files to cloud storage due to '
66 ' permission error: %s' % e
.message
)