Closes #3526
Adds a SolarWinds monitoring provider for Keep with:
/claim #3526
Complete SolarWinds provider implementation with both pull (API polling) and push (webhook) support.
Pull mode queries the SWIS REST API using SWQL (SELECT ... FROM Orion.AlertActive) to fetch active alerts with severity, status, and node metadata. Authentication via username/password with configurable server URL.
Push mode receives webhook POST payloads from SolarWinds alert actions. Supports variable substitution templates (${N=SwisEntity;M=AlertActive.TriggeredMessage}) for trigger and reset actions.
Key implementation details:
true, or notification_type “ACKNOWLEDGEMENT”alert_active_id (preferred) or alert_id + object_name composite fallbackTest coverage (42 tests):
TestSolarwindsFormatAlert (22 tests): webhook formatting, severity mapping through format_alert, status determination, acknowledged detection, ID generation, timestamp passthrough, empty event handlingTestSolarwindsSeverityMapping (10 tests): all 5 numeric levels (int + string keys) and all 5 named string keys verified against SEVERITY_MAP directlyTestSolarwindsAlertsMock (4 tests): alerts_mock format compatibility, PROBLEM/RECOVERY coverage, severity rangeTestSolarwindsProviderMetadata (6 tests): display name, tags, category, fingerprint fields, scopes, SWIS base pathFiles:
keep/providers/solarwinds_provider/solarwinds_provider.py — Provider implementationkeep/providers/solarwinds_provider/alerts_mock.py — 6 mock payloads for simulate_alertkeep/providers/solarwinds_provider/__init__.pykeep-ui/public/icons/solarwinds-icon.png — SolarWinds flame icondocs/providers/documentation/solarwinds-provider.mdx — Setup documentationdocs/snippets/providers/solarwinds-snippet-autogenerated.mdx — Auto-generated snippettests/test_solarwinds_provider.py — 42 testsJames Lear
@jameslear314
Keep (YC W23)
@keephq