Skip to content

Commit 9984304

Browse files
committed
First pass at submitting interface metadata, cleanup for test fixtures
1 parent 308381e commit 9984304

File tree

4 files changed

+3659
-184
lines changed

4 files changed

+3659
-184
lines changed

cisco_aci/datadog_checks/cisco_aci/fabric.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from six import iteritems
66

77
from datadog_checks.base.utils.serialization import json
8-
from datadog_checks.cisco_aci.models import DeviceMetadata, Node
8+
from datadog_checks.cisco_aci.models import DeviceMetadata, Eth, InterfaceMetadata, Node
99

1010
from . import aci_metrics, exceptions, helpers
1111

@@ -99,6 +99,7 @@ def process_eth(self, node):
9999
eth_attrs = helpers.get_attributes(e)
100100
eth_id = eth_attrs['id']
101101
tags = self.tagger.get_fabric_tags(e, 'l1PhysIf')
102+
self.submit_interface_metadata(eth_attrs, node['address'], tags)
102103
try:
103104
stats = self.api.get_eth_stats(pod_id, node['id'], eth_id)
104105
self.submit_fabric_metric(stats, tags, 'l1PhysIf', hostname=hostname)
@@ -236,9 +237,23 @@ def submit_node_metadata(self, node_attrs, tags):
236237
name=node.attributes.dn,
237238
ip_address=node.attributes.address,
238239
model=node.attributes.model,
239-
adSt=node.attributes.adSt,
240+
ad_st=node.attributes.ad_st,
240241
vendor=vendor,
241242
version=node.attributes.version,
242243
serial_number=node.attributes.serial,
243244
)
244245
self.ndm_metadata(json.dumps(device.model_dump()))
246+
247+
def submit_interface_metadata(self, eth_attr, address, tags):
248+
eth = Eth(attributes=eth_attr)
249+
namespace = 'default'
250+
interface = InterfaceMetadata(
251+
device_id=f'{namespace}:{address}',
252+
id_tags=tags,
253+
index=f'{eth.attributes.id}',
254+
name=f'{eth.attributes.name}',
255+
description=f'{eth.attributes.desc}',
256+
mac_address=f'{eth.attributes.router_mac}',
257+
admin_status=f'{eth.attributes.admin_st}',
258+
)
259+
self.ndm_metadata(json.dumps(interface.model_dump()))

cisco_aci/datadog_checks/cisco_aci/models.py

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
class NodeAttributes(BaseModel):
99
address: str | None = None
10-
adSt: str | None = None
10+
ad_st: str | None = Field(default=None, alias="adSt")
1111
role: str | None = None
1212
dn: str | None = None
1313
model: str | None = None
@@ -21,23 +21,54 @@ class Node(BaseModel):
2121
attributes: NodeAttributes
2222

2323

24+
class EthAttributes(BaseModel):
25+
admin_st: str | None = Field(default=None, alias="adminSt")
26+
id: str | None = None
27+
name: str | None = None
28+
desc: str | None = None
29+
router_mac: str | None = Field(default=None, alias="routerMac")
30+
31+
32+
class Eth(BaseModel):
33+
attributes: EthAttributes
34+
35+
2436
class DeviceMetadata(BaseModel):
2537
device_id: str | None = Field(default=None)
2638
id_tags: list = Field(default_factory=list)
2739
tags: list = Field(default_factory=list)
2840
name: str | None = Field(default=None)
2941
ip_address: str | None = Field(default=None)
3042
model: str | None = Field(default=None)
31-
adSt: str | None = Field(default=None, exclude=True)
43+
ad_st: str | None = Field(default=None, exclude=True)
3244
vendor: str | None = Field(default=None)
3345
version: str | None = Field(default=None)
3446
serial_number: str | None = Field(default=None)
3547

3648
@computed_field
3749
@property
3850
def status(self) -> int:
39-
return 1 if self.adSt == 'on' else 2
51+
return 1 if self.ad_st == 'on' else 2
4052

4153

4254
class DeviceMetadataList(BaseModel):
4355
device_metadata: list = Field(default_factory=list)
56+
57+
58+
class InterfaceMetadata(BaseModel):
59+
device_id: str | None = Field(default=None)
60+
id_tags: list = Field(default_factory=list)
61+
index: str | None = Field(default=None)
62+
name: str | None = Field(default=None)
63+
description: str | None = Field(default=None)
64+
mac_address: str | None = Field(default=None)
65+
admin_status: str | None = Field(default=None, exclude=True)
66+
67+
@computed_field
68+
@property
69+
def status(self) -> int:
70+
return 1 if self.admin_status == 'up' else 2
71+
72+
73+
class InterfaceMetadataList(BaseModel):
74+
interface_metadata: list = Field(default_factory=list)

0 commit comments

Comments
 (0)