From 8120b2583c459c85116d69211038e0110d71e5b7 Mon Sep 17 00:00:00 2001 From: Harry Huang Date: Wed, 1 Nov 2017 15:05:30 +0800 Subject: Add compass-tasks Registered tasks and MQ modules for Compass Change-Id: Id1569a61fe53357d53448478d5ba42cb1f386bc6 Signed-off-by: Harry Huang --- compass-tasks/log_analyzor/adapter_matcher.py | 126 ++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 compass-tasks/log_analyzor/adapter_matcher.py (limited to 'compass-tasks/log_analyzor/adapter_matcher.py') diff --git a/compass-tasks/log_analyzor/adapter_matcher.py b/compass-tasks/log_analyzor/adapter_matcher.py new file mode 100644 index 0000000..8630e01 --- /dev/null +++ b/compass-tasks/log_analyzor/adapter_matcher.py @@ -0,0 +1,126 @@ +# 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 provider installing progress calculation for the adapter. + + .. moduleauthor:: Xiaodong Wang +""" +import logging +import re + + +class AdapterItemMatcher(object): + """Progress matcher for the os installing or package installing.""" + + def __init__(self, file_matchers): + self.file_matchers_ = file_matchers + + def __repr__(self): + return '%r[file_matchers: %r]' % ( + self.__class__.__name__, self.file_matchers_ + ) + + def update_progress( + self, file_reader_factory, name, state, log_history_mapping + ): + """Update progress. + + :param name: the fullname of the installing host. + :type name: str + :param progress: Progress instance to update. + """ + for file_matcher in self.file_matchers_: + filename = file_matcher.filename_ + if filename not in log_history_mapping: + log_history_mapping[filename] = { + 'filename': filename, + 'partial_line': '', + 'position': 0, + 'line_matcher_name': 'start', + 'percentage': 0.0, + 'message': '', + 'severity': 'INFO' + } + log_history = log_history_mapping[filename] + file_matcher.update_progress( + file_reader_factory, name, state, log_history + ) + + +class OSMatcher(object): + """Progress matcher for os installer.""" + + def __init__( + self, os_installer_name, + os_pattern, item_matcher, + file_reader_factory + ): + self.name_ = re.compile(os_installer_name) + self.os_regex_ = re.compile(os_pattern) + self.matcher_ = item_matcher + self.file_reader_factory_ = file_reader_factory + + def __repr__(self): + return '%r[name:%r, os_pattern:%r, matcher:%r]' % ( + self.__class__.__name__, self.name_.pattern, + self.os_regex_.pattern, self.matcher_) + + def match(self, os_installer_name, os_name): + """Check if the os matcher is acceptable.""" + if os_name is None: + return False + else: + return all([ + self.name_.match(os_installer_name), + self.os_regex_.match(os_name) + ]) + + def update_progress(self, name, state, log_history_mapping): + """Update progress.""" + self.matcher_.update_progress( + self.file_reader_factory_, name, state, log_history_mapping) + + +class PackageMatcher(object): + """Progress matcher for package installer.""" + + def __init__( + self, package_installer_name, adapter_pattern, + item_matcher, file_reader_factory + ): + self.name_ = re.compile(package_installer_name) + self.adapter_regex_ = re.compile(adapter_pattern) + self.matcher_ = item_matcher + self.file_reader_factory_ = file_reader_factory + + def __repr__(self): + return '%s[name:%s, adapter_pattern:%s, matcher:%s]' % ( + self.__class__.__name__, self.name_.pattern, + self.adapter_regex_.pattern, self.matcher_) + + def match(self, package_installer_name, adapter_name): + """Check if the package matcher is acceptable.""" + if package_installer_name is None: + return False + else: + return all([ + self.name_.match(package_installer_name), + self.adapter_regex_.match(adapter_name) + ]) + + def update_progress(self, name, state, log_history_mapping): + """Update progress.""" + self.matcher_.update_progress( + self.file_reader_factory_, name, state, log_history_mapping + ) -- cgit 1.2.3-korg