Ejemplo n.º 1
0
    def test_exception(self):
        cases = (
            (
                '2018-03-06 15:08:11',
                {
                    'every': [1, 'hour'],
                    'at': {
                        'hour': 14,
                        'second': 44
                    },
                },
            ),
            (
                '2018-03-06 15:08:11',
                {
                    'every': [10, 'second'],
                    'at': {
                        'second': 0
                    },
                },
            ),
        )

        for last_fire, conf in cases:
            last_fire_date = timeutil.parse(last_fire, 'mysql')
            last_fire_ts = time.mktime(last_fire_date.timetuple())

            with self.assertRaises(Exception) as context:
                jobscheduler.get_next_fire_time(conf, last_fire_ts)

            self.assertIn('NextFireTimeError', repr(context.exception))
Ejemplo n.º 2
0
    def test_parse_with_timezone(self):
        cases = (
            ('2018-04-03 17:45:01', 'Asia/Shanghai', 1522748701),
            ('2018-04-03 17:45:01', 'UTC', 1522748701 + 3600 * 8),
        )

        for time_str, timezone, exp_ts in cases:
            dt = timeutil.parse(time_str, 'mysql', timezone=timezone)
            ts = timeutil.datetime_to_ts(dt)

            self.assertEqual(exp_ts, ts)
Ejemplo n.º 3
0
    def test_direct_format(self):

        for fmt_key, tm_str in test_case['format'].items():

            # parse
            dt_key = timeutil.parse(tm_str, fmt_key)
            dt_direct = timeutil.parse(tm_str, timeutil.formats[fmt_key])

            self.assertTrue(dt_key == dt_direct)

            # format
            self.assertEqual(tm_str, timeutil.format(dt_key, fmt_key))
            self.assertEqual(
                tm_str, timeutil.format(dt_key, timeutil.formats[fmt_key]))

            # format_ts
            now = int(time.time())
            self.assertEqual(
                timeutil.format_ts(now, fmt_key),
                timeutil.format_ts(now, timeutil.formats[fmt_key]))
    def test_direct_format(self):

        for fmt_key, tm_str in test_case['format'].items():

            # parse
            dt_key = timeutil.parse(tm_str, fmt_key)
            dt_direct = timeutil.parse(tm_str, timeutil.formats[fmt_key])

            self.assertTrue(dt_key == dt_direct)

            # format
            self.assertEqual(tm_str, timeutil.format(dt_key, fmt_key))
            self.assertEqual(tm_str,
                             timeutil.format(dt_key,
                                             timeutil.formats[fmt_key]))

            # format_ts
            now = int(time.time())
            self.assertEqual(timeutil.format_ts(now, fmt_key),
                             timeutil.format_ts(now, timeutil.formats[fmt_key]))
    def test_parse_with_timezone(self):
        cases = (
            ('2018-04-03 17:45:01', 'Asia/Shanghai', 1522748701),
            ('2018-04-03 17:45:01', 'UTC', 1522748701 + 3600 * 8),
        )

        for time_str, timezone, exp_ts in cases:
            dt = timeutil.parse(time_str, 'mysql', timezone=timezone)
            ts = timeutil.datetime_to_ts(dt)

            self.assertEqual(exp_ts, ts)
Ejemplo n.º 6
0
    def test_parse(self):

        for fmt_key, tm_str in test_case['format'].items():

            dt = timeutil.parse(tm_str, fmt_key)
            ts = timeutil.utc_datetime_to_ts(dt)

            if fmt_key == 'archive':
                self.assertEqual(test_case['ts']['hour_accuracy'], ts)
            elif fmt_key.startswith('daily'):
                self.assertEqual(test_case['ts']['day_accuracy'], ts)
            else:
                self.assertEqual(test_case['ts']['second_accuracy'], ts)
    def test_parse(self):

        tss = test_case['ts']

        for fmt_key, tm_str in test_case['format'].items():

            dt = timeutil.parse(tm_str, fmt_key)
            ts = timeutil.utc_datetime_to_ts(dt)

            if fmt_key == 'archive':
                self.assertEqual(tss['hour_accuracy'], ts)
                self.assertEqual(tss['hour_accuracy'], timeutil.parse_to_ts(tm_str, fmt_key))
            elif fmt_key.startswith('daily'):
                self.assertEqual(tss['day_accuracy'], ts)
                self.assertEqual(tss['day_accuracy'], timeutil.parse_to_ts(tm_str, fmt_key))
            else:
                self.assertEqual(tss['second_accuracy'], ts)
                self.assertEqual(tss['second_accuracy'], timeutil.parse_to_ts(tm_str, fmt_key))
Ejemplo n.º 8
0
def parse(log_str):
    r = re.match('^\[(.+?),(.+?),(.+?),(.+?),(\d+?),(\w+?)]', log_str)

    time_str = r.group(1)

    log_dt = timeutil.parse(time_str, 'mysql')
    log_ts = int(time.mktime(log_dt.timetuple()))

    source_file = r.group(4)
    line_number = int(r.group(5))
    level = standard_level[r.group(6)]

    log_info = {
        'log_ts': log_ts,
        'level': level,
        'source_file': source_file,
        'line_number': line_number,
    }

    return log_info
Ejemplo n.º 9
0
from pykit import timeutil
from pykit import utfjson

f = open('loop_monitor_report.txt', 'r')

i = 0
last_ts = None

while True:
    line = f.readline()
    if line == '':
        break

    parts = utfjson.load(line.strip())
    r = timeutil.parse(parts[0], 'mysql')
    ts = time.mktime(r.timetuple())

    if last_ts is None:
        i += 1
        last_ts = ts
        continue

    if ts != last_ts + 1:
        print '%d line: %s not adjacent to last line' % (i, line)
        break

    i += 1
    last_ts = ts

print 'no lost slot'
Ejemplo n.º 10
0
    def test_get_next_fire_time(self):
        cases = (
            ('2018-03-06 15:08:11', {
                'every': [1, 'hour'],
                'at': {
                    'minute': 33,
                    'second': 44
                },
            }, '2018-03-06 16:33:44+08:00'),
            (
                '2018-03-06 15:08:11',
                {
                    'every': [1, 'hour'],
                },
                '2018-03-06 16:08:11+08:00',
            ),
            ('2018-03-06 15:08:11', {
                'every': [1, 'hour'],
                'at': {
                    'minute': 0,
                    'second': 0
                },
            }, '2018-03-06 16:00:00+08:00'),
            ('2018-03-06 15:00:00', {
                'every': [1, 'hour'],
                'at': {
                    'minute': 0,
                    'second': 0
                },
            }, '2018-03-06 16:00:00+08:00'),
            ('2018-03-06 15:10:02', {
                'every': [2, 'day'],
                'at': {
                    'minute': 0,
                    'second': 0
                },
            }, '2018-03-08 15:00:00+08:00'),
            ('2018-03-06 15:59:59', {
                'every': [1, 'hour'],
                'at': {
                    'minute': 0,
                    'second': 0
                },
            }, '2018-03-06 16:00:00+08:00'),
            ('2018-03-06 15:59:59', {
                'every': [1, 'minute'],
                'at': {
                    'second': 0
                },
            }, '2018-03-06 16:00:00+08:00'),
            ('2018-03-06 16:00:00', {
                'every': [1, 'minute'],
                'at': {
                    'second': 0
                },
            }, '2018-03-06 16:01:00+08:00'),
            ('2018-03-06 16:00:00', {
                'every': [50, 'second'],
            }, '2018-03-06 16:00:50+08:00'),
            ('2018-03-06 16:00:00', {
                'every': [3, 'month'],
                'at': {
                    'day': 30,
                    'hour': 13,
                    'minute': 23,
                    'second': 33
                },
            }, '2018-06-30 13:23:33+08:00'),
            (
                '2018-06-30 14:23:55',
                {
                    'every': [3, 'month'],
                    'at': {
                        'day': 30,
                        'hour': 13,
                        'minute': 23,
                        'second': 33
                    },
                },
                # not 2018-09-30, because we assume every month is 31 days,
                # so add 3 * 31 days to 2018-06-30 is not 2018-09-30.
                '2018-10-30 13:23:33+08:00'),
            ('2018-06-30 13:23:33', {
                'every': [3, 'week'],
                'at': {
                    'hour': 13,
                    'minute': 23,
                    'second': 33
                },
            }, '2018-07-21 13:23:33+08:00'),
            ('2018-03-06 15:10:02', {
                'every': [1, 'day'],
                'at': {
                    'hour': 12,
                    'minute': 0,
                    'second': 0
                },
                'timezone': 'utc',
            }, '2018-03-07 20:00:00+08:00'),
            ('2018-03-06 15:10:02', {
                'every': [1, 'day'],
                'at': {
                    'hour': 12,
                    'minute': 0,
                    'second': 0
                },
                'timezone': 'Asia/Shanghai'
            }, '2018-03-07 12:00:00+08:00'),
            (
                '2018-03-06 15:10:02',
                {
                    'every': [1, 'day'],
                    'at': {
                        'hour': 2,
                        'minute': 0,
                        'second': 0
                    },
                    'timezone': 'US/Pacific'
                },
                # 'US/Pacific' is 16 hours behind 'Asia/Shanghai'
                # after add one day to 2018-03-06 15:10:02, it is
                # 2018-03-07 15:10:02, but at 'US/Pacific', it is
                # 2018-03-06 23:10:02, need fire at
                # 2018-03-06 02:00:00, that is 2018-03-06 18:00:00+08:00
                '2018-03-06 18:00:00+08:00'),
        )

        for last_fire, conf, expected_next_fire in cases:
            last_fire_date = timeutil.parse(last_fire, 'mysql')
            last_fire_ts = time.mktime(last_fire_date.timetuple())

            next_fire_time = jobscheduler.get_next_fire_time(
                conf, last_fire_ts)

            self.assertEqual(expected_next_fire, next_fire_time['string'])
Ejemplo n.º 11
0
from pykit import timeutil


if __name__ == '__main__':
    time_utc = 'Tue, 24 Jan 2017 07:51:59 UTC'
    dt = timeutil.parse(time_utc, 'default')
    print dt
    dt = timeutil.parse(time_utc, 'utc')
    print dt
    print 

    time_mysql = '2018-12-1 11:20:30'
    dt = timeutil.parse(time_mysql, 'mysql')
    print dt
    print 

    print timeutil.format(dt, 'utc')
    print timeutil.format(dt, 'iso')
    print timeutil.format(dt, 'daily')
    print

    ts = timeutil.utc_datetime_to_ts(dt)
    print ts
    print

    time_mysql = timeutil.format_ts(ts, 'mysql')
    print time_mysql
    time_iso = timeutil.format_ts(ts, 'iso')
    print time_iso
    print