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.
51 lines
2.2 KiB
51 lines
2.2 KiB
# Copyright (C) 2005-2024 Splunk Inc. All Rights Reserved.
|
|
|
|
import time
|
|
import math
|
|
import SA_ITOA_app_common.splunklib.results as results
|
|
from itsi.itsi_utils import ITOAInterfaceUtils
|
|
from ITOA.setup_logging import logger
|
|
|
|
start_timestamp = None
|
|
|
|
|
|
def render_ui_message_required(session_key, app_name):
|
|
"""
|
|
We use ui_logger to surface migration messages on the UI
|
|
However, some migration operations take a long time without logging out any message, which causes UI 'hangs'
|
|
In this case, we detect if no logs being generated in the last 30
|
|
Returning True means we should surface some messages to the UI to let the user know the migration is till going on.
|
|
|
|
@type session_key: basestring
|
|
@param session_key: session key
|
|
|
|
@type app_name: basestring
|
|
@param app_name: app name, like 'SA-ITOA'
|
|
|
|
@rtype: bool
|
|
@return: whether a migration UI message should be rendered
|
|
"""
|
|
|
|
global start_timestamp
|
|
if start_timestamp is None:
|
|
# The collection itsi_migration_status is designed to have only one entry , hence the method get_migration_status_from_kv will return only one entry
|
|
entry = ITOAInterfaceUtils.get_migration_status_from_kv(session_key)
|
|
start_timestamp = entry.get('start_timestamp') if entry.get('is_running', False) else None
|
|
migration_elapsed_time = '-1d' if start_timestamp is None else '-{}h'.format(
|
|
int(math.ceil((time.time() - start_timestamp) / 3600)))
|
|
logger.info("Migration start time difference in days/hours from current time: %s", migration_elapsed_time)
|
|
service = ITOAInterfaceUtils.service_connection(session_key, app_name)
|
|
query = 'search index=_internal sourcetype=itsi_internal_log "[itsi.migration]" "UI" OR "Local failure skipped" ' \
|
|
'| eval time=_time | head 1| table time'
|
|
kwargs = {'earliest_time': migration_elapsed_time, 'latest_time': 'now'}
|
|
job = service.jobs.create(query, **kwargs)
|
|
while not job.is_done():
|
|
time.sleep(.2)
|
|
rr = results.ResultsReader(job.results())
|
|
for result in rr:
|
|
last_updated_time = result.get('time', None)
|
|
if last_updated_time:
|
|
if time.time() - float(last_updated_time) > 30:
|
|
return True
|
|
return False
|