Merge "Correct the interval between two reports" into stable/mitaka
This commit is contained in:
commit
2c8a57f4d7
|
@ -13,7 +13,6 @@
|
|||
# under the License.
|
||||
|
||||
import sys
|
||||
import time
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log as logging
|
||||
|
@ -22,6 +21,7 @@ from oslo_service import loopingcall
|
|||
from oslo_service import periodic_task
|
||||
from oslo_service import service
|
||||
from oslo_utils import importutils
|
||||
from oslo_utils import timeutils
|
||||
|
||||
from neutron._i18n import _, _LE, _LI, _LW
|
||||
from neutron.agent.common import config
|
||||
|
@ -117,7 +117,7 @@ class MeteringAgent(MeteringPluginRpc, manager.Manager):
|
|||
info['time'] = 0
|
||||
|
||||
def _purge_metering_info(self):
|
||||
deadline_timestamp = int(time.time()) - self.conf.report_interval
|
||||
deadline_timestamp = timeutils.utcnow_ts() - self.conf.report_interval
|
||||
label_ids = [
|
||||
label_id
|
||||
for label_id, info in self.metering_infos.items()
|
||||
|
@ -126,7 +126,7 @@ class MeteringAgent(MeteringPluginRpc, manager.Manager):
|
|||
del self.metering_infos[label_id]
|
||||
|
||||
def _add_metering_info(self, label_id, pkts, bytes):
|
||||
ts = int(time.time())
|
||||
ts = timeutils.utcnow_ts()
|
||||
info = self.metering_infos.get(label_id, {'bytes': 0,
|
||||
'pkts': 0,
|
||||
'time': 0,
|
||||
|
@ -161,11 +161,11 @@ class MeteringAgent(MeteringPluginRpc, manager.Manager):
|
|||
def _metering_loop(self):
|
||||
self._add_metering_infos()
|
||||
|
||||
ts = int(time.time())
|
||||
ts = timeutils.utcnow_ts()
|
||||
delta = ts - self.last_report
|
||||
|
||||
report_interval = self.conf.report_interval
|
||||
if delta > report_interval:
|
||||
if delta >= report_interval:
|
||||
self._metering_notification()
|
||||
self._purge_metering_info()
|
||||
self.last_report = ts
|
||||
|
|
|
@ -14,13 +14,14 @@
|
|||
|
||||
import mock
|
||||
from oslo_config import cfg
|
||||
from oslo_utils import fixture as utils_fixture
|
||||
from oslo_utils import timeutils
|
||||
from oslo_utils import uuidutils
|
||||
|
||||
from neutron.services.metering.agents import metering_agent
|
||||
from neutron.tests import base
|
||||
from neutron.tests import fake_notifier
|
||||
|
||||
|
||||
_uuid = uuidutils.generate_uuid
|
||||
|
||||
TENANT_ID = _uuid()
|
||||
|
@ -122,6 +123,48 @@ class TestMeteringOperations(base.BaseTestCase):
|
|||
self.assertEqual(88, payload['pkts'])
|
||||
self.assertEqual(444, payload['bytes'])
|
||||
|
||||
def test_notification_report_interval(self):
|
||||
measure_interval = 30
|
||||
report_interval = 600
|
||||
|
||||
now = timeutils.utcnow()
|
||||
time_fixture = self.useFixture(utils_fixture.TimeFixture(now))
|
||||
self.addCleanup(timeutils.clear_time_override)
|
||||
|
||||
self.agent.routers_updated(None, ROUTERS)
|
||||
|
||||
self.driver.get_traffic_counters.return_value = {LABEL_ID:
|
||||
{'pkts': 889,
|
||||
'bytes': 4440}}
|
||||
|
||||
cfg.CONF.set_override('measure_interval', measure_interval)
|
||||
cfg.CONF.set_override('report_interval', report_interval)
|
||||
|
||||
for i in range(report_interval):
|
||||
self.agent._metering_loop()
|
||||
count = 0
|
||||
|
||||
if len(fake_notifier.NOTIFICATIONS) > 1:
|
||||
for n in fake_notifier.NOTIFICATIONS:
|
||||
if n['event_type'] == 'l3.meter':
|
||||
#skip the first notification because the time is 0
|
||||
count += 1
|
||||
if count > 1:
|
||||
break
|
||||
|
||||
time_fixture.advance_time_seconds(measure_interval)
|
||||
|
||||
self.assertEqual('l3.meter', n['event_type'])
|
||||
|
||||
payload = n['payload']
|
||||
self.assertEqual(TENANT_ID, payload['tenant_id'])
|
||||
self.assertEqual(LABEL_ID, payload['label_id'])
|
||||
self.assertTrue((payload['time'] - report_interval)
|
||||
< measure_interval, payload)
|
||||
interval = (payload['last_update'] - payload['first_update']) \
|
||||
- report_interval
|
||||
self.assertTrue(interval < measure_interval, payload)
|
||||
|
||||
def test_router_deleted(self):
|
||||
label_id = _uuid()
|
||||
self.driver.get_traffic_counters = mock.MagicMock()
|
||||
|
|
Loading…
Reference in New Issue