Kindling - a collection of tools to help with Ignition

Happy new year, and all that! I wanted to debut for the community something I’ve been working on for a little while, and hopefully it’s useful to somebody out there.
The full story: Long ago I worked as a support rep at IA. While there, I made some tools for internal use; Vision windows attached to an internal gateway that knew how to parse our log IDB files and thread dump files and display them in a more useful way. Recently, I had some downtime, and wanted to take on a new project, so I recreated those tools as a standalone project. Thanks to some modern Java features, I’m able to package those tools into a standalone “native” executable, which should make them a lot more accessible than requiring an Ignition gateway.

So, here’s Kindling, a collection of tools to help with Ignition (get it?):
A thread dump viewer:
threads

A log file viewer:
logs

And a S+F cache dump viewer:
cache

And not to bury the lede, but it also comes with dark mode :slight_smile:
java_pM5L4B

The best part: It’s entirely open-source, and I’d love community contributions. For now, I’ve only got “native” builds working for Windows (see the ‘Releases’ tab) but the next item on my to-do list is setting up Github Actions to build Linux and MacOS packages (and automate the release process).

TL;DR:

43 Likes

I guess I should learn Kotlin. /:

2 Likes

If you squint hard enough, Kotlin kinda lands between Jython and Java - all the benefits of static typing but with less syntactic ceremony.

Plus, null-safety in the type system is fantastic.

2 Likes

This is fantastic thanks so much! I think being able to perform some operations on config.idb without the gateway running and without dealing with sqlite syntax would be really nice too. Examples that comes to mind include being able to delete all the tags from a gwbk, global find/replace operations, etc.

Yeah, a .GWBK “explorer” or something is on my list of ideas; just needs fleshing out:

5 Likes

v0.0.2:

2 Likes

v0.0.3:

Adds a generic IDB view:

Also accessible from GWBK view:

3 Likes

@PGriffith thank you for Kindling - its a great tool.

1 Do you know of any other similar tools worth having to troubleshoot/monitor problems in ignitions ?
2 Using Kindling i compared 2 gateways backups config files and would like to correct the difference in one of the files otherwise it will not launch designer or clients. Do you know if there is any way to do the change inside the gateway backup or is it write protected? I will not be able to correct the config file after deploying the backup because i dont have full server access.

Regards

Gateway backups are just zip files. Unzip, fix, rezip.

3 Likes

Yeah, at some point I may make it possible to ‘live update’ a .gwbk or IDB, but for now read-only lets me make a lot of assumptions that make things easier.

2 Likes

thank you for reply.
if unzipping is the easiest method than i guess changing live is not needed in my opinion.

I like what’s there and look forward to using it next time I need to pick apart logs. Something in the GUI library you used for the generic IDB viewer portion isn’t available on my system, though. :frowning:

WARNING: package com.sun.java.swing.plaf.windows not in java.desktop                 
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/sun/java/swing/plaf/windows/WindowsLookAndFeel

I’m running Mint (based off Ubuntu 20.04), and had to git clone your repo and do gradlew run locally, so this may just be my setup. I don’t do Java/Kotlin/gradle packaging or building and am kinda lost on where to look in the project to figure this out. Searching online finds other people complaining that OpenJDK on Ubuntu is missing this bit and they ended up building JARs manually to get around it. (here)

I feel like such a killjoy reporting a compatibility issue on a 1 month old project…

If it’s just an OpenJDK thing, you could try telling Gradle to use a different JDK vendor; in build.gradle.kts ~line 83, change this:
image

There’s a couple distributions you could try:
https://docs.gradle.org/current/javadoc/org/gradle/jvm/toolchain/JvmVendorSpec.html

Curious, does the .rpm in the releases tab not work for you? Release 0.0.3 - Added generic IDB view · paul-griffith/kindling · GitHub

Switching from ADOPTOPENJDK to AZUL hits the same error. (I know it was using Azul since it gave me a “No compatible toolchains found” error until I installed Azul.)

I may try another JDK later when I have some more time.

I didn’t try the RPM since I’ve had bad experience with alien converting RPM to DEB in the past and don’t have native RPM tools installed on my system. I can try that later, too.

v0.0.4 is out with dramatically improved usability (in my opinion) - to be honest, this is the first release I’d call actually useful :slight_smile: I need to update the gifs on the readme, but I’d definitely recommend giving this a try if you weren’t satisfied with things before.

6 Likes

I was gonna give it alook, downloaded the exe and installed it, but it is starting up very very slowly (like mulitple minutes) and when i try to choose a file the filebrowser isnt reacting at all :frowning: Forcing me use taskmanager to end it.

Edit: tried opening it again a couple of times and sometimes it seems to be going smooth, sometimes its getting bugged. Weird, maybe i have to many other stuff running.

windows 10 a rather slow laptop tho

v0.0.5 is out, which fixes the error @justin.brzozoski hit on non-Windows systems, and adds MacOS builds. No significant functionality changes, but I’m working on some things for the next version.

1 Like

If anyone wants to try out a ‘pre-release’, the latest build of main has wrapper log parsing built in, including the ability to stitch together multiple files to present as one unified log. I only have so many test cases on hand locally, so it’d be good to know how this works on ‘real’ data out there in the wild.

v0.1.1 (ignore the gaps in the middle :slight_smile: ) out now.
I’m now using JDeploy to streamline packaging and deployment. Bonuses: 1. auto-updates (opt-in) and 2. no need to run cross-OS builds via Github Actions.

The big new feature is wrapper.log parsing; one or more wrapper.log files can be selected and they’ll be rolled up and parsed as a single unit.

5 Likes

Awesome, I actually just wrote my own wrapper parser haha but this is great :slight_smile: