Fix the issue when generating events

Closes-bug: #1553856
Change-Id: I78c2dd79717970f624e3a4d3bd343c54aba2df2b
This commit is contained in:
lvdongbing 2016-03-07 02:00:41 -05:00
parent 0f3444d506
commit fbe61bc996
4 changed files with 14 additions and 11 deletions

View File

@ -289,7 +289,7 @@ def resource_get_all(context, user_id=None, show_deleted=False,
}
keys = _get_sort_keys(sort_keys, sort_key_map)
query = db_filters.exact_filter(query, models.Resource, filters)
return _paginate_query(context, query, models.Node,
return _paginate_query(context, query, models.Resource,
limit=limit, marker=marker,
sort_keys=keys, sort_dir=sort_dir,
default_sort_keys=['created_at']).all()
@ -368,8 +368,8 @@ def event_get_all(context, user_id=None, limit=None, marker=None,
consts.EVENT_USER_ID: models.Event.user_id.key,
}
keys = _get_sort_keys(sort_keys, sort_key_map)
query = db_filters.exact_filter(query, models.Resource, filters)
return _paginate_query(context, query, models.Node,
query = db_filters.exact_filter(query, models.Event, filters)
return _paginate_query(context, query, models.Event,
limit=limit, marker=marker,
sort_keys=keys, sort_dir=sort_dir,
default_sort_keys=['timestamp']).all()

View File

@ -104,6 +104,7 @@ def upgrade(migrate_engine):
sqlalchemy.Column('resource_type', sqlalchemy.String(36)),
sqlalchemy.Column('action', sqlalchemy.String(36)),
sqlalchemy.Column('value', sqlalchemy.Float),
sqlalchemy.Column('deleted_at', sqlalchemy.DateTime),
mysql_engine='InnoDB',
mysql_charset='utf8'
)

View File

@ -17,7 +17,7 @@ from bilean.common import exception
from bilean.common.i18n import _
from bilean.common import utils
from bilean.db import api as db_api
from bilean.engine import resource as bilean_resources
from bilean.engine import resource as resource_mod
from oslo_log import log as logging
from oslo_utils import timeutils
@ -82,7 +82,6 @@ class Event(object):
def store(self, context):
'''Store the event into database and return its ID.'''
values = {
'id': self.id,
'user_id': self.user_id,
'action': self.action,
'resource_type': self.resource_type,
@ -124,21 +123,24 @@ def record(context, user_id, action=None, seconds=0, value=0):
"""
try:
if action == 'charge':
resources = bilean_resources.resource_get_all(
context, user_id=user_id)
resources = resource_mod.Resource.load_all(
context, user_id=user_id, project_safe=False)
for resource in resources:
usage = resource['rate'] * seconds
usage = resource.rate * seconds
event = Event(timeutils.utcnow(),
user_id=user_id,
action=action,
resource_type=resource['resource_type'],
resource_type=resource.resource_type,
value=usage)
event.store(context)
else:
elif action == 'recharge':
event = Event(timeutils.utcnow(),
user_id=user_id,
action=action,
value=value)
event.store(context)
else:
msg = _("Unsupported event action '%s'.") % action
raise exception.BileanException(msg=msg)
except Exception as exc:
LOG.error(_("Error generate events: %s") % six.text_type(exc))

View File

@ -289,10 +289,10 @@ class EngineService(service.Service):
# Update resource with rule_id and rate
resource.rule_id = rule.id
resource.rate = rule.get_price(resource)
resource.store(self.context)
# Update user with resource
user.update_with_resource(self.context, resource)
resource.store(self.context)
# As the rate of user has changed, the billing job for the user
# should change too.