You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.2 KiB
60 lines
2.2 KiB
# Copyright (C) 2005-2024 Splunk Inc. All Rights Reserved.
|
|
|
|
from splunk.clilib.bundle_paths import make_splunkhome_path
|
|
|
|
from itsi.backfill import BackfillStatus
|
|
from itsi.backfill.itsi_backfill_requests import BackfillRequestCollection
|
|
|
|
MAX_FILTER_LENGTH = 500
|
|
|
|
|
|
def get_backfill_records(session_key, backfill_enabled_kpis):
|
|
'''
|
|
Get a list of backfill records from a list of KPI IDs
|
|
@param session_key
|
|
@param backfill_enabled_kpis: array of KPI IDs
|
|
@returns array of `BackfillRequestModel`s
|
|
'''
|
|
fetched_backfill_collection = []
|
|
if len(backfill_enabled_kpis) > 0:
|
|
backfill_collection = BackfillRequestCollection(session_key=session_key)
|
|
paginated_backfill_filter = [backfill_enabled_kpis[i:i + MAX_FILTER_LENGTH]
|
|
for i in range(0, len(backfill_enabled_kpis), MAX_FILTER_LENGTH)]
|
|
|
|
for subset_filter in paginated_backfill_filter:
|
|
kpifilter = {'$or': [{"kpi_id": x} for x in subset_filter]} if subset_filter else None
|
|
models = backfill_collection.fetch(filters=kpifilter)
|
|
fetched_backfill_collection.extend(models)
|
|
|
|
return fetched_backfill_collection
|
|
|
|
|
|
def cancel_or_delete_backfill_records(backfill_records, logger=None):
|
|
'''
|
|
If the backfill is done, delete that record, else send cancellation request
|
|
@param backfill_records: array of `BackfillRequestModel`s
|
|
@returns True if function completes without exceptions
|
|
'''
|
|
def log_exception(e, message):
|
|
if logger is not None:
|
|
logger.exception(message)
|
|
|
|
delete_list = []
|
|
cancel_list = []
|
|
for backfill_request in backfill_records:
|
|
if backfill_request.get('status') == BackfillStatus.STATUS_DONE:
|
|
delete_list.append(backfill_request)
|
|
else:
|
|
cancel_list.append(backfill_request)
|
|
for x in delete_list:
|
|
try:
|
|
x.delete()
|
|
except Exception as e:
|
|
log_exception(e, "Failed to delete backfill record.")
|
|
for x in cancel_list:
|
|
try:
|
|
x.update({'cancellation_flag': BackfillStatus.STATUS_CANCELLATION_REQUESTED})
|
|
except Exception as e:
|
|
log_exception(e, "Failed to update backfill record.")
|
|
return True
|