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:
SnmpKit.SNMP
- Complete SNMP protocol operationsSnmpKit.MIB
- Comprehensive MIB managementSnmpKit.Sim
- Realistic device simulation
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 structuredocs/v0.3.0-release-notes.md
- These release notesexamples/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.