Skip to content

Commit 112670f

Browse files
authored
Merge pull request #50 from raccoon-mh/master
feat: add 'data' field to cost_info and cost_manager, enhance data co…
2 parents d0458e5 + 8327355 commit 112670f

File tree

3 files changed

+22
-11
lines changed

3 files changed

+22
-11
lines changed

src/cloudforet/cost_analysis/info/cost_info.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ def CostInfo(cost_data):
2626
"additional_info": change_struct_type(cost_data["additional_info"])
2727
if "additional_info" in cost_data
2828
else None,
29+
"data": change_struct_type(cost_data["data"])
30+
if "data" in cost_data
31+
else None,
2932
"billed_date": cost_data["billed_date"],
3033
}
3134

src/cloudforet/cost_analysis/manager/cost_manager.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ def _make_cost_data(self, results):
9696
"resource": result.get("resource", ""),
9797
"billed_date": result["billed_date"],
9898
"additional_info": result.get("additional_info", {}),
99+
"data": self._convert_data_values(result.get("data", {})),
99100
"tags": result.get("tags", {}),
100101
}
101102

@@ -129,17 +130,13 @@ def _change_result_by_field_mapper(self, result):
129130
result[origin_field] = result[actual_field]
130131
del result[actual_field]
131132

132-
if origin_field == "additional_info":
133-
additional_info = {}
134-
for (
135-
origin_additional_field,
136-
actual_additional_field,
137-
) in actual_field.items():
138-
additional_info[origin_additional_field] = result[
139-
actual_additional_field
140-
]
141-
del result[actual_additional_field]
142-
result[origin_field] = additional_info
133+
if origin_field in ("additional_info", "data"):
134+
mapped_dict = {}
135+
for mapped_key, csv_column in actual_field.items():
136+
if csv_column in result:
137+
mapped_dict[mapped_key] = result[csv_column]
138+
del result[csv_column]
139+
result[origin_field] = mapped_dict
143140

144141
return result
145142

@@ -221,6 +218,16 @@ def _check_required_fields(result):
221218
if field not in result:
222219
raise ERROR_REQUIRED_PARAMETER(key=field)
223220

221+
@staticmethod
222+
def _convert_data_values(raw_data):
223+
converted = {}
224+
for key, value in raw_data.items():
225+
try:
226+
converted[key] = float(value) if value else 0.0
227+
except (ValueError, TypeError):
228+
converted[key] = value
229+
return converted
230+
224231
def _set_type_mapper(self, result):
225232
# Not Implemented
226233
if "additional_info" in self.type_mapper:

src/cloudforet/cost_analysis/model/cost_model.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ class Cost(Model):
1515
resource = StringType()
1616
billed_date = StringType(required=True, max_length=7)
1717
additional_info = DictType(StringType, default={})
18+
data = DictType(StringType, default={})
1819
tags = DictType(StringType, default={})

0 commit comments

Comments
 (0)