コード例 #1
0
 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)
コード例 #2
0
 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)
コード例 #3
0
 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)
コード例 #4
0
 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)
コード例 #5
0
    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)
コード例 #6
0
 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"])