Skip to content

Commit

Permalink
First pass at submitting interface metadata, cleanup for test fixtures
Browse files Browse the repository at this point in the history
  • Loading branch information
zoedt committed Jun 5, 2024
1 parent 308381e commit aaaf282
Show file tree
Hide file tree
Showing 4 changed files with 3,663 additions and 184 deletions.
19 changes: 17 additions & 2 deletions cisco_aci/datadog_checks/cisco_aci/fabric.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from six import iteritems

from datadog_checks.base.utils.serialization import json
from datadog_checks.cisco_aci.models import DeviceMetadata, Node
from datadog_checks.cisco_aci.models import DeviceMetadata, Eth, InterfaceMetadata, Node

from . import aci_metrics, exceptions, helpers

Expand Down Expand Up @@ -99,6 +99,7 @@ def process_eth(self, node):
eth_attrs = helpers.get_attributes(e)
eth_id = eth_attrs['id']
tags = self.tagger.get_fabric_tags(e, 'l1PhysIf')
self.submit_interface_metadata(eth_attrs, node['address'], tags)
try:
stats = self.api.get_eth_stats(pod_id, node['id'], eth_id)
self.submit_fabric_metric(stats, tags, 'l1PhysIf', hostname=hostname)
Expand Down Expand Up @@ -236,9 +237,23 @@ def submit_node_metadata(self, node_attrs, tags):
name=node.attributes.dn,
ip_address=node.attributes.address,
model=node.attributes.model,
adSt=node.attributes.adSt,
ad_st=node.attributes.ad_st,
vendor=vendor,
version=node.attributes.version,
serial_number=node.attributes.serial,
)
self.ndm_metadata(json.dumps(device.model_dump()))

def submit_interface_metadata(self, eth_attr, address, tags):
eth = Eth(attributes=eth_attr)
namespace = 'default'
interface = InterfaceMetadata(
device_id=f'{namespace}:{address}',
id_tags=tags,
index=f'{eth.attributes.id}',
name=f'{eth.attributes.name}',
description=f'{eth.attributes.desc}',
mac_address=f'{eth.attributes.router_mac}',
admin_status=f'{eth.attributes.admin_st}',
)
self.ndm_metadata(json.dumps(interface.model_dump()))
37 changes: 34 additions & 3 deletions cisco_aci/datadog_checks/cisco_aci/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

class NodeAttributes(BaseModel):
address: str | None = None
adSt: str | None = None
ad_st: str | None = Field(default=None, alias="adSt")
role: str | None = None
dn: str | None = None
model: str | None = None
Expand All @@ -21,23 +21,54 @@ class Node(BaseModel):
attributes: NodeAttributes


class EthAttributes(BaseModel):
admin_st: str | None = Field(default=None, alias="adminSt")
id: str | None = None
name: str | None = None
desc: str | None = None
router_mac: str | None = Field(default=None, alias="routerMac")


class Eth(BaseModel):
attributes: EthAttributes


class DeviceMetadata(BaseModel):
device_id: str | None = Field(default=None)
id_tags: list = Field(default_factory=list)
tags: list = Field(default_factory=list)
name: str | None = Field(default=None)
ip_address: str | None = Field(default=None)
model: str | None = Field(default=None)
adSt: str | None = Field(default=None, exclude=True)
ad_st: str | None = Field(default=None, exclude=True)
vendor: str | None = Field(default=None)
version: str | None = Field(default=None)
serial_number: str | None = Field(default=None)

@computed_field
@property
def status(self) -> int:
return 1 if self.adSt == 'on' else 2
return 1 if self.ad_st == 'on' else 2


class DeviceMetadataList(BaseModel):
device_metadata: list = Field(default_factory=list)


class InterfaceMetadata(BaseModel):
device_id: str | None = Field(default=None)
id_tags: list = Field(default_factory=list)
index: str | None = Field(default=None)
name: str | None = Field(default=None)
description: str | None = Field(default=None)
mac_address: str | None = Field(default=None)
admin_status: str | None = Field(default=None, exclude=True)

@computed_field
@property
def status(self) -> int:
return 1 if self.admin_status == 'up' else 2


class InterfaceMetadataList(BaseModel):
interface_metadata: list = Field(default_factory=list)
Loading

0 comments on commit aaaf282

Please sign in to comment.