diff options
Diffstat (limited to 'gae/webapp/src/endpoint/host_info.py')
-rw-r--r-- | gae/webapp/src/endpoint/host_info.py | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/gae/webapp/src/endpoint/host_info.py b/gae/webapp/src/endpoint/host_info.py index 49e84d3..ac89a11 100644 --- a/gae/webapp/src/endpoint/host_info.py +++ b/gae/webapp/src/endpoint/host_info.py @@ -15,12 +15,13 @@ import datetime import endpoints - -from protorpc import remote +import logging from google.appengine.api import users +from google.appengine.ext import ndb from webapp.src import vtslab_status as Status +from webapp.src.endpoint import endpoint_base from webapp.src.proto import model HOST_INFO_RESOURCE = endpoints.ResourceContainer(model.HostInfoMessage) @@ -44,6 +45,7 @@ def AddNullDevices(hostname, null_device_count): existing_null_device_count = len(null_devices) if existing_null_device_count < null_device_count: + devices_to_put = [] for _ in range(null_device_count - existing_null_device_count): device = model.DeviceModel() device.hostname = hostname @@ -53,11 +55,13 @@ def AddNullDevices(hostname, null_device_count): device.scheduling_status = Status.DEVICE_SCHEDULING_STATUS_DICT[ "free"] device.timestamp = datetime.datetime.now() - device.put() + devices_to_put.append(device) + if devices_to_put: + ndb.put_multi(devices_to_put) -@endpoints.api(name='host_info', version='v1') -class HostInfoApi(remote.Service): +@endpoints.api(name='host', version='v1') +class HostInfoApi(endpoint_base.EndpointBase): """Endpoint API for host_info.""" @endpoints.method( @@ -73,6 +77,7 @@ class HostInfoApi(remote.Service): else: username = "anonymous" + devices_to_put = [] for request_device in request.devices: device_query = model.DeviceModel.query( model.DeviceModel.serial == request_device.serial @@ -85,12 +90,45 @@ class HostInfoApi(remote.Service): device.serial = request_device.serial device.scheduling_status = Status.DEVICE_SCHEDULING_STATUS_DICT[ "free"] + if not device.product or request_device.product != "error": + device.product = request_device.product + device.username = username device.hostname = request.hostname - device.product = request_device.product device.status = request_device.status device.timestamp = datetime.datetime.now() - device.put() + devices_to_put.append(device) + if devices_to_put: + ndb.put_multi(devices_to_put) return model.DefaultResponse( return_code=model.ReturnCodeMessage.SUCCESS) + + @endpoints.method( + endpoint_base.GET_REQUEST_RESOURCE, + model.DeviceResponseMessage, + path="get", + http_method="POST", + name="get") + def get(self, request): + """Gets the devices from datastore.""" + return_list, more = self.Get(request=request, + metaclass=model.DeviceModel, + message=model.DeviceInfoMessage) + + return model.DeviceResponseMessage(devices=return_list, has_next=more) + + @endpoints.method( + endpoint_base.COUNT_REQUEST_RESOURCE, + model.CountResponseMessage, + path="count", + http_method="POST", + name="count") + def count(self, request): + """Gets total number of DeviceModel entities stored in datastore.""" + filters = self.CreateFilterList( + filter_string=request.filter, metaclass=model.DeviceModel) + + count = self.Count(metaclass=model.DeviceModel, filters=filters) + + return model.CountResponseMessage(count=count) |