Release

What's New in Graphlytic 3.2

19.11.2020
What's New in Graphlytic 3.2

Graphlytic 3.2 brings the Query Templates, redesign of the Search & Manage Data page, Auto-refresh of data in the visualization, and improved documentation. We've also added a dedicated page in the documentation about all the integration options of Graphlytic. If you are interested in using Graphlytic as a part of a broader solution please visit the Integrations page.

Note: full release notes can be found here: Release Notes

Search & Manage Data page

We have added quite a lot of features to this page in the previous releases and the UI became a bit hard to follow for all the different features. With adding of the Query Templates (see chapter below for details) it became apparent that the main flow of the page has to be changed. That's why we have to get rid of the top toolbox panel. Buttons and menus from this panel were moved into the Query Result panel and are displayed only when they make sense for the task at hand. This brings a less cluttered UI with more functionality.

List of main changes:

  • The top toolbox panel was removed and the functionality was distributed among the specific tabs. 
  • The queries are tuned to ask only for the necessary data and only in necessary moments making the searching faster on large graphs.
  • Description field was added to every query type (Node Filter, Cypher, Template).
  • Property selection in the Query Builder was reworked to include a search feature.
  • Tables with node listings have reworked headers, now including the fulltext search, number of found results, paging buttons, and fulltext index configuration (for users with the Settings permission).
  • The information about a minimal number of characters is shown in the fulltext search input.
  • The window for adding queries from the Repository includes more information about the queries (title, description, and query type).

Example of the new Node Filter query builder and result panels:

Query Templates

Let's face it - not everybody likes writing Cypher queries. Not everybody knows how to write them but they are so helpful in everyday tasks involving graphs that everybody is using them, in one way or another. To bring the power of Cypher into the hands of all users we are introducing Query Templates - custom Cypher queries presented to the user in a human-readable form with dynamic parameters (with suggestions) that the user can use to change and use the query without any Cypher knowledge.

The implementation in this release is only the beginning of a whole new feature set that will be built on this foundation. What is included is the possibility to define a Query Template (yes, it's just another JSON configuration) and then any user in the system can add this Template from the Query Repository to their personal queries on the Search & Manage Data page.

As an example let's use the IT infrastructure demo on our website and this use case: IT support (non-cypher friendly people) needs to find certain Service nodes and their underlying infrastructure multiple times a day. This can be achieved with the already present features:

  • create a blank visualization,
  • use fulltext search to find all the Service nodes in question (the starting points),
  • expand all the Service nodes to a certain level (depth),
  • filter out all branches of the graph where the nodes are not direct infrastructure supporting the Services that we have started with.

With larger infrastructures, this can take some time and it can be prone to human error, especially with the filtering out part of the task. The obvious solution is to write a Cypher query which will do this job in just one step but then there is the question of reusing such a query. And that's where the Query Template comes in.

The query in question can look like this (for sure there are other options how to write it, please feel free to leave a comment below, if there is a much better way to do it.):

MATCH p=(a:Service)-[r*1..3]->(b) WHERE a.name IN ["Service 1", "Service 2"] WITH nodes(p) AS nodes, relationships(p) as rels UNWIND nodes AS node UNWIND rels AS rel RETURN node, rel

We can simply wrap this query and call it a Template but that will miss the biggest feature - dynamic parameters. In this example we know, that what is changing from task to task are the starting points (the list of Service nodes) and the depth to which we need to explore the infrastructure. So let's put two dynamic parameters "depth" and "nodes" into the query:

MATCH p=(a:Service)-[r*1..$depth]->(b) WHERE a.name IN $names WITH nodes(p) AS nodes, relationships(p) as rels UNWIND nodes AS node UNWIND rels AS rel RETURN node, rel

And now let's add some configuration and description to it. The configuration is mainly about the definition of the input field that will be used (free text, drop-down, ...) and about suggestions that can be loaded directly from the graph.

 

{
    "title":"Services and related nodes",
    "description":"Find all nodes in variable depth starting from chosen services",
    "template":{
        "textTemplate" : "Return all nodes related to services $names with max depth $depth",
        "cypherTemplate" : "MATCH p=(a:Service)-[r*1..$depth]->(b) WHERE a.name IN $names WITH nodes(p) AS nodes, relationships(p) as rels UNWIND nodes AS node UNWIND rels AS rel RETURN node, rel",
        "parameters" : [
            {
                "parameter" : "depth",
                "type" : "NUMBER",
                "config" : {
                    "values" : ["1", "2", "3", "4"],
                    "strict" : true,
                    "placeholder" : "select depth of the search"
                }
            },
            {
                "parameter" : "names",
                "type" : "NODE_PROPERTY_VALUES",
                "config" : {
                    "multiple" : true,
                    "property" : "name",
                    "labels" : ["Service"],
                    "placeholder" : "select services"
                }
            }
        ]
    }
}

 

This Query Template definition can be stored in the SEARCH_TABS global configuration, which will allow all users to add this Template on the Search & Manage Data page to their personal queries.

Then it's very easy to reuse the Template in any task involving a set of Service nodes and a depth of searched infrastructure dependencies. Just select the nodes and the depth, run the query and visualize the result.

This is how the Query Builder and Query Result panel looks like for this Template:

If you want to try this template log into our IT infrastructure demo and try it out. Please let us know how you like it or if you find something we can add to make the use of Query Templates even better.

 

Visualization

We've improved several existing features in the visualization like the Lasso selection, panning of the graph during node dragging, default configuration and design of the graph elements. One notable feature that I'd like to mention here is the Auto-refresh feature which can be used to periodically look for any changes in data for the visualized elements. This can be helpful in use cases where the data in the graph database is changed rapidly and the graph operator needs to turn the visualization into a live (or near-live) dashboard. For this purpose, we have added new VISUALIZATION configuration "autoRefresh".

"autoRefresh":{
    "enabled" : false,
    "interval" : 60,
    "onRefresh" : "console.log(changes.nodes.length);"
}

When the Auto-refresh is configured then an icon for turning it on and off is added to the toolbox in the visualization:

You can find the description of the configuration options in the documentation so here I'd like just to point out some basic things:

  • If there is not "autoRefresh" config in the VISUALIZATION global config then this feature is completely disabled.
  • It's possible to define a callback function (JS) that will be called every time the Auto-refresh will detect some changes in the visualized graph elements (custom JS code can be inserted via the Widgets functionality - give us a call if you want to know more).
  • Minimal interval between the refresh calls is 10 seconds.

 

Most of the features presented in this article can be found in our demos, please take a look and let us know what do you think in the comments below.

Blog subscription

We'll send you a notification email when a new blogpost is published. Emails may contain also commercial informations. Your email is safe with us, we will not spam you, and you will be able to unsubscribe anytime.

Thank you, your subscription has been received!
    Oops! Something went wrong while submitting the form.

    Popular posts

    Release

    What's New in Graphlytic 4.1

    13.04.2023
    Release

    Introducing Graphlytic LITE Server

    05.10.2021
    Release

    How to embed Graphlytic visualization into your app using iframe

    19.10.2021