Skip to content
This repository has been archived by the owner on Jan 1, 2020. It is now read-only.

Commit

Permalink
add processor resource monitor
Browse files Browse the repository at this point in the history
  • Loading branch information
sdayu committed Aug 7, 2014
1 parent 3289fc0 commit 0a8c0aa
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 31 deletions.
2 changes: 2 additions & 0 deletions nokkhumapi/routing.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ def admin_include(config):
'/processors/{processor_id}')
config.add_route('admin.processors.operating',
'/processors/{processor_id}/operating')
config.add_route('admin.processors.resources',
'/processors/{processor_id}/resources')

config.add_route('admin.processor_commands.list',
'/processor_commands')
Expand Down
93 changes: 63 additions & 30 deletions nokkhumapi/views/admin/processors.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,22 @@
'''
from pyramid.view import view_defaults
from pyramid.view import view_config
from dateutil import tz

from nokkhumapi import models

@view_defaults(route_name='admin.processors', permission='role:admin', renderer='json')

@view_defaults(route_name='admin.processors',
permission='role:admin',
renderer='json')
class Processor:
def __init__(self, request):
self.request = request

def build_result(self, processor):
if processor is None:
return None

processor_operating=dict(
user_command=processor.operating.user_command,
status=processor.operating.status,
Expand All @@ -33,50 +37,79 @@ def build_result(self, processor):
processor_operating['compute_node']['name'] = 'Unavailable'

result = dict(
id=processor.id,
name=processor.name,
storage_period=processor.storage_period,
image_processors=processor.image_processors,
created_date=processor.created_date,
updated_date=processor.updated_date,
status=processor.status,
project=dict(
id=processor.project.id,
name=processor.project.name
),
owner=dict(
id=processor.owner.id,
# email=processor.owner.email
),
cameras=[dict(id=camera.id, name=camera.name) for camera in processor.cameras],
processor_operating=processor_operating
)
id=processor.id,
name=processor.name,
storage_period=processor.storage_period,
image_processors=processor.image_processors,
created_date=processor.created_date,
updated_date=processor.updated_date,
status=processor.status,
project=dict(
id=processor.project.id,
name=processor.project.name
),
owner=dict(
id=processor.owner.id,
# email=processor.owner.email
),
cameras=[dict(id=camera.id, name=camera.name) for camera in processor.cameras],
processor_operating=processor_operating
)
# print('result:', result)
return result

@view_config(route_name='admin.processors.list', request_method='GET')
def list_processor(self):
if 'user_id' in self.request.GET:
user = models.User.objects.with_id(self.request.GET.get('user_id'))
processors = models.Processor.objects(owner=user, status='active').order_by('-operating__updated_date').all()
else:
processors = models.Processor.objects(status='active').order_by('-operating__updated_date').all()

result = dict(
processors=[ self.build_result(processor)
for processor in processors
]
]
)

return result

@view_config(request_method='GET')
def get(self):
processor_id = self.request.matchdict['processor_id']
processor = models.Processor.objects().with_id(processor_id)

result = dict(
processor=self.build_result(processor)
processor=self.build_result(processor)
)

return result

return result

@view_config(route_name='admin.processors.resources',
permission='admin',
request_method='GET')
def get_resources(self):
matchdict = self.request.matchdict
processor_id = matchdict['processor_id']

processor = models.Processor.objects.with_id(processor_id)

processor_status = models.ProcessorStatus.objects(processor=processor)\
.order_by('-id')\
.limit(30)

ctz = tz.tzlocal()
resources = [
dict(
cpu=p.cpu,
memory=p.memory,
threads=p.threads,
reported_date=p.reported_date.replace(tzinfo=ctz)
) for p in processor_status
]

resources.reverse()

return dict(
resources=resources
)
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
'waitress',
'mongoengine',
'pycrypto',
'boto'
'boto',
'dateutils'
]

setup(name='nokkhum-api',
Expand Down

0 comments on commit 0a8c0aa

Please sign in to comment.