]> git.saurik.com Git - apple/xnu.git/blobdiff - tools/lldbmacros/plugins/speedtracer.py
xnu-4570.1.46.tar.gz
[apple/xnu.git] / tools / lldbmacros / plugins / speedtracer.py
old mode 100644 (file)
new mode 100755 (executable)
index 8d9d9e2..0852232
@@ -1,5 +1,5 @@
-# A basic Plugin that creates performance reports from zprint output
-import urllib, urllib2
+import json, urllib, urllib2
+from urllib2 import Request, urlopen, HTTPError
 
 kern_version = None
 def plugin_init(kernel_target, config, lldb_obj, isConnected):
@@ -19,25 +19,27 @@ def plugin_execute(command_name, result_output):
     outstr = ''
     further_cmds = []
     submitvars = {}
-    submitvars['type']="text"
-    submitvars['log']=result_output
+    submitvars['log_content']=result_output
 
-    submiturl = "http://speedtracer.apple.com/trace/analyze?format=xml"
+    submiturl = "https://speedtracer.apple.com/api/v2/trace"
     encoded_data = urllib.urlencode(submitvars)
-    request = urllib2.Request(submiturl, encoded_data, {"Accept":"application/xml"})
-    response = urllib2.urlopen(request)
-
-    status = response.info()['status']
-    if status == 201 or status == '201':
-        outstr += "CrashTracer data found at " + response.info()['location']
-        newurl = response.info()['location']
-        import webbrowser
-        webbrowser.open(newurl)
-        status = True
-    else:
-        outstr += "unknown response from server \n" + str(response.info())     
+    request = urllib2.Request(submiturl, encoded_data)
+    request.add_header("Accept", "application/json")
+    request.add_header("X-ST-GroupName", "core-os")
+    try:
+        response = urllib2.urlopen(request)
+        response_str = response.read()
+        j = json.loads(response_str)
+        outstr += "\nspeedtracer output:\n\n"
+        stacks = j.get("symbolicated_log")
+        if stacks:
+            outstr += stacks
+        else:
+            outstr += json.dumps(j)
+    except HTTPError as e:
+        outstr += "speedtracer replied with\n" + str(e.info())     
         status = False
-    
     return (status, outstr, further_cmds)
 
 def plugin_cleanup():