aboutsummaryrefslogtreecommitdiff
path: root/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/stream.js
diff options
context:
space:
mode:
Diffstat (limited to 'solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/stream.js')
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/stream.js239
1 files changed, 239 insertions, 0 deletions
diff --git a/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/stream.js b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/stream.js
new file mode 100644
index 000000000..92440c360
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/js/angular/controllers/stream.js
@@ -0,0 +1,239 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+solrAdminApp.controller('StreamController',
+ function($scope, $routeParams, $location, Query, Constants) {
+
+ $scope.resetMenu("stream", Constants.IS_COLLECTION_PAGE);
+
+ $scope.stream = {
+ wt: 'json',
+ expr: $scope.expr,
+ indent: 'on'
+ };
+ $scope.qt = "stream";
+ $scope.doExplanation = false
+
+ $scope.doStream = function() {
+
+ var params = {};
+ params.core = $routeParams.core;
+ params.handler = $scope.qt;
+ params.expr = [$scope.expr]
+ if($scope.doExplanation){
+ params.explain = [$scope.doExplanation]
+ }
+
+ $scope.lang = "json";
+ $scope.response = null;
+ $scope.url = "";
+
+ var url = Query.url(params);
+
+ Query.query(params, function(data) {
+
+ var jsonData = JSON.parse(data.toJSON().data);
+ if (undefined != jsonData["explanation"]) {
+ $scope.showExplanation = true;
+
+ streamGraphSubController($scope, jsonData["explanation"])
+ delete jsonData["explanation"]
+ } else {
+ $scope.showExplanation = false;
+ }
+
+ data.data = JSON.stringify(jsonData,null,2);
+
+ $scope.lang = "json";
+ $scope.response = data;
+ $scope.url = url;
+ $scope.hostPortContext = $location.absUrl().substr(0,$location.absUrl().indexOf("#")); // For display only
+
+ });
+ };
+
+ if ($location.search().expr) {
+ $scope.expr = $location.search()["expr"];
+ $scope.doStream();
+ }
+
+ }
+);
+
+var streamGraphSubController = function($scope, explanation) {
+ $scope.showGraph = true;
+ $scope.pos = 0;
+ $scope.rows = 8;
+
+ $scope.resetGraph = function() {
+ $scope.pos = 0;
+ $scope.initGraph();
+ }
+
+ $scope.initGraph = function(explanation) {
+
+ data = explanation
+
+ var leafCount = 0;
+ var maxDepth = 0;
+ var rootNode = {};
+
+ leafCount = 0;
+
+ let recurse = function(dataNode, depth) {
+
+ if (depth > maxDepth) {
+ maxDepth = depth;
+ }
+
+ let graphNode = {
+ name: dataNode.expressionNodeId,
+ implementingClass: 'unknown',
+ data: {}
+ };
+
+ ["expressionNodeId", "expressionType", "functionName", "implementingClass", "expression", "note", "helpers"].forEach(function(key) {
+ graphNode.data[key] = dataNode[key];
+ });
+
+ if (dataNode.children && dataNode.children.length > 0) {
+ graphNode.children = [];
+ dataNode.children.forEach(function(n) {
+ graphNode.children.push(recurse(n, depth + 1));
+ });
+ } else {
+ ++leafCount;
+ }
+
+ return graphNode;
+ }
+
+ $scope.showPaging = false;
+ $scope.isRadial = false;
+ $scope.explanationData = recurse(data, 1);
+
+ $scope.depth = maxDepth + 1;
+ $scope.leafCount = leafCount;
+ };
+
+ $scope.initGraph(explanation);
+};
+
+solrAdminApp.directive('explanationGraph', function(Constants) {
+ return {
+ restrict: 'EA',
+ scope: {
+ data: "=",
+ leafCount: "=",
+ depth: "="
+ },
+ link: function(scope, element, attrs) {
+
+ var helper_path_class = function(p) {
+ var classes = ['link'];
+
+ return classes.join(' ');
+ };
+
+ var helper_node_class = function(d) {
+ var classes = ['node'];
+
+ if (d.data && d.data.expressionType) {
+ classes.push(d.data.expressionType);
+ }
+
+ return classes.join(' ');
+ };
+
+ var helper_node_text = function(d) {
+ if (d.data && d.data.functionName) {
+ return d.data.functionName;
+ }
+
+ return d.name
+ };
+
+ var helper_tooltip = function(d) {
+
+ return [
+ "Function: " + d.data.functionName,
+ "Type: " + d.data.expressionType,
+ "Class: " + d.data.implementingClass.replace("org.apache.solr.client.solrj.io", "o.a.s.c.s.i"),
+ "=============",
+ d.data.expression
+ ].join("\n");
+ }
+
+ scope.$watch("data", function(newValue, oldValue) {
+ if (newValue) {
+ flatGraph(element, scope.data, scope.depth, scope.leafCount);
+ }
+ });
+
+ var flatGraph = function(element, graphData, depth, leafCount) {
+ var w = 100 + (depth * 100),
+ h = leafCount * 40;
+
+ var tree = d3.layout.tree().size([h, w]);
+
+ var diagonal = d3.svg.diagonal().projection(function(d) {
+ return [d.y * .7, d.x];
+ });
+
+ d3.select('#canvas', element).html('');
+ var vis = d3.select('#canvas', element).append('svg')
+ .attr('width', w)
+ .attr('height', h)
+ .append('g')
+ .attr('transform', 'translate(25, 0)');
+
+ var nodes = tree.nodes(graphData);
+
+ var link = vis.selectAll('path.link')
+ .data(tree.links(nodes))
+ .enter().append('path')
+ .attr('class', helper_path_class)
+ .attr('d', diagonal);
+
+ var node = vis.selectAll('g.node')
+ .data(nodes)
+ .enter().append('g')
+ .attr('class', helper_node_class)
+ .attr('transform', function(d) {
+ return 'translate(' + d.y * .7 + ',' + d.x + ')';
+ })
+
+ node.append('circle')
+ .attr('r', 4.5);
+
+ node.append('title')
+ .text(helper_tooltip);
+
+ node.append('text')
+ .attr('dx', function(d) {
+ return 8;
+ })
+ .attr('dy', function(d) {
+ return 5;
+ })
+ .attr('text-anchor', function(d) {
+ return 'start';
+ })
+ .text(helper_node_text)
+ };
+ }
+ };
+})