Skip to content

Commit

Permalink
Add per vendor generic profiles (#14721)
Browse files Browse the repository at this point in the history
* add dell generic profile

* add fortinet generic profile

* add juniper generic profile

* move vendor profiles to default-profiles

* add test for cisco

* add test for dell

* add test for fortinet

* add test for juniper

* linter

* linter
  • Loading branch information
NouhaManai96 authored Jun 21, 2023
1 parent 58b2f32 commit 89a3e0e
Show file tree
Hide file tree
Showing 15 changed files with 502 additions and 6 deletions.
12 changes: 12 additions & 0 deletions snmp/datadog_checks/snmp/data/default_profiles/cisco.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Profile for Cisco devices

extends:
- _base_cisco.yaml

metadata:
device:
fields:
vendor:
value: "cisco"

sysobjectid: 1.3.6.1.4.1.9.1.*
15 changes: 15 additions & 0 deletions snmp/datadog_checks/snmp/data/default_profiles/dell.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Profile for Dell devices

extends:
- _base.yaml
- _generic-ip.yaml
- _generic-tcp.yaml
- _generic-udp.yaml

metadata:
device:
fields:
vendor:
value: "dell"

sysobjectid: 1.3.6.1.4.1.674.*
17 changes: 17 additions & 0 deletions snmp/datadog_checks/snmp/data/default_profiles/fortinet.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Profile for Fortinet devices
# For Fortinet FortiGate devices, a separate fortinet-fortigate profile is used

extends:
- _base.yaml
- _generic-if.yaml

metadata:
device:
fields:
vendor:
value: "fortinet"

sysobjectid:
- 1.3.6.1.4.1.12356.103.* # Fortinet Appliance
- 1.3.6.1.4.1.12356.106.1.* # Fortinet fortiswitch

27 changes: 27 additions & 0 deletions snmp/datadog_checks/snmp/data/default_profiles/juniper.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Profile for Juniper devices

extends:
- _base.yaml
- _generic-if.yaml
- _generic-ip.yaml
- _generic-tcp.yaml
- _generic-udp.yaml
- _generic-bgp4.yaml
- _generic-ospf.yaml
- _generic-host-resources.yaml
- _juniper-junos-generic.yaml

metadata:
device:
fields:
vendor:
value: "juniper-networks"

# Juniper Products are declared in JUNIPER-CHASSIS-DEFINES-MIB.
# Products are defined under 1.3.6.1.4.1.2636.1.1.1.2 (jnxProductName).
# Variations are defined under 1.3.6.1.4.1.2636.1.1.1.4 (jnxProductVariation).
# Reference: https://mibs.observium.org/mib/JUNIPER-CHASSIS-DEFINES-MIB/
sysobjectid:
- 1.3.6.1.4.1.2636.1.1.1.2.* # Products
- 1.3.6.1.4.1.2636.1.1.1.4.* # Variations

11 changes: 11 additions & 0 deletions snmp/tests/compose/data/cisco.snmprec
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
1.3.6.1.2.1.1.1.0|4|Cisco IOS XR Software, Copyright (c) 2013-2020 by Cisco Systems, Inc.
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.122
1.3.6.1.2.1.1.5.0|4|cisco3620
1.3.6.1.2.1.2.1.0|2|4
1.3.6.1.2.1.4.31.1.1.4.1|2|310637142
1.3.6.1.2.1.6.5.0|65|457790
1.3.6.1.2.1.7.8.0|70|6116206687099577350
1.3.6.1.2.1.14.10.1.6.192.29.116.26.0|2|8
1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2
1.3.6.1.4.1.9.9.48.1.1.1.5.18|66|4078680985
1.3.6.1.4.1.9.9.109.1.1.1.1.7.712|66|20
6 changes: 6 additions & 0 deletions snmp/tests/compose/data/dell.snmprec
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
1.3.6.1.2.1.1.1.0|4|Dell dummy device
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.674.1
1.3.6.1.2.1.1.5.0|4|dell.example
1.3.6.1.2.1.4.31.1.1.4.1|2|310637142
1.3.6.1.2.1.6.5.0|65|457790
1.3.6.1.2.1.7.8.0|70|6116206687099577350
4 changes: 4 additions & 0 deletions snmp/tests/compose/data/fortinet-appliance.snmprec
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
1.3.6.1.2.1.1.1.0|4|Fortinet Appliance dummy device
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.12356.103.1
1.3.6.1.2.1.1.5.0|4|fortinet.appliance.example
1.3.6.1.2.1.2.1.0|2|4
4 changes: 4 additions & 0 deletions snmp/tests/compose/data/fortinet-fortiswitch.snmprec
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
1.3.6.1.2.1.1.1.0|4|Fortinet Fortiswitch dummy device
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.12356.106.1.1
1.3.6.1.2.1.1.5.0|4|fortinet.fortiswitch.example
1.3.6.1.2.1.2.1.0|2|4
10 changes: 10 additions & 0 deletions snmp/tests/compose/data/juniper-variation.snmprec
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
1.3.6.1.2.1.1.1.0|4|Juniper Networks, Inc.
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.4.1
1.3.6.1.2.1.1.5.0|4|jnxVariationM40
1.3.6.1.2.1.2.1.0|2|4
1.3.6.1.2.1.4.31.1.1.4.1|2|310637142
1.3.6.1.2.1.6.5.0|65|457790
1.3.6.1.2.1.7.8.0|70|6116206687099577350
1.3.6.1.2.1.14.10.1.6.192.29.116.26.0|2|8
1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2
1.3.6.1.2.1.25.1.1.0|67|803137913
10 changes: 10 additions & 0 deletions snmp/tests/compose/data/juniper.snmprec
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
1.3.6.1.2.1.1.1.0|4|Juniper Networks, Inc.
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.2.1
1.3.6.1.2.1.1.5.0|4|jnxM40
1.3.6.1.2.1.2.1.0|2|4
1.3.6.1.2.1.4.31.1.1.4.1|2|310637142
1.3.6.1.2.1.6.5.0|65|457790
1.3.6.1.2.1.7.8.0|70|6116206687099577350
1.3.6.1.2.1.14.10.1.6.192.29.116.26.0|2|8
1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2
1.3.6.1.2.1.25.1.1.0|67|803137913
67 changes: 67 additions & 0 deletions snmp/tests/test_e2e_core_profiles/test_profile_cisco.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# (C) Datadog, Inc. 2023-present
# All rights reserved
# Licensed under a 3-clause BSD style license (see LICENSE)

import pytest

from .. import common
from ..test_e2e_core_metadata import assert_device_metadata
from .utils import (
assert_common_metrics,
assert_extend_cisco_cpu_memory,
assert_extend_generic_bgp4,
assert_extend_generic_if,
assert_extend_generic_ip,
assert_extend_generic_ospf,
assert_extend_generic_tcp,
assert_extend_generic_udp,
create_e2e_core_test_config,
get_device_ip_from_config,
)

pytestmark = [pytest.mark.e2e, common.py3_plus_only, common.snmp_integration_only]


def test_e2e_profile_cisco(dd_agent_check):
config = create_e2e_core_test_config("cisco")
aggregator = common.dd_agent_check_wrapper(dd_agent_check, config, rate=True)

ip_address = get_device_ip_from_config(config)
common_tags = [
"snmp_profile:cisco",
"snmp_host:cisco3620",
"device_namespace:default",
"snmp_device:" + ip_address,
]

# --- TEST METRICS ---
assert_common_metrics(aggregator, common_tags)
assert_extend_generic_if(aggregator, common_tags)
assert_extend_generic_ip(aggregator, common_tags)
assert_extend_generic_tcp(aggregator, common_tags)
assert_extend_generic_udp(aggregator, common_tags)
assert_extend_generic_ospf(aggregator, common_tags)
assert_extend_generic_bgp4(aggregator, common_tags)
assert_extend_cisco_cpu_memory(aggregator, common_tags)
aggregator.assert_all_metrics_covered()

# --- TEST METADATA ---
device = {
"description": "Cisco IOS XR Software, Copyright (c) 2013-2020 by Cisco Systems, Inc.",
"id": "default:" + ip_address,
"id_tags": ["device_namespace:default", "snmp_device:" + ip_address],
"ip_address": "" + ip_address,
"name": "cisco3620",
"os_name": "IOSXR",
"profile": "cisco",
"status": 1,
"sys_object_id": "1.3.6.1.4.1.9.1.122",
"tags": [
"device_namespace:default",
"snmp_device:" + ip_address,
"snmp_host:cisco3620",
"snmp_profile:cisco",
],
"vendor": "cisco",
}
assert_device_metadata(aggregator, device)
58 changes: 58 additions & 0 deletions snmp/tests/test_e2e_core_profiles/test_profile_dell.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# (C) Datadog, Inc. 2023-present
# All rights reserved
# Licensed under a 3-clause BSD style license (see LICENSE)

import pytest

from .. import common
from ..test_e2e_core_metadata import assert_device_metadata
from .utils import (
assert_common_metrics,
assert_extend_generic_ip,
assert_extend_generic_tcp,
assert_extend_generic_udp,
create_e2e_core_test_config,
get_device_ip_from_config,
)

pytestmark = [pytest.mark.e2e, common.py3_plus_only, common.snmp_integration_only]


def test_e2e_profile_dell(dd_agent_check):
config = create_e2e_core_test_config("dell")
aggregator = common.dd_agent_check_wrapper(dd_agent_check, config, rate=True)

ip_address = get_device_ip_from_config(config)
common_tags = [
"snmp_profile:dell",
"snmp_host:dell.example",
"device_namespace:default",
"snmp_device:" + ip_address,
]

# --- TEST METRICS ---
assert_common_metrics(aggregator, common_tags)
assert_extend_generic_ip(aggregator, common_tags)
assert_extend_generic_tcp(aggregator, common_tags)
assert_extend_generic_udp(aggregator, common_tags)
aggregator.assert_all_metrics_covered()

# --- TEST METADATA ---
device = {
"description": "Dell dummy device",
"id": "default:" + ip_address,
"id_tags": ["device_namespace:default", "snmp_device:" + ip_address],
"ip_address": "" + ip_address,
"name": "dell.example",
"profile": "dell",
"status": 1,
"sys_object_id": "1.3.6.1.4.1.674.1",
"tags": [
"device_namespace:default",
"snmp_device:" + ip_address,
"snmp_host:dell.example",
"snmp_profile:dell",
],
"vendor": "dell",
}
assert_device_metadata(aggregator, device)
92 changes: 92 additions & 0 deletions snmp/tests/test_e2e_core_profiles/test_profile_fortinet.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# (C) Datadog, Inc. 2023-present
# All rights reserved
# Licensed under a 3-clause BSD style license (see LICENSE)

import pytest

from .. import common
from ..test_e2e_core_metadata import assert_device_metadata
from .utils import (
assert_common_metrics,
assert_extend_generic_if,
create_e2e_core_test_config,
get_device_ip_from_config,
)

pytestmark = [pytest.mark.e2e, common.py3_plus_only, common.snmp_integration_only]


def test_e2e_profile_fortinet_appliance(dd_agent_check):
config = create_e2e_core_test_config("fortinet-appliance")
aggregator = common.dd_agent_check_wrapper(dd_agent_check, config, rate=True)

ip_address = get_device_ip_from_config(config)
common_tags = [
"snmp_profile:fortinet",
"snmp_host:fortinet.appliance.example",
"device_namespace:default",
"snmp_device:" + ip_address,
]

# --- TEST METRICS ---
assert_common_metrics(aggregator, common_tags)
assert_extend_generic_if(aggregator, common_tags)
aggregator.assert_all_metrics_covered()

# --- TEST METADATA ---
device = {
"description": "Fortinet Appliance dummy device",
"id": "default:" + ip_address,
"id_tags": ["device_namespace:default", "snmp_device:" + ip_address],
"ip_address": "" + ip_address,
"name": "fortinet.appliance.example",
"profile": "fortinet",
"status": 1,
"sys_object_id": "1.3.6.1.4.1.12356.103.1",
"tags": [
"device_namespace:default",
"snmp_device:" + ip_address,
"snmp_host:fortinet.appliance.example",
"snmp_profile:fortinet",
],
"vendor": "fortinet",
}
assert_device_metadata(aggregator, device)


def test_e2e_profile_fortinet_fortiswitch(dd_agent_check):
config = create_e2e_core_test_config("fortinet-fortiswitch")
aggregator = common.dd_agent_check_wrapper(dd_agent_check, config, rate=True)

ip_address = get_device_ip_from_config(config)
common_tags = [
"snmp_profile:fortinet",
"snmp_host:fortinet.fortiswitch.example",
"device_namespace:default",
"snmp_device:" + ip_address,
]

# --- TEST METRICS ---
assert_common_metrics(aggregator, common_tags)
assert_extend_generic_if(aggregator, common_tags)
aggregator.assert_all_metrics_covered()

# --- TEST METADATA ---
device = {
"description": "Fortinet Fortiswitch dummy device",
"id": "default:" + ip_address,
"id_tags": ["device_namespace:default", "snmp_device:" + ip_address],
"ip_address": "" + ip_address,
"name": "fortinet.fortiswitch.example",
"profile": "fortinet",
"status": 1,
"sys_object_id": "1.3.6.1.4.1.12356.106.1.1",
"tags": [
"device_namespace:default",
"snmp_device:" + ip_address,
"snmp_host:fortinet.fortiswitch.example",
"snmp_profile:fortinet",
],
"vendor": "fortinet",
}
assert_device_metadata(aggregator, device)
Loading

0 comments on commit 89a3e0e

Please sign in to comment.