Skip to content

Commit 954f582

Browse files
committed
Thread safe tag clearing
1 parent 923f995 commit 954f582

2 files changed

Lines changed: 25 additions & 7 deletions

File tree

cs_misp_import/importer.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,12 @@ def remove_crowdstrike_tags(self):
212212
fallback="BEGIN DELETE",
213213
hide_cool_banners=self.import_settings["no_banners"]
214214
)
215-
# self.log.info(DELETE_BANNER)
216215
removed = 0
217-
self.log.info("Retrieving list of tags to remove from MISP instance")
216+
self.log.info("Retrieving list of tags to remove from MISP instance (may take several minutes).")
217+
lock = Lock()
218218
with concurrent.futures.ThreadPoolExecutor(self.misp_client.thread_count, thread_name_prefix="thread") as executor:
219219
futures = {
220-
executor.submit(self.misp_client.clear_tag, tg)
220+
executor.submit(self.misp_client.clear_tag, tg, lock)
221221
for tg in self.misp_client.search_tags("CrowdStrike:%", strict_tagname=True)
222222
}
223223
for _ in concurrent.futures.as_completed(futures):

cs_misp_import/threaded_misp.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,16 +101,34 @@ def get_cs_tags(self):
101101
return self.search_tags("CrowdStrike:%", strict_tagname=True)
102102

103103
def clear_tag(self, *args, **kwargs):
104-
# tags = self.search_tags("CrowdStrike:%")
105-
#for tag in kwargstags:
106-
tag = args[0]
107-
if tag:
104+
def perform_tag_clear():
108105
if not self.deleted_tag_count % 50 and self.deleted_tag_count:
109106
self.log.info("%i tags deleted", self.deleted_tag_count, extra={"key": ""})
110107
result = self._retry(self.delete_tag, tag, **kwargs)
111108
if "errors" not in result:
112109
self.deleted_tag_count += 1
113110

111+
thread_lock = kwargs.get("lock", None)
112+
if thread_lock:
113+
kwargs.pop("lock")
114+
tag = args[0]
115+
if tag:
116+
if thread_lock:
117+
with thread_lock:
118+
perform_tag_clear()
119+
# if not self.deleted_tag_count % 50 and self.deleted_tag_count:
120+
# self.log.info("%i tags deleted", self.deleted_tag_count, extra={"key": ""})
121+
# result = self._retry(self.delete_tag, tag, **kwargs)
122+
# if "errors" not in result:
123+
# self.deleted_tag_count += 1
124+
else:
125+
perform_tag_clear()
126+
# if not self.deleted_tag_count % 50 and self.deleted_tag_count:
127+
# self.log.info("%i tags deleted", self.deleted_tag_count, extra={"key": ""})
128+
# result = self._retry(self.delete_tag, tag, **kwargs)
129+
# if "errors" not in result:
130+
# self.deleted_tag_count += 1
131+
114132
return self.deleted_tag_count
115133
#self.log.info("%i tags deleted", self.deleted_tag_count)
116134

0 commit comments

Comments
 (0)