SnmpKit v0.3.0 Release Notes

Release Date: 2024-12-19
Version: 0.3.0
Git Tag: v0.3.0

🎯 Major Features

Unified API Architecture

The biggest change in v0.3.0 is the introduction of a unified API architecture that organizes all SnmpKit functionality into logical, discoverable modules:

This replaces the previous fragmented approach where functions were scattered across multiple modules, making the library much more intuitive and easier to use.

Enhanced Module Organization

SnmpKit.SNMP

All SNMP operations are now organized under a single, comprehensive module:

# Basic operations
{:ok, value} = SnmpKit.SNMP.get("192.168.1.1", "sysDescr.0")
{:ok, results} = SnmpKit.SNMP.walk("192.168.1.1", "system")

# Bulk operations
{:ok, data} = SnmpKit.SNMP.bulk_walk("192.168.1.1", "interfaces")

# Multi-target operations
{:ok, results} = SnmpKit.SNMP.get_multi([
  {"host1", "sysDescr.0"},
  {"host2", "sysUpTime.0"}
])

# Pretty formatting
{:ok, formatted} = SnmpKit.SNMP.get_pretty("192.168.1.1", "sysUpTime.0")

# Async operations
task = SnmpKit.SNMP.get_async("192.168.1.1", "sysDescr.0")

SnmpKit.MIB

Comprehensive MIB management with both high-level and low-level operations:

# OID resolution
{:ok, oid} = SnmpKit.MIB.resolve("sysDescr.0")
{:ok, name} = SnmpKit.MIB.reverse_lookup([1, 3, 6, 1, 2, 1, 1, 1, 0])

# High-level MIB compilation
{:ok, compiled} = SnmpKit.MIB.compile("MY-MIB.mib")
{:ok, _} = SnmpKit.MIB.load(compiled)

# Low-level MIB operations
{:ok, raw_compiled} = SnmpKit.MIB.compile_raw("MY-MIB.mib")

SnmpKit.Sim

Simplified device simulation interface:

# Start individual devices
{:ok, device} = SnmpKit.Sim.start_device(profile, port: 1161)

# Create device populations
{:ok, devices} = SnmpKit.Sim.start_device_population(device_configs)

Backward Compatibility

All existing code continues to work! Common operations are still available directly on the main SnmpKit module:

# These still work exactly as before
{:ok, value} = SnmpKit.get("192.168.1.1", "sysDescr.0")
{:ok, results} = SnmpKit.walk("192.168.1.1", "system")
{:ok, oid} = SnmpKit.resolve("sysDescr.0")

📚 Documentation Improvements

Updated README

  • Complete rewrite showcasing the unified API
  • Clear examples for each module
  • Migration guide from other libraries
  • Enterprise features section
  • Performance optimization tips

Interactive Livebook Tour

  • Completely rewritten snmpkit_tour.livemd
  • Now uses simulated devices for all examples
  • No external network dependencies
  • Comprehensive coverage of all new API features
  • Step-by-step guided experience

New Documentation Files

  • docs/unified-api-guide.md - Deep dive into the new API structure
  • docs/v0.3.0-release-notes.md - These release notes
  • examples/unified_api_demo.exs - Practical usage examples

🔧 Technical Improvements

Code Quality

  • Zero compiler warnings - Maintains the clean codebase from v0.2.0
  • 1,140 tests passing - Comprehensive test coverage
  • 76 doctests - Extensive documentation examples
  • Clean module structure - Logical organization with defdelegate

Performance

  • Maintained all performance optimizations from previous versions
  • Added streaming operations for large datasets
  • Improved memory usage for bulk operations

Developer Experience

  • Discoverability - Functions are now easy to find in logical modules
  • Consistency - Similar operations follow consistent patterns
  • IDE Support - Better autocomplete and documentation in editors

🚀 New Features

Enhanced SNMP Operations

  • Streaming operations - walk_stream/3, table_stream/3
  • Performance benchmarking - benchmark_device/3
  • Circuit breaker pattern - with_circuit_breaker/3
  • Engine management - Advanced SNMP engine features

Advanced MIB Features

  • Tree navigation - children/1, parent/1, walk_tree/2
  • Enhanced resolution - resolve_enhanced/2
  • Dual compilation paths - High-level and low-level MIB compilation
  • Standard MIB loading - load_standard_mibs/0

Simulation Enhancements

  • Simplified device creation - Easier device simulation setup
  • Population management - Better handling of device groups
  • Profile integration - Seamless integration with existing profiles

📊 Migration Guide

From v0.2.x

No breaking changes! Your existing code will continue to work exactly as before.

Optional migrations for better discoverability:

# Old way (still works)
{:ok, value} = SnmpKit.get("host", "oid")

# New way (recommended)
{:ok, value} = SnmpKit.SNMP.get("host", "oid")

From Other Libraries

# From :snmp (Erlang)
:snmp.sync_get(manager, oid, timeout)
# Becomes:
SnmpKit.SNMP.get("host", "oid", timeout: timeout)

# From other Elixir SNMP libraries
OtherLib.snmp_get(host, oid)
# Becomes:
SnmpKit.SNMP.get(host, oid)

🎉 What's Next

v0.4.0 Roadmap

  • Enhanced metrics and monitoring
  • More simulation scenarios
  • Performance optimization tools
  • Extended MIB analysis capabilities

Community

  • Join the discussion on GitHub
  • Contribute examples and use cases
  • Share feedback on the unified API

📈 Statistics

  • Total Functions: 50+ organized functions across 3 main modules
  • Lines of Code: Maintained clean, focused codebase
  • Test Coverage: 1,140 tests, 76 doctests, 0 failures
  • Documentation: Complete rewrite with 3 new guides

🙏 Acknowledgments

This release represents a significant step forward in making SnmpKit the most user-friendly and powerful SNMP library for Elixir. Thank you to all users who provided feedback on the API design and helped shape this unified architecture.


Upgrade today: {:snmpkit, "~> 0.3.0"}

For questions or support, please visit the GitHub repository.