Add filter for OSprofiler html output
This patch help us filter some spans in html output
using angular-ui-tree-filter (MIT license) with regular expression.
Currently, this work help us filter:
- name
- project
- service
- host
We can add more fields as we need.
Demo:
- Small trace: https://tovin07.github.io/osprofiler-filtration/pretty-simple.html
- Large trace: https://tovin07.github.io/osprofiler-filtration/very-large.html
Change-Id: I78ff242fce3e0cf07b9e4969b783e32d9529c581
Tovin Seven
6 years ago
78 | 78 | document.write('<script type="text/javascript" src="/libs/ui-bootstrap-tpls-2.3.1.min.js"><\/script>'); |
79 | 79 | document.write('<script type="text/javascript" src="/libs/highlight.min.js"><\/script>'); |
80 | 80 | document.write('<script type="text/javascript" src="/libs/angular-highlightjs.min.js"><\/script>'); |
81 | document.write('<script type="text/javascript" src="/libs/angular-ui-tree.min.js"><\/script>'); | |
82 | document.write('<script type="text/javascript" src="/libs/angular-ui-tree-filter.js"><\/script>'); | |
81 | 83 | } |
82 | 84 | else{ |
83 | 85 | document.write('<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">'); |
86 | 88 | document.write('<script type="text/javascript" src="https://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.3.1.min.js"><\/script>'); |
87 | 89 | document.write('<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.8.0/highlight.min.js"><\/script>'); |
88 | 90 | document.write('<script type="text/javascript" src="https://pc035860.github.io/angular-highlightjs/angular-highlightjs.min.js"><\/script>'); |
91 | document.write('<script type="text/javascript" src="https://cdn.rawgit.com/angular-ui-tree/angular-ui-tree/master/dist/angular-ui-tree.min.js"><\/script>'); | |
92 | document.write('<script type="text/javascript" src="https://cdn.rawgit.com/EE/angular-ui-tree-filter/master/dist/angular-ui-tree-filter.js"><\/script>'); | |
89 | 93 | } |
90 | 94 | </script> |
91 | 95 | </head> |
98 | 102 | var OSProfilerData = $DATA; |
99 | 103 | |
100 | 104 | angular |
101 | .module('app', ['ui.bootstrap', 'hljs']) | |
105 | .module('app', ['ui.bootstrap', 'hljs', 'ui.tree', 'ui.tree-filter']) | |
102 | 106 | .config(['$rootScopeProvider', function ($rootScopeProvider) { |
103 | 107 | $rootScopeProvider.digestTtl(50); |
104 | 108 | }]) |
108 | 112 | tabReplace: ' ' |
109 | 113 | }); |
110 | 114 | }]) |
115 | .config(['uiTreeFilterSettingsProvider', function (uiTreeFilterSettingsProvider) { | |
116 | uiTreeFilterSettingsProvider.addresses = [ | |
117 | 'info.name', | |
118 | 'info.project', | |
119 | 'info.service', | |
120 | 'info.host' | |
121 | ]; | |
122 | uiTreeFilterSettingsProvider.descendantCollection = 'children'; | |
123 | }]) | |
111 | 124 | .controller('ProfilerController', ProfilerController) |
112 | 125 | .controller('ModalInstanceController', ModalInstanceController); |
113 | 126 | |
114 | 127 | // Inject services |
115 | ProfilerController.$inject = ['$uibModal']; | |
128 | ProfilerController.$inject = ['$filter', '$uibModal']; | |
116 | 129 | ModalInstanceController.$inject = ['$uibModalInstance', 'info']; |
117 | 130 | |
118 | function ProfilerController($uibModal) { | |
131 | function ProfilerController($filter, $uibModal) { | |
119 | 132 | // NOTE(tovin07): Bind this to vm. This is controller as and vm syntax. |
120 | 133 | // This style is mainstream now. It replaces $scope style. |
121 | 134 | // Ref: https://johnpapa.net/angularjss-controller-as-and-the-vm-variable/ |
122 | 135 | var vm = this; |
136 | ||
137 | vm.filter = $filter('uiTreeFilter'); | |
123 | 138 | |
124 | 139 | var converInput = function(input, level) { |
125 | 140 | level = (level) ? level : 0; |
248 | 263 | </td> |
249 | 264 | </tr> |
250 | 265 | </table> |
251 | <div ng-hide="hide_children"> | |
252 | <div ng-repeat="data in data.children" ng-include="'tree_item_renderer.html'"></div> | |
266 | <div ui-tree-nodes ng-model="data.children" ng-hide="hide_children"> | |
267 | <div ui-tree-node ng-repeat="data in data.children" ng-include="'tree_item_renderer.html'" ng-hide="!vm.filter(data, vm.filterPattern)"></div> | |
253 | 268 | </div> |
254 | 269 | </div> |
255 | 270 | </script> |
284 | 299 | </script> |
285 | 300 | <!--Body--> |
286 | 301 | <div ng-controller="ProfilerController as vm"> |
302 | <form class="form-horizontal"> | |
303 | <div class="form-group"> | |
304 | <label for="filterPattern" class="col-md-4 control-label">Span filtering:</label> | |
305 | <div class="col-md-6"> | |
306 | <input type="text" class="form-control" id="filterPattern" | |
307 | placeholder="Input your regular expression pattern here" | |
308 | ng-model="vm.filterPattern"> | |
309 | </div> | |
310 | </div> | |
311 | </form> | |
287 | 312 | <table class="trace"> |
288 | 313 | <tr class="bold text-left" style="border-bottom: solid 1px gray;"> |
289 | 314 | <td class="level">Levels</td> |
295 | 320 | <td class="details">Details</td> |
296 | 321 | </tr> |
297 | 322 | </table> |
298 | <div ng-repeat="data in vm.tree" ng-include="'tree_item_renderer.html'"></div> | |
323 | <div ui-tree> | |
324 | <div ui-tree-nodes ng-model="vm.tree"> | |
325 | <div ui-tree-node ng-repeat="data in vm.tree" ng-include="'tree_item_renderer.html'" ng-hide="!vm.filter(data, vm.filterPattern)"></div> | |
326 | </div> | |
327 | </div> | |
299 | 328 | </div> |
300 | 329 | </body> |
301 | 330 |