From 55d276f41b76d6833c8539262e252821e86d8977 Mon Sep 17 00:00:00 2001 From: "Elf M. Sternberg" Date: Sun, 6 Sep 2015 19:59:31 -0700 Subject: [PATCH] [feat] Working example of SimpleXML and SplunkJS interaction. --- .gitignore | 4 + README.md | 22 +++ appserver/static/title.js | 41 +++++ bin/README | 1 + default/app.conf | 16 ++ default/data/ui/nav/default.xml | 8 + default/data/ui/panels/cputime.xml | 10 ++ default/data/ui/views/README | 1 + default/data/ui/views/index.xml | 7 + local/app.conf | 4 + metadata/default.meta | 35 ++++ metadata/local.meta | 7 + simplesplunkjs.nw | 275 +++++++++++++++++++++++++++++ simplesplunkjs.pdf | Bin 0 -> 41282 bytes 14 files changed, 431 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 appserver/static/title.js create mode 100644 bin/README create mode 100644 default/app.conf create mode 100644 default/data/ui/nav/default.xml create mode 100644 default/data/ui/panels/cputime.xml create mode 100644 default/data/ui/views/README create mode 100644 default/data/ui/views/index.xml create mode 100644 local/app.conf create mode 100644 metadata/default.meta create mode 100644 metadata/local.meta create mode 100644 simplesplunkjs.nw create mode 100644 simplesplunkjs.pdf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f55f75d --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*# +.#* +*~ +*.orig diff --git a/README.md b/README.md new file mode 100644 index 0000000..b9c9fd1 --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +### This Code Is... + +This repo is the sample code from the tutorial [Referencing SimpleXML +Searches From SplunkJS In Remote +Panels](http://elfsternberg.com/2015/09/06/splunk-splunkjs-simplexml1). +You can either read that tutorial or find the notes in this directory +in PDF form. + +### Setup + +Move or unzip this directory, in its entirely, to your Splunk +instance's apps directory. Restart Splunk. It should just work. + +### Requirements + +This was tested with Splunk 6.2. It's not likely to work with earlier +versions that don't support <panel ref="panelname"> syntax. + +### Documentation + +If you got this, you must have followed one of the tutorial links. +If you didn't, this is the sample code for the \ No newline at end of file diff --git a/appserver/static/title.js b/appserver/static/title.js new file mode 100644 index 0000000..4504048 --- /dev/null +++ b/appserver/static/title.js @@ -0,0 +1,41 @@ +require([ + "splunkjs/ready!", + "splunkjs/mvc/searchmanager", + "underscore", + "jquery" +], function(mvc, searchManager, _, $) { + var registry = mvc.Components; + + var updateTitle = function(manager, data) { + if ( !data || !data.results || !data.results.length) { + return; + } + + var topprocess = data.results[0]; + + $("[data-panel-ref=cputime] .panel-head h3") + .text("Longest Running Process: " + topprocess["Process"] + + " (" + topprocess["CPU Time"] + ")"); + }; + + var setUpSearchListener = function(searchname) { + var searchmanager = registry.getInstance(searchname); + var resultmanager = searchmanager.data("preview", { + output_mode: "json", + count: 1, + offset: 0 + }); + resultmanager.on("data", updateTitle); + }; + + var findPanel = function() { + var panel = _.filter(registry.getInstanceNames(), + function(name) { return name.match(/panel\d+_cputimesearch/); }); + if (panel.length === 1) { + registry.off('change', findPanel); + setUpSearchListener(panel[0]); + } + }; + + var handle = registry.on('change', findPanel); +}); diff --git a/bin/README b/bin/README new file mode 100644 index 0000000..9a70db0 --- /dev/null +++ b/bin/README @@ -0,0 +1 @@ +This is where you put any scripts you want to add to this app. diff --git a/default/app.conf b/default/app.conf new file mode 100644 index 0000000..81f5117 --- /dev/null +++ b/default/app.conf @@ -0,0 +1,16 @@ +# +# Splunk app configuration file +# + +[install] +is_configured = 0 + +[ui] +is_visible = 1 +label = Search Handle + +[launcher] +author = Elf M. Sternberg +description = Search Handle demonstrates how to find a search defined in SimpleXML and manipulate it via SplunkJS. There are a lot of demonstrations showing how to build a search in SplunkJS and reference it in SimpleXML, but not the other way aronud. +version = 1.0 + diff --git a/default/data/ui/nav/default.xml b/default/data/ui/nav/default.xml new file mode 100644 index 0000000..d3e3221 --- /dev/null +++ b/default/data/ui/nav/default.xml @@ -0,0 +1,8 @@ + diff --git a/default/data/ui/panels/cputime.xml b/default/data/ui/panels/cputime.xml new file mode 100644 index 0000000..e9b997b --- /dev/null +++ b/default/data/ui/panels/cputime.xml @@ -0,0 +1,10 @@ + + + Long-running processes + + index=os source=ps | stats latest(cpu_time) by process | sort -latest(cpu_time) | rename latest(cpu_time) as "CPU Time", process as "Process" + -1h@h + now + +
+
diff --git a/default/data/ui/views/README b/default/data/ui/views/README new file mode 100644 index 0000000..6cf74f0 --- /dev/null +++ b/default/data/ui/views/README @@ -0,0 +1 @@ +Add all the views that your app needs in this directory diff --git a/default/data/ui/views/index.xml b/default/data/ui/views/index.xml new file mode 100644 index 0000000..ba273a0 --- /dev/null +++ b/default/data/ui/views/index.xml @@ -0,0 +1,7 @@ + + + A simple demonstration of a splunk visualization in which the search is created using SimpleXML, but made accessible to SplunkJS + + + + diff --git a/local/app.conf b/local/app.conf new file mode 100644 index 0000000..d49ee2b --- /dev/null +++ b/local/app.conf @@ -0,0 +1,4 @@ +[ui] + +[launcher] +version = 0.1 diff --git a/metadata/default.meta b/metadata/default.meta new file mode 100644 index 0000000..b77b8cb --- /dev/null +++ b/metadata/default.meta @@ -0,0 +1,35 @@ + +# Application-level permissions + +[] +access = read : [ * ], write : [ admin, power ] + +### EVENT TYPES + +[eventtypes] +export = system + + +### PROPS + +[props] +export = system + + +### TRANSFORMS + +[transforms] +export = system + + +### LOOKUPS + +[lookups] +export = system + + +### VIEWSTATES: even normal users should be able to create shared viewstates + +[viewstates] +access = read : [ * ], write : [ * ] +export = system diff --git a/metadata/local.meta b/metadata/local.meta new file mode 100644 index 0000000..d2d6123 --- /dev/null +++ b/metadata/local.meta @@ -0,0 +1,7 @@ +[app/ui] +version = 6.2.5 +modtime = 1441563691.674067000 + +[app/launcher] +version = 6.2.5 +modtime = 1441563691.676824000 diff --git a/simplesplunkjs.nw b/simplesplunkjs.nw new file mode 100644 index 0000000..800a8d0 --- /dev/null +++ b/simplesplunkjs.nw @@ -0,0 +1,275 @@ +% -*- Mode: noweb; noweb-code-mode: javascript-mode ; noweb-doc-mode: latex-mode -*- +\documentclass{article} +\usepackage{noweb} +\usepackage{hyperref} +\begin{document} + +% Generate code and documentation with: +% +% noweave -filter l2h -delay -x -html simplesplunkjs.nw | htmltoc > simplesplunkjs.html +% notangle -Rtitle.js simplesplunkjs.nw > title.js +% notangle -Rindex.xml simplesplunkjs.nw > index.xml +% notangle -Rcputime.xml simplesplunkjs.nw > cputime.xml + +\section{Introduction} + +Splunk's SimpleXML is an XML file format to describe a custom dashboard +with searches, inputs and panels. There are a number of +\nwanchorto{href="http://dev.splunk.com/getstarted}{fantastic resources} +for building them, but I recently encountered an interesting problem. +That link also discusses SplunkJS, a Javascript library that allows +users to customize searches and visualizations far beyond what SimpleXML +allows. + +SplunkJS is usually used with raw HTML and CSS, but can be pulled into a +SimpleXML file by uing the [[script]] attribute in the SimpleXML opening +[[]] or [[
]] tag. It's easy to make a SplunkJS search +and attach it to a SimpleXML visualization; it's not so easy to make a +SimpleXML search and attach it to a SplunkJS visualization. This +document shows you how, and shows you how to fix a peculiarity that +arises from creating a well-organized ecosystem of panels and +dashboards. + +In later versions of Splunk, SimpleXML has a new attribute for +[[]], [[ref]], which allows you to define a panel in a single +file and drop it into a number of different dashboards without having to +cut-and-paste the panel code. In the process, SimpleXML mangles the +names of searches and visualizations, and so finding and manipulating +those searches has become difficult. + +This example uses the Splunk Unix TA (Technology Add-on), so you should +download and install that. What data you use isn't really important. +For our example, though, we're going to do is create a single dashboard +with a single independent panel that shows the list of processes running +on a host, find that panel, find it's search, find it's title, and +modify the title with the name of the longest-running process. + +After installing Splunk (here's the +\nwanchorto{http://www.splunk.com/en_us/download/splunk-enterprise.html}{free + version of the Enterprise Edition}, limited to a half-GB of data per +day) and getting it up and running, click on the App icon (the gear +symbol) on the left sidebar. On the Applications list, click on "Create +a New App", and provide it with a name, a directory slug, and a version +number. + +Now it's time to fire up your editor. We need to create three things. +A dashboard, a panel, and a javascript file to perform the magic. + +\subsection{Literate Program} + +A note: this article was written with the +\nwanchorto{http://en.wikipedia.org/wiki/Literate_programming}{Literate + Programming} toolkit +\nwanchorto{http://www.cs.tufts.edu/~nr/noweb/}{Noweb}. Where you see +something that looks like [[<>]], it's a placeholder for code +described elsewhere in the document. Placeholders with an equal sign +at the end of them indicate the place where that code is defined. The +link (U->) indicates that the code you're seeing is used later in the +document, and (<-U) indicates it was used earlier but is being defined +here. + +\section{The Dashboard Files} + +The Dashboard file is simple. We just want to pull in a panel. This +goes into [[APP\_HOME/default/data/ui/views/index.xml]]. Here, +APP\_HOME is the path to the directory slug where your app is stored. I +install Splunk in [[/opt]] and I named my example "searchhandle," +thus the path is +[[/opt/splunk/etc/apps/searchhandle/default/data/ui/views/]]. + +<>= + + + A simple demonstration integrating SimpleXML and SplunkJS + + + + +@ + +The panel file is also simple. It's going to define a search and a +table. It goes in +[[APP\_HOME/default/data/ui/panels/cputime.xml]]. Note that the +filename must match the [[ref]] attribute. I've limited the +search to the last hour, just to keep from beating my poor little laptop +to death. +<>= + + + Long-running processes + + index=os source=ps | stats latest(cpu_time) by process | sort -latest(cpu_time) + -1h@h + now + +
+
+@ + +The [[]] tag in our dashboard file has a +[[script]] attribute. This is where we'll put our logic for +manipulating the title of our panel. It's annoying that we have to put +our script reference in the dashboard and not the panel. It's possible +to have a file named "dashboard.js" which will be loaded for \textit{every} XML +file in your app, and then have it selectively act on panels when they +appear. + +\section{The Javascript} + +Javascript files go in the [[APP\_HOME/appserver/static/]] +directory. I've named ours [[title.js]]. + +Splunk uses the [[require]] facility to import files. In the +prelude to any SplunkJS interface, you must start with the +[[ready!]] import, which doesn't allow the contents of this file +to run until the Splunk MVC (Model View Controller) base library is +loaded. We're also loading the [[searchmanager]] and two utility +libraries: \nwanchorto{http://underscorejs.org/}{underscore} and +\nwanchorto{https://jquery.com/}{jquery}, both of which come with the +SplunkJS UI. + +The one thing we're most concerned with is the [[registry]], +which is a central repository where all components of the current Splunk +job's client-side operations are indexed and managed. + +The file's outline looks like this: + +<>= +require([ + "splunkjs/ready!", + "splunkjs/mvc/searchmanager", + "underscore", + "jquery" +], function(mvc, searchManager, _, $) { + + var registry = mvc.Components; + + <> + + <> + + <> + + <> +}); +@ + +In the outline, we took one of the items passed in, +[[mvc.Components]], and gave it a name, the \textit{registry}. Waiting +for the search to be available is as simple as listening to the +registry: + +<>= + +var handle = registry.on('change', findPanel); +@ + +Finding the search and attaching a listener to it is actually one of the +two hardest parts of this code. First, because we have to \textit{find} it, +and the new panels layout makes that difficult, and secondly, because +the change event mentioned above can happen multiple times, but we want +to make sure we only set up our listener only once. + +Below, the function [[findPanel]] lists through all the Splunk +managed objects on the page, and finds our search. It does this by +looking for a registry name that matches the ID of our search. The +panel layout mangles the name, attaching the prefix ``panelXX\_'' where +XX is some arbitrary index number. (In practice, the index number is +probably deterministic, but that's not useful or important if you're +going to be using this panel on multiple dashboards.) Underscore's +[[filter]] is perfect for finding out if our search is +available. If it is, we disable the registry listener and proceed to +the next step, sending it the search name. + +<>= + +var findPanel = function() { + var panel = _.filter(registry.getInstanceNames(), + function(name) { return name.match(/panel\d+_cputimesearch/); }); + if (panel.length === 1) { + registry.off('change', findPanel); + setUpSearchListener(panel[0]); + } +}; +@ + +This is the most straightforward part of the code. Having found the +search name, we then get the search manager, get its results manager, +and then set up a listener to it that will update the title with the +data. + +Splunk searches manage the \textit{task} of searching, but not the actual +data. That happens in a Result, which updates regularly with the +growing cache of data from the server to the browser. + +This code skips a ton of details, mostly about listening to the search +for failure messages. That's okay. This is just an example, and it +works 99\% of the time anyway. Since we're going to change the title to +include the longest-running process, and our search is pre-sorted, we +just need a count of one. This Result uses the same dataset as the +actual visualization and puts no additional strain on the Splunk server +or bandwidth between the server and the browser. + +<>= + +var setUpSearchListener = function(searchname) { + var searchmanager = registry.getInstance(searchname); + var resultmanager = searchmanager.data("preview", { + output_mode: "json", + count: 1, + offset: 0 + }); + resultmanager.on("data", updateTitle); +}; +@ + +The last thing we do is update the title. (Remember, that's our goal). +The panel's title is found in the [[.panel-head h3]] child +DOM object. Finding the panel is trickier, but Splunk gives us an +attribute with the name of the panel's filename, so jQuery can find it +for us. There's a guard condition to ensure that we actually have some +data to work with. + +The names of the fields correspond to the final names in the search. +I've always found Splunk's naming conventions to be a little fragile, +but it works most of the time. + +<>= + + var updateTitle = function(manager, data) { + if ( !data || !data.results || !data.results.length) { + return; + } + + var topprocess = data.results[0]; + $("[data-panel-ref=cputime] .panel-head h3") + .text("Longest Running Process: " + topprocess["Process"] + + " (" + topprocess["CPU Time"] + ")"); + }; +@ + +\section{Navigation} + +One last detail: You want to be able to get to this page. + +To do that, open the file at: +[[APP\_HOME/default/data/ui/nav/default.xml]] and change the line for +search to look like this: + +<>= + + +@ + +Now restart Splunk + +And that's it. Put it all together, and you've got yourself a working +application in which SplunkJS can tap into SimpleXML searches and +exploit their data, even if that search is defined in an independent +panel. + +This code is available at my github at +\nwanchorto{https://github.com/elfsternberg/Splunk-SimpleXML-SplunkJS}{Splunk + with SimpleXML and Javascript}. + +\end{document} diff --git a/simplesplunkjs.pdf b/simplesplunkjs.pdf new file mode 100644 index 0000000000000000000000000000000000000000..522c24f6e98a4e90a311e71a3e1dd0a2d6fb15f7 GIT binary patch literal 41282 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