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()
self.usage_start = timeframe
self.usage_start_dt = datetime.datetime.fromtimestamp(timeframe)
end_frame = timeframe + self._period
self.usage_end = datetime.datetime.fromtimestamp(end_frame)
self.usage_end = timeframe + self._period
self.usage_end_dt = datetime.datetime.fromtimestamp(self.usage_end)
metadata = self._sm.get_metadata()
self.total = metadata.get('total', 0)

View File

@@ -15,12 +15,20 @@
#
# @author: Stéphane Albert
#
import decimal
import json
import os
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):
"""OpenStack Report Format Writer:
@@ -51,7 +59,7 @@ class OSRFBackend(writer.BaseReportWriter):
def _write_total(self):
total = {'total': self.total}
self._report.write(json.dumps(total))
self._report.write(json.dumps(total, cls=DecimalEncoder))
self._report.write(']')
self._report.flush()
@@ -88,6 +96,6 @@ class OSRFBackend(writer.BaseReportWriter):
'end': self.usage_end_dt.isoformat()}
data['usage'] = self._usage_data
self._report.write(json.dumps(data))
self._report.write(json.dumps(data, cls=DecimalEncoder))
self._report.write(', ')
self._report.flush()