+++ /dev/null
-#
-# NEPI, a framework to manage network experiments
-# Copyright (C) 2013 INRIA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Author: Alina Quereilhac <alina.quereilhac@inria.fr>
-
-
-import datetime
-import re
-
-_strf = "%Y%m%d%H%M%S%f"
-_reabs = re.compile("^\d{20}$")
-_rerel = re.compile("^(?P<time>\d+(.\d+)?)(?P<units>h|m|s|ms|us)$")
-
-# Work around to fix "ImportError: Failed to import _strptime because the import lock is held by another thread."
-datetime.datetime.strptime("20120807124732894211", _strf)
-
-def stformat(sdate):
- """ Constructs a datetime object from a string date with
- format YYYYMMddHHMMSSffff
-
- """
- return datetime.datetime.strptime(sdate, _strf).date()
-
-def tsformat(date = None):
- """ Formats a datetime object to a string with format YYYYMMddHHMMSSffff.
- If no date is given, the current date is used.
-
- """
- if not date:
- date = tnow()
-
- return date.strftime(_strf)
-
-def tnow():
- """ Returns datetime object with the current time """
- return datetime.datetime.now()
-
-def tdiff(date1, date2):
- """ Returns difference ( date1 - date2 ) as a datetime object,
- where date1 and date 2 are datetime objects
-
- """
- return date1 - date2
-
-def _get_total_seconds(td):
- return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 1e6) / 1e6
-
-def tdiffsec(date1, date2):
- """ Returns the date difference ( date1 - date2 ) in seconds,
- where date1 and date 2 are datetime objects
-
- """
- diff = tdiff(date1, date2)
- return _get_total_seconds(diff)
-
-def stabsformat(sdate, dbase = None):
- """ Constructs a datetime object from a string date.
- The string date can be expressed as an absolute date
- ( i.e. format YYYYMMddHHMMSSffff ) or as a relative time
- ( e.g. format '5m' or '10s').
- If the date is a relative time and the dbase parameter
- is given (dbase must be datetime object), the returned
- date will be dbase + sdate. If dbase is None,
- current time will be used instead as base time.
-
- :param date : string date
- :type date : date
-
- """
-
- # No date given, return current datetime
- if not sdate:
- return tnow()
-
- # Absolute date is given
- if _reabs.match(sdate):
- return stformat(sdate)
-
- # Relative time is given
- m = _rerel.match(sdate)
- if m:
- time = float(m.groupdict()['time'])
- units = m.groupdict()['units']
- if units == 'h':
- delta = datetime.timedelta(hours = time)
- elif units == 'm':
- delta = datetime.timedelta(minutes = time)
- elif units == 's':
- delta = datetime.timedelta(seconds = time)
- elif units == 'ms':
- delta = datetime.timedelta(microseconds = (time*1000))
- else:
- delta = datetime.timedelta(microseconds = time)
-
- if not dbase:
- dbase = tnow()
-
- return dbase + delta
-
- return None
-
-def compute_delay_ms(timestamp2, timestamp1):
- d1 = datetime.datetime.fromtimestamp(float(timestamp1))
- d2 = datetime.datetime.fromtimestamp(float(timestamp2))
- delay = d2 - d1
-
- # round up resolution - round up to miliseconds
- return delay.total_seconds() * 1000
-