Fixed OSRF format writer to support Decimal

Change-Id: Ib554a1fe529ab7182e5a35ad061f1341c30acb47
This commit is contained in:
Stéphane Albert
2014-11-14 10:34:39 +01:00
parent 608389f6f3
commit 3a939cb962
2 changed files with 12 additions and 4 deletions

View File

@@ -81,8 +81,8 @@ class BaseReportWriter(object):
timeframe = self._sm.get_state() timeframe = self._sm.get_state()
self.usage_start = timeframe self.usage_start = timeframe
self.usage_start_dt = datetime.datetime.fromtimestamp(timeframe) self.usage_start_dt = datetime.datetime.fromtimestamp(timeframe)
end_frame = timeframe + self._period self.usage_end = timeframe + self._period
self.usage_end = datetime.datetime.fromtimestamp(end_frame) self.usage_end_dt = datetime.datetime.fromtimestamp(self.usage_end)
metadata = self._sm.get_metadata() metadata = self._sm.get_metadata()
self.total = metadata.get('total', 0) self.total = metadata.get('total', 0)

View File

@@ -15,12 +15,20 @@
# #
# @author: Stéphane Albert # @author: Stéphane Albert
# #
import decimal
import json import json
import os import os
from cloudkitty import writer from cloudkitty import writer
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
return float(o)
return super(DecimalEncoder, self).default(o)
class OSRFBackend(writer.BaseReportWriter): class OSRFBackend(writer.BaseReportWriter):
"""OpenStack Report Format Writer: """OpenStack Report Format Writer:
@@ -51,7 +59,7 @@ class OSRFBackend(writer.BaseReportWriter):
def _write_total(self): def _write_total(self):
total = {'total': self.total} total = {'total': self.total}
self._report.write(json.dumps(total)) self._report.write(json.dumps(total, cls=DecimalEncoder))
self._report.write(']') self._report.write(']')
self._report.flush() self._report.flush()
@@ -88,6 +96,6 @@ class OSRFBackend(writer.BaseReportWriter):
'end': self.usage_end_dt.isoformat()} 'end': self.usage_end_dt.isoformat()}
data['usage'] = self._usage_data data['usage'] = self._usage_data
self._report.write(json.dumps(data)) self._report.write(json.dumps(data, cls=DecimalEncoder))
self._report.write(', ') self._report.write(', ')
self._report.flush() self._report.flush()