Skip to content

Commit 6df46e9

Browse files
committed
record: use properties for {start,end}_time
Rather than modifying attributes directly, lets use properties and setters/getters to modify the start and end times of a given record.
1 parent 181aa81 commit 6df46e9

File tree

2 files changed

+31
-5
lines changed

2 files changed

+31
-5
lines changed

caso/extract/nova.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,16 @@ def build_record(self, server, vo, images, flavors, users):
7676
"file or set the correct properties in the "
7777
"flavor." % flavor)
7878

79+
server_start = dateutil.parser.parse(server.created)
80+
server_start = server_start.replace(tzinfo=None)
81+
7982
r = record.CloudRecord(server.id,
8083
CONF.site_name,
8184
server.name,
8285
server.user_id,
8386
server.tenant_id,
8487
vo,
88+
start_time=server_start,
8589
compute_service=CONF.service_name,
8690
status=status,
8791
image_id=image_id,
@@ -198,14 +202,13 @@ def extract_for_project(self, project, extract_from, extract_to):
198202
records[instance_id].disk = usage["local_gb"]
199203

200204
# Start time must be the time when the machine was created
201-
started = server_start
202-
records[instance_id].start_time = int(started.strftime("%s"))
205+
started = records[instance_id].start_time
203206

204207
# End time must ben the time when the machine was ended, but it may
205208
# be none
206209
if usage.get('ended_at', None) is not None:
207210
ended = dateutil.parser.parse(usage["ended_at"])
208-
records[instance_id].end_time = int(ended.strftime("%s"))
211+
records[instance_id].end_time = ended
209212
else:
210213
ended = None
211214

caso/record.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
# License for the specific language governing permissions and limitations
1515
# under the License.
1616

17+
import datetime
1718
import json
1819
import pprint
1920

@@ -129,6 +130,26 @@ def as_dict(self, version=None):
129130
return {k: v for k, v in self.map.items()
130131
if k in self._version_field_map[version]}
131132

133+
@property
134+
def start_time(self):
135+
return self._start_time
136+
137+
@start_time.setter
138+
def start_time(self, value):
139+
if value and not isinstance(value, datetime.datetime):
140+
raise ValueError("Dates must be datetime.datetime objects")
141+
self._start_time = value
142+
143+
@property
144+
def end_time(self):
145+
return self._end_time
146+
147+
@end_time.setter
148+
def end_time(self, value):
149+
if value and not isinstance(value, datetime.datetime):
150+
raise ValueError("Dates must be datetime.datetime objects")
151+
self._end_time = value
152+
132153
@property
133154
def map(self):
134155
d = {'VMUUID': self.uuid,
@@ -138,8 +159,10 @@ def map(self):
138159
'LocalGroupId': self.group_id,
139160
'FQAN': self.fqan,
140161
'Status': self.status,
141-
'StartTime': self.start_time,
142-
'EndTime': self.end_time,
162+
'StartTime': self.start_time and int(
163+
self.start_time.strftime("%s")
164+
),
165+
'EndTime': self.end_time and int(self.end_time.strftime("%s")),
143166
'SuspendDuration': self.suspend_duration,
144167
'WallDuration': self.wall_duration,
145168
'CpuDuration': self.cpu_duration,

0 commit comments

Comments
 (0)