Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Unified Diff: tools/deep_memory_profiler/visualizer/app.py

Issue 23781012: Upload file to app engine and generate public url for dmprof visualizer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add default_template attribute validation Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/deep_memory_profiler/visualizer/app.py
diff --git a/tools/deep_memory_profiler/visualizer/app.py b/tools/deep_memory_profiler/visualizer/app.py
new file mode 100644
index 0000000000000000000000000000000000000000..a77e52f4459724d9bfad88116c6c247ef6870b5c
--- /dev/null
+++ b/tools/deep_memory_profiler/visualizer/app.py
@@ -0,0 +1,78 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import jinja2
+import os
+import services
+import urllib
+import webapp2
+
+from google.appengine.ext import blobstore
+from google.appengine.ext.webapp import blobstore_handlers
+
+
+JINJA_ENVIRONMENT = jinja2.Environment(
+ loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
+ extensions=['jinja2.ext.autoescape'])
+
+
+class MainPage(webapp2.RequestHandler):
+ """Show breakdown with received profiler-id and template-id. If nothing was
+ received, show blank page waiting user to upload file."""
+ def get(self):
+ page_template = JINJA_ENVIRONMENT.get_template('index.html')
+ upload_url = blobstore.create_upload_url('/upload')
+
+ # Get profiler id and template id from url query.
+ run_id = self.request.get('run_id')
+ tmpl_id = self.request.get('tmpl_id')
+ upload_msg = self.request.get('upload_msg')
+
+ template_values = {
+ 'upload_url': upload_url,
+ 'upload_msg': upload_msg
+ }
+
+ if not run_id or not tmpl_id:
+ template_values['json'] = 'null'
+ template_values['template'] = 'null'
+
+ self.response.write(page_template.render(template_values))
+ else:
+ template_values['json'] = services.GetProfiler(run_id)
+ template_values['template'] = services.GetTemplate(tmpl_id)
+
+ self.response.write(page_template.render(template_values))
+
+
+class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
+ """Handle file uploading with BlobstoreUploadHandler. BlobstoreUploadHandler
+ can deal with files overweighing size limitation within one HTTP connection so
+ that user can upload large json file."""
+ def post(self):
+ blob_info = self.get_uploads('file')[0]
+
+ run_id = services.CreateProfiler(blob_info)
+ default_key = services.CreateTemplates(blob_info)
+
+ # TODO(junjianx): Validation of uploaded file should be done separately.
+ if not default_key:
+ # Jump to home page with error message.
+ req_params = {
+ 'upload_msg': 'No default key was found.'
+ }
+ self.redirect('/?' + urllib.urlencode(req_params))
+ else:
+ # Jump to new graph page using default template.
+ req_params = {
+ 'run_id': run_id,
+ 'tmpl_id': default_key.urlsafe()
+ }
+ self.redirect('/?' + urllib.urlencode(req_params))
+
+
+application = webapp2.WSGIApplication([
+ ('/', MainPage),
+ ('/upload', UploadHandler)
+], debug=True)

Powered by Google App Engine
This is Rietveld 408576698