Index: chrome/common/extensions/docs/server2/handler.py |
diff --git a/chrome/common/extensions/docs/server2/handler.py b/chrome/common/extensions/docs/server2/handler.py |
index 392b0f1a3bcc2d4fd6a315e14cd1388f4da94e9f..a0e044e753aab96ad34bc124736999020b42f372 100644 |
--- a/chrome/common/extensions/docs/server2/handler.py |
+++ b/chrome/common/extensions/docs/server2/handler.py |
@@ -5,8 +5,10 @@ |
import time |
from appengine_wrappers import taskqueue |
+from commit_tracker import CommitTracker |
from cron_servlet import CronServlet |
from instance_servlet import InstanceServlet |
+from object_store_creator import ObjectStoreCreator |
from patch_servlet import PatchServlet |
from refresh_servlet import RefreshServlet |
from servlet import Servlet, Request, Response |
@@ -16,12 +18,53 @@ from test_servlet import TestServlet |
_DEFAULT_SERVLET = InstanceServlet.GetConstructor() |
-_FORCE_CRON_TARGET = 'force_cron' |
+class _EnqueueServlet(Servlet): |
+ '''This Servlet can be used to manually enqueue tasks on the default |
+ taskqueue. Useful for when an admin wants to manually force a specific |
+ DataSource refresh, but the refresh operation takes longer than the 60 sec |
+ timeout of a non-taskqueue request. For example, you might query |
+ |
+ /_enqueue/_refresh/content_providers/cr-native-client?commit=123ff65468dcafff0 |
+ |
+ which will enqueue a task (/_refresh/content_providers/cr-native-client) to |
+ refresh the NaCl documentation cache for commit 123ff65468dcafff0. |
+ |
+ Access to this servlet should always be restricted to administrative users. |
+ ''' |
+ def __init__(self, request): |
+ Servlet.__init__(self, request) |
+ |
+ def Get(self): |
+ queue = taskqueue.Queue() |
+ queue.add(taskqueue.Task(url='/%s' % self._request.path, |
+ params=self._request.arguments)) |
+ return Response.Ok('Task enqueued.') |
+ |
+ |
+class _QueryCommitServlet(Servlet): |
+ '''Provides read access to the commit ID cache within the server. For example: |
+ |
+ /_query_commit/master |
+ |
+ will return the commit ID stored under the commit key "master" within the |
+ commit cache. Currently "master" is the only named commit we cache, and it |
+ corresponds to the commit ID whose data currently populates the data cache |
+ used by live instances. |
+ ''' |
+ def __init__(self, request): |
+ Servlet.__init__(self, request) |
+ |
+ def Get(self): |
+ object_store_creator = ObjectStoreCreator(start_empty=False) |
+ commit_tracker = CommitTracker(object_store_creator) |
+ return Response.Ok(commit_tracker.Get(self._request.path).Get()) |
_SERVLETS = { |
'cron': CronServlet, |
+ 'enqueue': _EnqueueServlet, |
'patch': PatchServlet, |
+ 'query_commit': _QueryCommitServlet, |
'refresh': RefreshServlet, |
'test': TestServlet, |
} |
@@ -36,16 +79,6 @@ class Handler(Servlet): |
if not '/' in servlet_path: |
servlet_path += '/' |
servlet_name, servlet_path = servlet_path.split('/', 1) |
- if servlet_name == _FORCE_CRON_TARGET: |
- queue = taskqueue.Queue() |
- queue.purge() |
- time.sleep(2) |
- queue.add(taskqueue.Task(url='/_cron')) |
- return Response.Ok('Cron job started.') |
- if servlet_name == 'enqueue': |
- queue = taskqueue.Queue() |
- queue.add(taskqueue.Task(url='/%s'%servlet_path)) |
- return Response.Ok('Task enqueued.') |
servlet = _SERVLETS.get(servlet_name) |
if servlet is None: |
return Response.NotFound('"%s" servlet not found' % servlet_path) |