summaryrefslogtreecommitdiff
path: root/gae/webapp/src/endpoint/host_info.py
diff options
context:
space:
mode:
Diffstat (limited to 'gae/webapp/src/endpoint/host_info.py')
-rw-r--r--gae/webapp/src/endpoint/host_info.py52
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)