def test_full_data_check(self): print("Boost model folder: ", self.boost_model_folder) decision_maker = BoostingDecisionMaker(self.boost_model_folder) boost_model_results = self.get_fixture(self.boost_model_results) tests = [ { "elastic_results": [(self.get_fixture(self.log_message), self.get_fixture(self.one_hit_search_rs_explained))], "config": TestBoostingModel.get_default_config(), }, { "elastic_results": [(self.get_fixture(self.log_message), self.get_fixture(self.two_hits_search_rs_explained))], "config": TestBoostingModel.get_default_config(), }, { "elastic_results": [(self.get_fixture(self.log_message), self.get_fixture(self.two_hits_search_rs_explained)), (self.get_fixture(self.log_message), self.get_fixture(self.one_hit_search_rs_explained))], "config": TestBoostingModel.get_default_config(), }, { "elastic_results": [(self.get_fixture(self.log_message_only_small_logs), self.get_fixture(self.two_hits_search_rs_small_logs))], "config": TestBoostingModel.get_default_config(), }, ] for idx, test in enumerate(tests): _boosting_featurizer = BoostingFeaturizer( test["elastic_results"], test["config"], decision_maker.get_feature_ids()) with sure.ensure('Error in the test case number: {0}', idx): gathered_data, issue_type_names = _boosting_featurizer.gather_features_info( ) gathered_data.should.equal(boost_model_results[str(idx)][0], epsilon=self.epsilon) predict_label, predict_probability = decision_maker.predict( gathered_data) predict_label.tolist().should.equal( boost_model_results[str(idx)][1], epsilon=self.epsilon) predict_probability.tolist().should.equal( boost_model_results[str(idx)][2], epsilon=self.epsilon)
def test_normalize_results(self): tests = [ { "elastic_results": [], "config": TestBoostingFeaturizer.get_default_config(), "result": [], }, { "elastic_results": [(self.get_fixture(self.log_message), self.get_fixture(self.one_hit_search_rs_explained))], "config": TestBoostingFeaturizer.get_default_config(), "result": [[{ "_score": 158.08437, "normalized_score": 1.0, }]], }, { "elastic_results": [(self.get_fixture(self.log_message), self.get_fixture(self.two_hits_search_rs_explained))], "config": TestBoostingFeaturizer.get_default_config(), "result": [[ { "_score": 158.08437, "normalized_score": 1.0, }, { "_score": 77.53298, "normalized_score": 0.4904, }, ]], }, ] for idx, test in enumerate(tests): with sure.ensure('Error in the test case number: {0}', idx): _boosting_featurizer = BoostingFeaturizer( test["elastic_results"], test["config"], []) _boosting_featurizer.all_results.should.have.length_of( len(test["result"])) for i in range(len(test["result"])): for j in range(len(test["result"][i])): for field in test["result"][i][j]: elastic_res = _boosting_featurizer.all_results[i][ 1][j] elastic_res[field].should.equal( test["result"][i][j][field], epsilon=self.epsilon)
def test_normalize_results(self): tests = [ { "elastic_results": [], "config": TestBoostingFeaturizer.get_default_config(), "result": [], }, { "elastic_results": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.one_hit_search_rs_explained, to_json=True))], "config": TestBoostingFeaturizer.get_default_config(), "result": [[{"_score": 158.08437, "normalized_score": 1.0, }]], }, { "elastic_results": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.two_hits_search_rs_explained, to_json=True))], "config": TestBoostingFeaturizer.get_default_config(), "result": [[{"_score": 158.08437, "normalized_score": 1.0, }, {"_score": 77.53298, "normalized_score": 0.4904, }, ]], }, ] weight_log_sim = weighted_similarity_calculator.\ WeightedSimilarityCalculator(folder=self.weights_folder) for idx, test in enumerate(tests): with sure.ensure('Error in the test case number: {0}', idx): _boosting_featurizer = BoostingFeaturizer( test["elastic_results"], test["config"], [], weighted_log_similarity_calculator=weight_log_sim) _boosting_featurizer.all_results.should.have.length_of(len(test["result"])) for i in range(len(test["result"])): for j in range(len(test["result"][i])): for field in test["result"][i][j]: elastic_res = _boosting_featurizer.all_results[i][1][j] elastic_res[field].should.equal(test["result"][i][j][field], epsilon=self.epsilon)
def test_find_most_relevant_by_type(self): tests = [ { "elastic_results": [], "config": TestBoostingFeaturizer.get_default_config(), "result": {}, }, { "elastic_results": [(self.get_fixture(self.log_message), self.get_fixture(self.one_hit_search_rs_explained))], "config": TestBoostingFeaturizer.get_default_config(), "result": { "AB001": { "mrHit": { "_score": 158.08437, "_id": "1" }, "compared_log": self.get_fixture(self.log_message), "score": 1.0, }, } }, { "elastic_results": [(self.get_fixture(self.log_message), self.get_fixture(self.two_hits_search_rs_explained))], "config": TestBoostingFeaturizer.get_default_config(), "result": { "AB001": { "mrHit": { "_score": 158.08437, "_id": "1" }, "compared_log": self.get_fixture(self.log_message), "score": 0.6709, }, "PB001": { "mrHit": { "_score": 77.53298, "_id": "2" }, "compared_log": self.get_fixture(self.log_message), "score": 0.3291, }, } }, { "elastic_results": [(self.get_fixture(self.log_message), self.get_fixture(self.two_hits_search_rs_explained)), (self.get_fixture(self.log_message), self.get_fixture(self.one_hit_search_rs_explained))], "config": TestBoostingFeaturizer.get_default_config(), "result": { "AB001": { "mrHit": { "_score": 158.08437, "_id": "1" }, "compared_log": self.get_fixture(self.log_message), "score": 0.8031, }, "PB001": { "mrHit": { "_score": 77.53298, "_id": "2" }, "compared_log": self.get_fixture(self.log_message), "score": 0.1969, }, } }, ] for idx, test in enumerate(tests): with sure.ensure('Error in the test case number: {0}', idx): _boosting_featurizer = BoostingFeaturizer( test["elastic_results"], test["config"], []) scores_by_issue_type = _boosting_featurizer.find_most_relevant_by_type( ) scores_by_issue_type.should.have.length_of(len(test["result"])) for issue_type in test["result"]: scores_by_issue_type.keys().should.contain(issue_type) elastic_res = scores_by_issue_type[issue_type] for field in test["result"][issue_type]: if type(test["result"][issue_type][field]) != dict: elastic_res[field].should.equal( test["result"][issue_type][field], epsilon=self.epsilon) else: for field_dict in test["result"][issue_type][ field]: result_field_dict = test["result"][issue_type][ field][field_dict] elastic_res[field][field_dict].should.equal( result_field_dict, epsilon=self.epsilon)
def test_full_data_check(self): print("Boost model folder : ", self.boost_model_folder) print("Weights model folder : ", self.weights_folder) print("Global defect type model folder : ", self.global_defect_type_model_folder) decision_maker = BoostingDecisionMaker(folder=self.boost_model_folder) boost_model_results = utils.get_fixture(self.boost_model_results, to_json=True) tests = [] for log_lines, filter_fields, _decision_maker in [ (-1, ["detected_message", "stacktrace"], decision_maker), (2, ["message"], decision_maker) ]: tests.extend([ { "elastic_results": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.one_hit_search_rs_explained, to_json=True))], "config": self.get_default_config(number_of_log_lines=log_lines, filter_fields=filter_fields), "decision_maker": _decision_maker }, { "elastic_results": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.two_hits_search_rs_explained, to_json=True))], "config": self.get_default_config(number_of_log_lines=log_lines, filter_fields=filter_fields), "decision_maker": _decision_maker }, { "elastic_results": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.two_hits_search_rs_explained, to_json=True)), (utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.one_hit_search_rs_explained, to_json=True))], "config": self.get_default_config(number_of_log_lines=log_lines, filter_fields=filter_fields), "decision_maker": _decision_maker }, { "elastic_results": [(utils.get_fixture(self.log_message_only_small_logs, to_json=True), utils.get_fixture(self.two_hits_search_rs_small_logs, to_json=True))], "config": self.get_default_config(number_of_log_lines=log_lines, filter_fields=filter_fields), "decision_maker": _decision_maker }, ]) for idx, test in enumerate(tests): feature_ids = test["decision_maker"].get_feature_ids() weight_log_sim = None if self.weights_folder.strip(): weight_log_sim = weighted_similarity_calculator.\ WeightedSimilarityCalculator(folder=self.weights_folder) _boosting_featurizer = BoostingFeaturizer( test["elastic_results"], test["config"], feature_ids, weighted_log_similarity_calculator=weight_log_sim) if self.global_defect_type_model_folder.strip(): _boosting_featurizer.set_defect_type_model( defect_type_model.DefectTypeModel( folder=self.global_defect_type_model_folder)) with sure.ensure('Error in the test case number: {0}', idx): gathered_data, issue_type_names = _boosting_featurizer.gather_features_info( ) gathered_data.should.equal(boost_model_results[str(idx)][0], epsilon=self.epsilon) predict_label, predict_probability = test[ "decision_maker"].predict(gathered_data) predict_label.tolist().should.equal( boost_model_results[str(idx)][1], epsilon=self.epsilon) predict_probability.tolist().should.equal( boost_model_results[str(idx)][2], epsilon=self.epsilon)
def test_filter_by_min_should_match(self): tests = [ { "elastic_results": [], "config": TestBoostingFeaturizer.get_default_config(filter_fields=[]), "result": [], }, { "elastic_results": [], "config": TestBoostingFeaturizer.get_default_config(filter_fields=[ "detected_message", "stacktrace"]), "result": [], }, { "elastic_results": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.one_hit_search_rs_explained, to_json=True))], "config": TestBoostingFeaturizer.get_default_config(filter_fields=[ "detected_message", "stacktrace"]), "result": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.one_hit_search_rs_explained, to_json=True))], }, { "elastic_results": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.one_hit_search_rs_explained, to_json=True))], "config": TestBoostingFeaturizer.get_default_config(filter_fields=[ "message"]), "result": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.one_hit_search_rs_explained, to_json=True))], }, { "elastic_results": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.one_hit_search_rs_explained, to_json=True)), (utils.get_fixture(self.log_message_wo_stacktrace, to_json=True), utils.get_fixture( self.one_hit_search_rs_explained_wo_stacktrace, to_json=True))], "config": TestBoostingFeaturizer.get_default_config(filter_fields=[ "message"]), "result": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.one_hit_search_rs_explained, to_json=True)), (utils.get_fixture(self.log_message_wo_stacktrace, to_json=True), utils.get_fixture( self.one_hit_search_rs_explained_wo_stacktrace, to_json=True))] }, { "elastic_results": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.one_hit_search_rs_explained, to_json=True)), (utils.get_fixture(self.log_message_wo_stacktrace, to_json=True), utils.get_fixture( self.one_hit_search_rs_explained_wo_stacktrace, to_json=True))], "config": TestBoostingFeaturizer.get_default_config(filter_fields=[ "detected_message", "stacktrace"]), "result": [(utils.get_fixture(self.log_message, to_json=True), utils.get_fixture(self.one_hit_search_rs_explained, to_json=True)), (utils.get_fixture(self.log_message_wo_stacktrace, to_json=True), utils.get_fixture( self.one_hit_search_rs_explained_wo_stacktrace, to_json=True))] }, { "elastic_results": [(utils.get_fixture(self.log_message_only_small_logs, to_json=True), utils.get_fixture(self.one_hit_search_rs_small_logs, to_json=True))], "config": TestBoostingFeaturizer.get_default_config(filter_fields=[ "detected_message", "stacktrace"]), "result": [] }, { "elastic_results": [(utils.get_fixture(self.log_message_only_small_logs, to_json=True), utils.get_fixture(self.two_hits_search_rs_small_logs, to_json=True))], "config": TestBoostingFeaturizer.get_default_config(filter_fields=[ "detected_message", "stacktrace"]), "result": [(utils.get_fixture(self.log_message_only_small_logs, to_json=True), utils.get_fixture(self.two_hits_search_rs_small_logs, to_json=True))] }, ] weight_log_sim = weighted_similarity_calculator.\ WeightedSimilarityCalculator(folder=self.weights_folder) for idx, test in enumerate(tests): with sure.ensure('Error in the test case number: {0}', idx): _boosting_featurizer = BoostingFeaturizer( test["elastic_results"], test["config"], [], weighted_log_similarity_calculator=weight_log_sim) all_results = test["elastic_results"] for field in test["config"]["filter_min_should_match"]: all_results = _boosting_featurizer.filter_by_min_should_match(all_results, field=field) all_results.should.have.length_of(len(test["result"])) for idx, (log, hits) in enumerate(all_results): log["_id"].should.equal(test["result"][idx][0]["_id"]) for i, hit in enumerate(hits["hits"]["hits"]): hit["_id"].should.equal(test["result"][idx][1]["hits"]["hits"][i]["_id"])