I am one of those people who tend to stay as much as they can in their terminal, writing code, running scripts. I feel like I can do everything I want there.
Do I need to correlate information to build a table? Many of the tools I use provide an -o json
or equivalent argument to pipe content out as JSON, so I can rely on complex and impossible to maintain jq
tricks followed by some awk
and popd
stunts.
I doubt I will find something more flexible than that when it comes to operation and development, but I can’t find myself comfortable with those tools when it comes to slice and dice in between application data, troubleshoot what a user is doing and so on. I think I can’t because there are just too much information that I want to correlate and because the tools I need access to do not always have a CLI that is polished enough as the one we have access to when it comes to operations, probably because we are not the target for them.
Likewise, I would like to get some records from the database, look at what our event stream has to say about such resources. Maybe get some object from an object store and so on. Potentially everything that can be programmatically accessed with my access level. Since I am a founder engineer it probably enough to screw something out at some point but hey, responsibility is tough.
I tried to develop TUI applications for that but nop, too complicated, and I don’t think to use them. The only one I like so far is k9s.
At the end of the story the solution that I like the most is to spin up a web server and serve HTTP out of it.
I called this project Self Serving UI. Because the primary goal is not even to get this shared with my teammate at this stage because they also have their own way. My colleague has a TUI, and he is happy with that, for me not what I am looking for.
Yes, we also have a “public” administrative API where some of those features could live, some of those are coming out from the Self Serving UI and the UI itself calls the admin API when it needs to correlate with that. The reality that there are a lot of hops when it comes to delivering a new feature. You have to design the HTTP API, the database structure, write a migration, figure out to observe such feature, write tests, error handling… Sometimes I need a place where all of those things are not enforced.
I develop this project in public. It is in a branch of our monorepo, but I don’t think I will ever get it merged. When I need to do some complex or repetitive or fun to programmatically describe procedure I know where to go. I check out that branch and I code it out.
A side effect for me is that I use such project to showcase to non-technical people what I think our product can do, and it is not yet doing. I already have all the boilerplate ready to go, I just need to add a page to the top menu and make it happen.