Skip to content

Commit a2e70bd

Browse files
authored
[Cisco ACI] Remove tenant faults as events (#23350)
* Remove Cisco ACI events * Add changelog
1 parent 8edb5a1 commit a2e70bd

8 files changed

Lines changed: 1 addition & 144 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[Cisco ACI] Remove tenant faults as events, faults are now only to send as logs

cisco_aci/datadog_checks/cisco_aci/api.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -224,16 +224,6 @@ def get_tenant_stats(self, tenant):
224224
# return only the list of stats
225225
return self._parse_response(response)
226226

227-
def get_tenant_events(self, tenant, page=0, page_size=15):
228-
query1 = 'rsp-subtree-include=event-logs,no-scoped,subtree'
229-
query2 = 'order-by=eventRecord.created|desc'
230-
query3 = 'page={}&page-size={}'.format(page, page_size)
231-
query = '{}&{}&{}'.format(query1, query2, query3)
232-
path = "/api/node/mo/uni/tn-{}.json?{}".format(tenant, query)
233-
response = self.make_request(path)
234-
# return only the list of stats
235-
return self._parse_response(response)
236-
237227
def get_fabric_pods(self):
238228
path = '/api/mo/topology.json?query-target=subtree&target-subtree-class=fabricPod'
239229
response = self.make_request(path)

cisco_aci/datadog_checks/cisco_aci/cisco.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ class CiscoACICheck(AgentCheck):
2626
def __init__(self, name, init_config, instances):
2727
super(CiscoACICheck, self).__init__(name, init_config, instances)
2828
self.tenant_metrics = make_tenant_metrics()
29-
self.last_events_ts = {}
3029
self.external_host_tags = {}
3130
self._api_cache = {}
3231
self.check_tags = ['cisco']

cisco_aci/datadog_checks/cisco_aci/helpers.py

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -113,33 +113,6 @@ def _get_value_from_dn(regex, dn):
113113
return None
114114

115115

116-
def get_event_tags_from_dn(dn):
117-
"""
118-
This grabs the event tags from the dn designator. They look like this:
119-
uni/tn-DataDog/ap-DtDg-AP1-EcommerceApp/epg-DtDg-Ecomm/HDl2IngrPktsAg1h
120-
"""
121-
tags = []
122-
node = get_node_from_dn(dn)
123-
if node:
124-
tags.append("node:" + node)
125-
app = get_app_from_dn(dn)
126-
if app:
127-
tags.append("app:" + app)
128-
bd = get_bd_from_dn(dn)
129-
if bd:
130-
tags.append("bd:" + bd)
131-
cep = get_cep_from_dn(dn)
132-
if cep:
133-
tags.append("mac:" + cep)
134-
ip = get_ip_from_dn(dn)
135-
if ip:
136-
tags.append("ip:" + ip)
137-
epg = get_epg_from_dn(dn)
138-
if epg:
139-
tags.append("epg:" + epg)
140-
return tags
141-
142-
143116
def get_hostname_from_dn(dn):
144117
"""
145118
This parses the hostname from a dn designator. They look like this:

cisco_aci/datadog_checks/cisco_aci/tenant.py

Lines changed: 0 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22
# All rights reserved
33
# Licensed under a 3-clause BSD style license (see LICENSE)
44

5-
import datetime
6-
import re
7-
import time
8-
95
from . import exceptions, helpers
106

117

@@ -58,10 +54,6 @@ def collect(self):
5854
except (exceptions.APIConnectionException, exceptions.APIParsingException):
5955
pass
6056
self._submit_ten_data(t)
61-
try:
62-
self.collect_events(t)
63-
except (exceptions.APIConnectionException, exceptions.APIParsingException):
64-
pass
6557

6658
def _submit_app_data(self, tenant, app):
6759
a = app.get('fvAp', {})
@@ -120,74 +112,3 @@ def submit_raw_obj(self, raw_stats, tags, obj_type):
120112
metrics[dd_metric] = mval
121113

122114
self.submit_metrics(metrics, tags, instance=self.instance)
123-
124-
def collect_events(self, tenant, page=0, page_size=15):
125-
# If there are too many events, it'll break the agent
126-
# stop sending after it reaches page 10 (150 events per tenant)
127-
if page >= 10:
128-
return
129-
130-
event_list = self.api.get_tenant_events(tenant, page=page, page_size=15)
131-
132-
now = int(time.time())
133-
prior_ts = self.last_events_ts.get(tenant)
134-
time_window = 600
135-
if prior_ts:
136-
time_window = now - prior_ts
137-
138-
self.last_events_ts[tenant] = now
139-
140-
log_line = "Fetched: {} events".format(len(event_list))
141-
if len(event_list) > 0:
142-
created = event_list[0].get('eventRecord', {}).get('attributes', {}).get('created')
143-
log_line += ", most recent is from: {}".format(created)
144-
self.log.info(log_line)
145-
146-
for event in event_list:
147-
ev = event.get('eventRecord', {}).get('attributes', {})
148-
created = ev.get('created')
149-
create_date = re.search(r'\d{4}-\d{2}-\d{1,2}T\d{2}:\d{2}:\d{2}', created).group(0)
150-
151-
self.log.debug("ev time: %s", created)
152-
strptime = datetime.datetime.strptime(create_date, '%Y-%m-%dT%H:%M:%S')
153-
timestamp = (strptime - datetime.datetime(1970, 1, 1)).total_seconds()
154-
if now - timestamp > time_window:
155-
return
156-
157-
self.log.debug("sending an event!")
158-
159-
title = "The resource: " + ev['affected'] + " emitted an event"
160-
dn_tags = helpers.get_event_tags_from_dn(ev['dn'])
161-
tags = ["tenant:" + tenant]
162-
tags = tags + self.user_tags + self.check_tags
163-
if 'code' in ev:
164-
tags.append("code:" + ev['code'])
165-
if 'user' in ev:
166-
tags.append("user:" + ev['user'])
167-
if 'cause' in ev:
168-
tags.append("cause:" + ev['cause'])
169-
if 'severity' in ev:
170-
tags.append("severity:" + ev['severity'])
171-
self.check.event(
172-
{
173-
'timestamp': timestamp,
174-
'event_type': 'cisco_aci',
175-
'msg_title': title,
176-
'msg_text': ev['descr'],
177-
"tags": tags + dn_tags,
178-
"aggregation_key": ev['id'],
179-
'host': self.check.hostname,
180-
}
181-
)
182-
183-
# if we get to the end without running out of new events, move onto the next page
184-
# there is a bug when sometimes it'll return 30 events despite the page size setting
185-
if len(event_list) != 0 and len(event_list) % 15 == 0:
186-
self.collect_events(tenant, page=page + 1, page_size=15)
187-
188-
@property
189-
def last_events_ts(self):
190-
if self.instance_hash not in self.check.last_events_ts:
191-
self.check.last_events_ts[self.instance_hash] = {}
192-
193-
return self.check.last_events_ts[self.instance_hash]

cisco_aci/tests/common.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,6 @@
170170
# 0d6ca781810665156211b355129ba2f1 - Api.get_eqpt_capacity
171171
'_api_mo_topology_json_query_target_subtree_target_subtree_class_fabricPod',
172172
# 643d217904f09445fbc9f7b43cd131f0 - Api.get_fabric_pods
173-
'_api_node_mo_uni_tn_DataDog_json_rsp_subtree_include_event_logs_no_scoped_subtree_order_by_eventRecord_created_desc_page_0_page_size_15', # noqa: E501
174-
# d0260e4832537b43b1acb38bcfa58063 - Api.get_tenant_events
175173
'_api_mo_uni_tn_DataDog_json_query_target_subtree_target_subtree_class_fvAp',
176174
# 4efe80304d50330f5ed0f79252ef0a84 - Api.get_apps
177175
'_api_mo_uni_tn_DataDog_json_rsp_subtree_include_stats_no_scoped',

cisco_aci/tests/test_helpers.py

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
get_bd_from_dn,
1212
get_cep_from_dn,
1313
get_epg_from_dn,
14-
get_event_tags_from_dn,
1514
get_hostname_from_dn,
1615
get_ip_from_dn,
1716
get_node_from_dn,
@@ -117,27 +116,6 @@ def test_parse_capacity_tags():
117116
assert all(a == b for a, b in zip(res, ['fabric_pod_id:1']))
118117

119118

120-
def test_get_event_tags_from_dn():
121-
assert get_event_tags_from_dn(None) == []
122-
assert get_event_tags_from_dn("") == []
123-
res = get_event_tags_from_dn("aa/ap-AA/epg-BB/pod-1/node-2/ip-CC/cep-DD/BD-EE/aa")
124-
assert all(
125-
a == b
126-
for a, b in zip(
127-
res,
128-
[
129-
'node:2',
130-
'app:AA',
131-
'bd:EE',
132-
'mac:DD',
133-
'ip:CC',
134-
'epg:BB',
135-
'pod:1',
136-
],
137-
)
138-
)
139-
140-
141119
def test_get_hostname_from_dn():
142120
assert get_hostname_from_dn(None) is None
143121
assert get_hostname_from_dn("") is None

cisco_aci/tests/test_tenant.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@ def get_tenant_stats(self, tenant):
4141
{"other": {"attributes": {"attr": "3"}}},
4242
]
4343

44-
def get_tenant_events(self, tenant, page=0, page_size=15):
45-
return []
46-
4744
def get_epg_meta(self, tenant, app, epg):
4845
return [{"fvCEp": {"attributes": {"ip": "ip1", "mac": "mac1", "encap": "encap1"}}}]
4946

0 commit comments

Comments
 (0)