Sorry for the long post, I didn't have time to write a short one. For the last 15+ years now, I've been using SolarWinds products in my daily work life. Over the years, I have poked and prodded, broken and fixed (and broken again), and been able to figure out (even on the most simplistic of levels) how little pieces of the products work. While not always the best, or easiest, way(s) to do something, I have found some methods to get the job(s) done. I've been meaning to write something like this for a long while now, but things keep popping up and new excuses keep being invented. So, while I have a few minutes to breathe, I figured I'd just start jotting down some stuff and see where it goes before I get pulled into the next fire.
Have you ever wondered how widget XYZ works, or what magic is being done in that SWQL query to get data from the SQL DB? Have you ever wanted to change something in any of the SolarWinds products, just a teeny tiny hair, maybe to get 15 results instead of 10, but the widget/feature just wouldn't do that? Or, are you just someone who likes to look and tinker around with something to learn more about it? Yes. Yes. And Yes, at least for me. Which brings me to the purpose of this post. It's not rocket surgery, it's nothing fancy, super advanced, or too dangerous here, I just wanted to share some of the methods and tools I have used to learn more about the products.
Before I go any further, I am bound by the digital tinkerer's law to remind you, please backup anything and everything, whether you are tinkering or not. Best way to tinker with SolarWinds products is to just go and download a demo (I presume those still exist), install it, and tinker away.
This is not for those of you who already know what you're doing, or where to go. This is not intended to explain how to write SWQL queries, or teach anything about how to code (as I am a professional dumb-dumb, and would need to know something before I could teach it...). This is only me, sharing a couple of ways I've somehow figured out a couple of things over the years.
Here's an easy example to start with...
"Hey, Will, can you make it to where, when we click on the web browse link, it automatically opens into a new tab?"

This can be done a few ways by holding down a key on the keyboard and clicking with the mouse, or clicking the link with the middle mouse button. BUT, that's not fun at all. So, how would you (like me, an untrained person of curiosity) go about finding how this could be done?
First, I would start with where that link/feature lived, which is on the "Node Details" widget. So, how do we find out anything about that widget? Well, we found the resource ID, which should provide us enough information to track down the actual file(s) used to build that widget. In this example, the resource ID is "17".

Okay, I caught the resource ID... What am I supposed to do with a resource ID now? You can use the resource ID to find the name and location of the file which makes the resource.
Now, for me, since this is something I tend to poke around in a bunch, I have put together a simple little view with a couple of SWQL queries to help me find things faster when I have questions or ideas. (I've posted most of this stuff previously, and will link to them once I re-find the posts)
I simply enter the resource ID into the search box, hit enter, and then I know where to go, and which file to peek into.

Now that we have the name and location of the file, we can head there and see what we can see. Once we are in the correct folder, we can see 2 "NodeDetails" files, an "ascx" file and a "cs" file.
*If you do not see any of these files, you may need to rerun the config wizard after you set the "PrecompiledWebsiteDisabled" setting to "true" in the "E:\Program Files (x86)\SolarWinds\Orion\ConfigurationWizard.exe.config
" file. (Further details can also be found in a previous post of mine, Disable Precompiled Web Pages; Making Custom Mods Great Again!)*
You should be able to open these files into notepad, notepad++, or any other type of editor you'd like.

These files should give you some good insight into how the widget(s) work, as these files contain the bulk of definitions, rules, and resources, telling the widget what to do and how to do it, for the most part. Again, this is all coming from an untrained crazy person, so don't build your city with my words as the foundation. (I'm basically doing my best to not say "this thing", "that there", "whatchamacallit", etc..., as I honestly don't know all of the technical terms... You know, for all the things and whatchamacallits...)

After looking through the 2 files, I remembered what I was looking for in the first place, the web browse stuff... With that in mind, and my profuse refusal to use search to speed things up (never know what good info you'll blast past if you always just start with the search...), I finally found something that looked familiar. The initial request was to see if we could make the link automatically open in a new tab when clicked (completely ignoring any other methods to do so, obviously). Well, in order to make a link open in a new tab when clicked, you need to add target="_blank"
to the rest of the href code... or something like that, right? Okay, so I added it where it needed to be, clicked save, and now I can go back and test it out.

Back to the node details widget, I click the web browse link and there it is, now opening up in a new tab.

Even though I was able to accomplish the requested modification, my brain is still itching from all that new stuff I was reading in those files, and I'm going to pretend I don't already know that I don't know what any of it is... It doesn't matter, because I'm feeling like I've just discovered a long lost civilization, and I'm 100% certain I could be the first person in history to decipher this code... lol, yeah, sometime these rabbit holes make me feel like I'm 10 years old again, way too much new information to learn, and not enough time to learn it all. Anyway, back to our adventures...
Before I closed out that file, and for no specific reason other than because, I am now curious about that SolarWinds.Orion.Web
stuff I see... What is it? What does it do? Where is it? Why is it? Meow?

After months and years of manually going through every file I could ever find on the SolarWinds server, definitely not ever using the search, I think I finally found something. Well, I found something that looks similar, at least has a couple of the same words in there, but it's something...

Uh, but this file looks super weird when it's opened in notepad.

A simple, and free, tool for checking out the insides of those .dll files is dotPeek (I'm not going to link it, so turn your Google-Foo up to 11 and see where it takes you).
After installing a program to view the .dll files, we can open up that file and see what we can see. Looks like we got lucky there, as what we were initially looking for did not exactly match the file, though it does seem to contain an exact match... So yay!

I didn't immediately find anything useful, but I kept snooping around and eventually found my first SQL query. So, whatever it is I'm looking at is going to run that SQL query in order to build out whatever data it needs. Okay, the file is named OrionWeb.dll, opening the file shows us SolarWinds.Orion.Web, and opening that shows us a bunch of stuff. More specifically, that shows us something called Alert, which contains a SQL query. I think it means that SQL query is used for something related to Alerts, which is somehow tied to web stuff? and Orion? You can copy and paste that query into a notepad and run it through a cleaner to get it all prettied up, then you can run it in a report/widget to see what kind of data it pulls back.
For a bonus tool, and one I learned about later than I'd have liked... Don't forget your QueryStats when you use the OrionSDK to run your SWQL queries.
Adding the WITH QUERYSTATS to your SWQL query will create a little tab at the bottom of the OrionSDK.

When you click that Query Stats tab, it will populate the "behind the scenes" data on which the SWQL query is built. So, if the SWQL query uses a SQL query to return the data, you should be able to see the SQL query.

Now you should be able to see how the SWQL query is actually getting the results (I think this is how it works), using the underlying SQL query directly to the DB. (Dang, that SWQL sure does look a lot nicer than that dirty SQL!!)

So, if we add our apples and oranges, then we should definitely have an accurate count of our bananas... No, no, no... that's not it... Well, I reckon that is for brains smarter than mine to figure out, which is probably just about everyone out there. Like I said, it's a start, and a fun way to poke around to learn how the pieces work. It's not rocket surgery, and you shouldn't be too afraid to poke around, especially if you're on a demo build. While there are a few more tools in my toolbox, these are usually the 2 I use most. If you have the time, and like poking around, you can learn a ton about how all these pieces work together if you just start looking.
I hope all is well with your SolarWinds environment, and happy learning!
-Will