diff options
author | Zhongyue Luo <lzyeval@gmail.com> | 2012-06-06 10:32:49 +0800 |
---|---|---|
committer | Zhongyue Luo <lzyeval@gmail.com> | 2012-06-16 07:17:01 +0800 |
commit | 9ff3121bd90133fb3b37c0e10407b5f7ade26b90 (patch) | |
tree | 9c3d48c0b49f89374813c23dc49bc7ded34ed414 /nova/utils.py | |
parent | fb9abcc83935b01746aeba0db4c431fe72b921fc (diff) | |
download | nova-9ff3121bd90133fb3b37c0e10407b5f7ade26b90.tar.gz nova-9ff3121bd90133fb3b37c0e10407b5f7ade26b90.tar.xz nova-9ff3121bd90133fb3b37c0e10407b5f7ade26b90.zip |
Replaces functions in utils.py with openstack/common/timeutils.py
Fixes bug #1008628
1. Edit openstack-common.conf and import nova/openstack/common/timeutils.py
2. Move time related functions from utils.py to timeutils.py
3. Replace following functions in utils.py with timeutils.py
- isotime
- parse_isotime
- strtime
- parse_strtime
- normalize_time
- is_older_than
- utcnow_ts
- utcnow
- set_time_override
- advance_time_delta
- advance_time_seconds
- clear_time_override
4. Remove datetime related functions and datetime related unittests
Change-Id: I9a92be286fb071b6237dd39495d88dae106e2ce0
Diffstat (limited to 'nova/utils.py')
-rw-r--r-- | nova/utils.py | 85 |
1 files changed, 3 insertions, 82 deletions
diff --git a/nova/utils.py b/nova/utils.py index ddc998524..d7fceddf3 100644 --- a/nova/utils.py +++ b/nova/utils.py @@ -46,7 +46,6 @@ from eventlet import event from eventlet.green import subprocess from eventlet import greenthread from eventlet import semaphore -import iso8601 import lockfile import netaddr @@ -56,11 +55,10 @@ from nova import log as logging from nova.openstack.common import cfg from nova.openstack.common import excutils from nova.openstack.common import importutils +from nova.openstack.common import timeutils LOG = logging.getLogger(__name__) -ISO_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S" -PERFECT_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%f" FLAGS = flags.FLAGS FLAGS.register_opt( @@ -331,7 +329,7 @@ def last_completed_audit_period(unit=None): unit, offset = unit.split("@", 1) offset = int(offset) - rightnow = utcnow() + rightnow = timeutils.utcnow() if unit not in ('month', 'day', 'year', 'hour'): raise ValueError('Time period must be hour, day, month or year') if unit == 'month': @@ -446,83 +444,6 @@ def get_my_linklocal(interface): raise exception.NovaException(msg) -def utcnow(): - """Overridable version of utils.utcnow.""" - if utcnow.override_time: - return utcnow.override_time - return datetime.datetime.utcnow() - - -utcnow.override_time = None - - -def is_older_than(before, seconds): - """Return True if before is older than seconds.""" - return utcnow() - before > datetime.timedelta(seconds=seconds) - - -def utcnow_ts(): - """Timestamp version of our utcnow function.""" - return time.mktime(utcnow().timetuple()) - - -def set_time_override(override_time=utcnow()): - """Override utils.utcnow to return a constant time.""" - utcnow.override_time = override_time - - -def advance_time_delta(timedelta): - """Advance overriden time using a datetime.timedelta.""" - assert(not utcnow.override_time is None) - utcnow.override_time += timedelta - - -def advance_time_seconds(seconds): - """Advance overriden time by seconds.""" - advance_time_delta(datetime.timedelta(0, seconds)) - - -def clear_time_override(): - """Remove the overridden time.""" - utcnow.override_time = None - - -def strtime(at=None, fmt=PERFECT_TIME_FORMAT): - """Returns formatted utcnow.""" - if not at: - at = utcnow() - return at.strftime(fmt) - - -def parse_strtime(timestr, fmt=PERFECT_TIME_FORMAT): - """Turn a formatted time back into a datetime.""" - return datetime.datetime.strptime(timestr, fmt) - - -def isotime(at=None): - """Stringify time in ISO 8601 format""" - if not at: - at = utcnow() - str = at.strftime(ISO_TIME_FORMAT) - tz = at.tzinfo.tzname(None) if at.tzinfo else 'UTC' - str += ('Z' if tz == 'UTC' else tz) - return str - - -def parse_isotime(timestr): - """Turn an iso formatted time back into a datetime.""" - try: - return iso8601.parse_date(timestr) - except (iso8601.ParseError, TypeError) as e: - raise ValueError(e.message) - - -def normalize_time(timestamp): - """Normalize time in arbitrary timezone to UTC""" - offset = timestamp.utcoffset() - return timestamp.replace(tzinfo=None) - offset if offset else timestamp - - def parse_mailmap(mailmap='.mailmap'): mapping = {} if os.path.exists(mailmap): @@ -1241,7 +1162,7 @@ def service_is_up(service): """Check whether a service is up based on last heartbeat.""" last_heartbeat = service['updated_at'] or service['created_at'] # Timestamps in DB are UTC. - elapsed = total_seconds(utcnow() - last_heartbeat) + elapsed = total_seconds(timeutils.utcnow() - last_heartbeat) return abs(elapsed) <= FLAGS.service_down_time |