summaryrefslogtreecommitdiffstats
path: root/compass-tasks/actions/update_progress.py
diff options
context:
space:
mode:
Diffstat (limited to 'compass-tasks/actions/update_progress.py')
-rw-r--r--compass-tasks/actions/update_progress.py298
1 files changed, 0 insertions, 298 deletions
diff --git a/compass-tasks/actions/update_progress.py b/compass-tasks/actions/update_progress.py
deleted file mode 100644
index 67a9963..0000000
--- a/compass-tasks/actions/update_progress.py
+++ /dev/null
@@ -1,298 +0,0 @@
-# Copyright 2014 Huawei Technologies Co. Ltd
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Module to update status and installing progress of the given cluster.
-
- .. moduleauthor:: Xiaodong Wang <xiaodongwang@huawei.com>
-"""
-import logging
-
-from compass.actions import util
-from compass.db.api import adapter_holder as adapter_api
-from compass.db.api import cluster as cluster_api
-from compass.db.api import host as host_api
-from compass.db.api import user as user_api
-from compass.log_analyzor import progress_calculator
-from compass.utils import setting_wrapper as setting
-
-
-def update_progress():
- """Update status and installing progress of the given cluster.
-
- :param cluster_hosts: clusters and hosts in each cluster to update.
- :type cluster_hosts: dict of int or str to list of int or str
-
- .. note::
- The function should be called out of the database session scope.
- In the function, it will update the database cluster_state and
- host_state table for the deploying cluster and hosts.
-
- The function will also query log_progressing_history table to get
- the lastest installing progress and the position of log it has
- processed in the last run. The function uses these information to
- avoid recalculate the progress from the beginning of the log file.
- After the progress got updated, these information will be stored back
- to the log_progressing_history for next time run.
- """
- with util.lock('log_progressing', timeout=60, blocking=False) as lock:
- if not lock:
- logging.error(
- 'failed to acquire lock to calculate installation progress'
- )
- return
-
- logging.info('update installing progress')
-
- user = user_api.get_user_object(setting.COMPASS_ADMIN_EMAIL)
- hosts = host_api.list_hosts(user=user)
- host_mapping = {}
- for host in hosts:
- if 'id' not in host:
- logging.error('id is not in host %s', host)
- continue
- host_id = host['id']
- if 'os_name' not in host:
- logging.error('os_name is not in host %s', host)
- continue
- if 'os_installer' not in host:
- logging.error('os_installer is not in host %s', host)
- continue
- host_dirname = setting.HOST_INSTALLATION_LOGDIR_NAME
- if host_dirname not in host:
- logging.error(
- '%s is not in host %s', host_dirname, host
- )
- continue
- host_state = host_api.get_host_state(host_id, user=user)
- if 'state' not in host_state:
- logging.error('state is not in host state %s', host_state)
- continue
- if host_state['state'] == 'INSTALLING':
- host_log_histories = host_api.get_host_log_histories(
- host_id, user=user
- )
- host_log_history_mapping = {}
- for host_log_history in host_log_histories:
- if 'filename' not in host_log_history:
- logging.error(
- 'filename is not in host log history %s',
- host_log_history
- )
- continue
- host_log_history_mapping[
- host_log_history['filename']
- ] = host_log_history
- host_mapping[host_id] = (
- host, host_state, host_log_history_mapping
- )
- else:
- logging.info(
- 'ignore host state %s since it is not in installing',
- host_state
- )
- adapters = adapter_api.list_adapters(user=user)
- adapter_mapping = {}
- for adapter in adapters:
- if 'id' not in adapter:
- logging.error(
- 'id not in adapter %s', adapter
- )
- continue
- if 'package_installer' not in adapter:
- logging.info(
- 'package_installer not in adapter %s', adapter
- )
- continue
- adapter_id = adapter['id']
- adapter_mapping[adapter_id] = adapter
- clusters = cluster_api.list_clusters(user=user)
- cluster_mapping = {}
- for cluster in clusters:
- if 'id' not in cluster:
- logging.error('id not in cluster %s', cluster)
- continue
- cluster_id = cluster['id']
- if 'adapter_id' not in cluster:
- logging.error(
- 'adapter_id not in cluster %s',
- cluster
- )
- continue
- cluster_state = cluster_api.get_cluster_state(
- cluster_id,
- user=user
- )
- if 'state' not in cluster_state:
- logging.error('state not in cluster state %s', cluster_state)
- continue
- cluster_mapping[cluster_id] = (cluster, cluster_state)
- clusterhosts = cluster_api.list_clusterhosts(user=user)
- clusterhost_mapping = {}
- for clusterhost in clusterhosts:
- if 'clusterhost_id' not in clusterhost:
- logging.error(
- 'clusterhost_id not in clusterhost %s',
- clusterhost
- )
- continue
- clusterhost_id = clusterhost['clusterhost_id']
- if 'cluster_id' not in clusterhost:
- logging.error(
- 'cluster_id not in clusterhost %s',
- clusterhost
- )
- continue
- cluster_id = clusterhost['cluster_id']
- if cluster_id not in cluster_mapping:
- logging.info(
- 'ignore clusterhost %s '
- 'since the cluster_id '
- 'is not in cluster_mapping %s',
- clusterhost, cluster_mapping
- )
- continue
- cluster, _ = cluster_mapping[cluster_id]
- if 'flavor_name' not in cluster:
- logging.error(
- 'flavor_name is not in clusterhost %s related cluster',
- clusterhost
- )
- continue
- clusterhost_dirname = setting.CLUSTERHOST_INATALLATION_LOGDIR_NAME
- if clusterhost_dirname not in clusterhost:
- logging.error(
- '%s is not in clusterhost %s',
- clusterhost_dirname, clusterhost
- )
- continue
- adapter_id = cluster['adapter_id']
- if adapter_id not in adapter_mapping:
- logging.info(
- 'ignore clusterhost %s '
- 'since the adapter_id %s '
- 'is not in adaper_mapping %s',
- clusterhost, adapter_id, adapter_mapping
- )
- continue
- adapter = adapter_mapping[adapter_id]
- if 'package_installer' not in adapter:
- logging.info(
- 'ignore clusterhost %s '
- 'since the package_installer is not define '
- 'in adapter %s',
- clusterhost, adapter
- )
- continue
- package_installer = adapter['package_installer']
- clusterhost['package_installer'] = package_installer
- clusterhost['adapter_name'] = adapter['name']
- clusterhost_state = cluster_api.get_clusterhost_self_state(
- clusterhost_id, user=user
- )
- if 'state' not in clusterhost_state:
- logging.error(
- 'state not in clusterhost_state %s',
- clusterhost_state
- )
- continue
- if clusterhost_state['state'] == 'INSTALLING':
- clusterhost_log_histories = (
- cluster_api.get_clusterhost_log_histories(
- clusterhost_id, user=user
- )
- )
- clusterhost_log_history_mapping = {}
- for clusterhost_log_history in clusterhost_log_histories:
- if 'filename' not in clusterhost_log_history:
- logging.error(
- 'filename not in clusterhost_log_history %s',
- clusterhost_log_history
- )
- continue
- clusterhost_log_history_mapping[
- clusterhost_log_history['filename']
- ] = clusterhost_log_history
- clusterhost_mapping[clusterhost_id] = (
- clusterhost, clusterhost_state,
- clusterhost_log_history_mapping
- )
- else:
- logging.info(
- 'ignore clusterhost state %s '
- 'since it is not in installing',
- clusterhost_state
- )
-
- progress_calculator.update_host_progress(
- host_mapping)
- for host_id, (host, host_state, host_log_history_mapping) in (
- host_mapping.items()
- ):
- host_api.update_host_state(
- host_id, user=user,
- percentage=host_state.get('percentage', 0),
- message=host_state.get('message', ''),
- severity=host_state.get('severity', 'INFO')
- )
- for filename, host_log_history in (
- host_log_history_mapping.items()
- ):
- host_api.add_host_log_history(
- host_id, filename=filename, user=user,
- position=host_log_history.get('position', 0),
- percentage=host_log_history.get('percentage', 0),
- partial_line=host_log_history.get('partial_line', ''),
- message=host_log_history.get('message', ''),
- severity=host_log_history.get('severity', 'INFO'),
- line_matcher_name=host_log_history.get(
- 'line_matcher_name', 'start'
- )
- )
- progress_calculator.update_clusterhost_progress(
- clusterhost_mapping)
- for (
- clusterhost_id,
- (clusterhost, clusterhost_state, clusterhost_log_history_mapping)
- ) in (
- clusterhost_mapping.items()
- ):
- cluster_api.update_clusterhost_state(
- clusterhost_id, user=user,
- percentage=clusterhost_state.get('percentage', 0),
- message=clusterhost_state.get('message', ''),
- severity=clusterhost_state.get('severity', 'INFO')
- )
- for filename, clusterhost_log_history in (
- clusterhost_log_history_mapping.items()
- ):
- cluster_api.add_clusterhost_log_history(
- clusterhost_id, user=user, filename=filename,
- position=clusterhost_log_history.get('position', 0),
- percentage=clusterhost_log_history.get('percentage', 0),
- partial_line=clusterhost_log_history.get(
- 'partial_line', ''),
- message=clusterhost_log_history.get('message', ''),
- severity=clusterhost_log_history.get('severity', 'INFO'),
- line_matcher_name=(
- clusterhost_log_history.get(
- 'line_matcher_name', 'start'
- )
- )
- )
- progress_calculator.update_cluster_progress(
- cluster_mapping)
- for cluster_id, (cluster, cluster_state) in cluster_mapping.items():
- cluster_api.update_cluster_state(
- cluster_id, user=user
- )