DEV Community

Cover image for ‘hi’ shows it’s colors
J. Bobby Lopez
J. Bobby Lopez

Posted on

‘hi’ shows it’s colors

I previously introduced ‘hi’ – the Host Information tool to the world and described it’s base functionality. Later, I described how hi can be used to craft more complex notifications. In this article, I’ll describe some of the latest features implemented as part of the v0.4.5 pre-release.


Get ‘hi’ on GitHub: https://github.com/jbobbylopez/hi

Logging and State Management

One of the biggest features introduced is the use of the logging module to implement a logging facility to log every status change event detected by the ‘hi’ tool. State is captured as a JSON file, which is then compared against the current state of each check. If there is a difference, a log is written, and the last state is updated with the current state information.

State file example

➤ cat state.json 
{
    "Systems": "FAIL",
    "ExpressVPN": "SUCCESS",
    "KeepassXC": "FAIL",
    "sshd": "SUCCESS",
    "signal-desktop": "FAIL",
    "Dropbox": "SUCCESS",
    "Galaxy S20 (sshfs)": "FAIL",
    "vdc2022nas": "SUCCESS",
    "wdred-8tb-pro-01": "SUCCESS",
    "Apache NiFi": "FAIL",
    "Open WebUI": "SUCCESS",
    "Thunderbird": "SUCCESS",
    "qbittorrent": "SUCCESS",
    "minidlna": "FAIL",
    "Steam": "FAIL",
    "CUPS": "SUCCESS",
    "Data Backup": "SUCCESS",
    "dockerd": "SUCCESS",
    "vi": "SUCCESS",
    "Midnight Commander": "FAIL",
    "tmux": "SUCCESS"
}
Enter fullscreen mode Exit fullscreen mode

‘hi’ Logging Functionality

Log files are written in JSONL (JSON Lines) format, to make it easy to consume by other upstream log and API analytics and monitoring tools.

Tools such as Logstash, Graylog, Nagios, Zabbix, Splunk, Kibana, Datadog, and so on can easily ingest JSONL formatted logs, which makes it easy for these tools to parse and index the log data to generate simple or complex reports and notifications as required.

Log file example

➤ tail hi_log.json 
{"timestamp": "2024-07-20T21:26:15.546248Z", "level": "INFO", "message": "vi state changed from SUCCESS to FAIL", "check_name": "vi", "previous_state": "SUCCESS", "new_state": "FAIL"}
{"timestamp": "2024-07-20T21:27:38.308707Z", "level": "INFO", "message": "sshd state changed from SUCCESS to FAIL", "check_name": "sshd", "previous_state": "SUCCESS", "new_state": "FAIL"}
Enter fullscreen mode Exit fullscreen mode

Logs are only written when there is a status change for any of the checks being monitored.

Logging can be enabled in the config.ini file.

config/config.ini example

 [Paths]    
 checks_file = config/checks.yml    
 log_file = hi_log.json    

 [Report]    
 header_style = bold bright_magenta on black    
 hostname_style = magenta on black    
 ip_style = bold bright_green on black    

 [Tables]    
 number_of_columns = 3     
 default_style = green on black    
 header_style = bright_green    
 border_style = bright_white    
 column_style = bright_magenta     
 text_style = None    

 [OS Bar]    
 os_text_style = bright_red on black    

 [Logging]    
 enable_logging = true 
Enter fullscreen mode Exit fullscreen mode

Color Customization

Because, Why Not.

If you are going to use a terminal regularly, you want your tools to look good. Well, at least I do. Some tools offer minimal choices regarding terminal color and styling options. Some offer a lot of options but make it rather difficult to customize quickly.

I know my personal taste in terminal color and styling choices may not be for everyone. So, I decided to make the ‘hi’ tool output easily customizable.

Below are just some of the possibilties for display customization you now have with the ‘hi’ tool:

Magenta on Magenta Color Scheme

Magenta on Magenta Color Scheme

Green on Green Color Scheme

Green on Green Color Scheme

Green on Black Color Scheme

Green on Black Color Scheme

Blue and Black Color Scheme

Blue and Black Color Scheme

Magenta on Black Color Scheme

Magenta on Black Color Scheme

Conclusion

With the new logging and state tracking capabilities, along with customizable color schemes, the ‘hi’ tool paves the way for further expansion, opening doors for integration with other command-line or API-oriented tools that utilize standard JSON formatted outputs.

I would love your feedback on this tool! There are always bugs to fix and features to add as outlined in our ROADMAP.md, but I can’t catch everything on my own. Please don’t hesitate to reach out via GitHub if you encounter any issues or have suggestions. Sometimes the fix is as simple as an update or clarification in the README.md, and I’m more than happy to address it.

Thanks for checking out ‘hi,’ the Host Information tool! Let’s make monitoring more efficient together.

Join the discussion and contribute on GitHub

This article is cross-posted from 'hi' shows its colors on thedevopsjoint.com.

Top comments (0)