コード例 #1
0
 def setUp(self):
     self.data_service = FakeDataService()
     self.model_repository = FakeModelRepository()
     self.manager = AnalyzerManager([FakeAnalyzer, FakeAnalyzer],
                                    self.model_repository,
                                    self.data_service)
     FakeAnalyzer.stub = None
コード例 #2
0
class AnalyzerManagerTests(unittest.TestCase):
    def setUp(self):
        self.data_service = FakeDataService()
        self.model_repository = FakeModelRepository()
        self.manager = AnalyzerManager([FakeAnalyzer, FakeAnalyzer],
                                       self.model_repository,
                                       self.data_service)
        FakeAnalyzer.stub = None

    def test_process_review_event(self):
        request = ReviewEvent()
        request.configuration.update({"FakeAnalyzer": {"one": "two"}})
        request.commit_revision.base.internal_repository_url = "foo"
        request.commit_revision.base.reference_name = "refs/heads/master"
        request.commit_revision.base.hash = "00" * 20
        request.commit_revision.head.internal_repository_url = "bar"
        request.commit_revision.head.reference_name = "refs/heads/master"
        request.commit_revision.head.hash = "ff" * 20
        response = self.manager.process_review_event(request)
        self.assertIsInstance(response, EventResponse)
        self.assertEqual(response.analyzer_version,
                         "FakeAnalyzer/1 FakeAnalyzer/1")
        self.assertEqual(len(response.comments), 2)
        self.assertEqual(*response.comments)
        self.assertEqual(response.comments[0].text,
                         "%s|%s" % ("00" * 20, "ff" * 20))
        self.assertEqual(self.model_repository.get_calls,
                         [("FakeAnalyzer/1", FakeModel, "foo")] * 2)
        self.assertEqual(FakeAnalyzer.instance.one, "two")
        self.assertEqual(FakeAnalyzer.stub, "XXX")

    def test_process_push_event(self):
        request = PushEvent()
        request.commit_revision.head.internal_repository_url = "wow"
        request.commit_revision.head.reference_name = "refs/heads/master"
        request.commit_revision.head.hash = "80" * 20
        response = self.manager.process_push_event(request)
        self.assertIsInstance(response, EventResponse)
        self.assertEqual(response.analyzer_version,
                         "FakeAnalyzer/1 FakeAnalyzer/1")
        self.assertEqual(len(response.comments), 0)
        self.assertEqual(len(self.model_repository.set_calls), 2)
        self.assertEqual(self.model_repository.set_calls[0][:2],
                         ("FakeAnalyzer/1", "wow"))
        self.assertIsInstance(self.model_repository.set_calls[0][2], FakeModel)
        self.assertEqual(self.model_repository.set_calls[1][:2],
                         ("FakeAnalyzer/1", "wow"))
        self.assertIsInstance(self.model_repository.set_calls[1][2], FakeModel)
        self.assertEqual(FakeAnalyzer.stub, "XXX")
コード例 #3
0
ファイル: cmdline.py プロジェクト: vmarkovtsev/lookout-sdk-ml
def run_analyzers(args: argparse.Namespace):
    """
    Launch the service with the specified analyzers. Blocks until a KeyboardInterrupt.

    :param args: Parsed command line arguments.
    :return: None
    """
    log = logging.getLogger("run")
    model_repository = create_model_repo_from_args(args)
    log.info("Created %s", model_repository)
    if args.request_server == "auto":
        data_request_address = "%s:10301" % args.server.split(":")[0]
    else:
        data_request_address = args.request_server
    data_service = DataService(data_request_address)
    log.info("Created %s", data_service)
    sys.path.append(os.getcwd())
    manager = AnalyzerManager(
        analyzers=[
            importlib.import_module(a).analyzer_class for a in args.analyzer
        ],
        model_repository=model_repository,
        data_service=data_service,
    )
    sys.path = sys.path[:-1]
    log.info("Created %s", manager)
    listener = EventListener(address=args.server,
                             handlers=manager,
                             n_workers=args.workers)
    log.info("Created %s", listener)
    listener.start()
    log.info("Listening %s", args.server)
    listener.block()
    model_repository.shutdown()
    data_service.shutdown()
コード例 #4
0
 def __enter__(self) -> "AnalyzerContextManager":
     self.manager = AnalyzerManager(
         analyzers=self.analyzer,
         model_repository=self.model_repository,
         data_service=self.data_service,
     )
     self.listener = EventListener(address="0.0.0.0:%d" % self.port,
                                   handlers=self.manager,
                                   n_workers=self.args.workers)
     self.listener.start()
     return self
コード例 #5
0
 def __enter__(self) -> "AnalyzerContextManager":
     self.model_repository = create_model_repo_from_args(
         self._sql_alchemy_model_args)
     if self.init:
         self.model_repository.init()
     self.data_service = DataService(self.data_request_address)
     self.manager = AnalyzerManager(analyzers=[self.analyzer],
                                    model_repository=self.model_repository,
                                    data_service=self.data_service)
     self.listener = EventListener(address="0.0.0.0:%d" % self.port,
                                   handlers=self.manager,
                                   n_workers=1)
     self.listener.start()
     return self
コード例 #6
0
 def __enter__(self) -> "AnalyzerContextManager":
     """
     Create the context and run the events listener.
     """
     self.model_repository = create_model_repo_from_args(self._sql_alchemy_model_args)
     if self.init:
         self.model_repository.init()
     self.data_service = DataService(self.data_request_address)
     self.manager = AnalyzerManager(analyzers=[self.analyzer],
                                    model_repository=self.model_repository,
                                    data_service=self.data_service)
     if not check_port_free(self._port):
         self._port = find_port()
     self.listener = EventListener(address="0.0.0.0:%d" % self._port, handlers=self.manager,
                                   n_workers=1)
     self.listener.start()
     self._lookout_sdk = LookoutSDK()
     return self
コード例 #7
0
class AnalyzerManagerTests(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        slogging.setup(logging.DEBUG, False)

    def setUp(self):
        self.data_service = FakeDataService()
        self.model_repository = FakeModelRepository()
        self.manager = AnalyzerManager(
            [FakeAnalyzer, FakeAnalyzer, FakeDummyAnalyzer],
            self.model_repository, self.data_service)
        FakeAnalyzer.stub = None
        FakeDummyAnalyzer.skip_train = False
        FakeAnalyzer.service = None

    def test_process_review_event(self):
        request = ReviewEvent()
        request.configuration.update(
            {"fake.analyzer.FakeAnalyzer": {
                "one": "two"
            }})
        request.commit_revision.base.internal_repository_url = "foo"
        request.commit_revision.base.reference_name = "refs/heads/master"
        request.commit_revision.base.hash = "00" * 20
        request.commit_revision.head.internal_repository_url = "bar"
        request.commit_revision.head.reference_name = "refs/heads/master"
        request.commit_revision.head.hash = "ff" * 20
        response = self.manager.process_review_event(request)
        self.assertIsInstance(response, EventResponse)
        self.assertEqual(
            response.analyzer_version, "fake.analyzer.FakeAnalyzer/1 "
            "fake.analyzer.FakeAnalyzer/1 "
            "fake.analyzer.FakeDummyAnalyzer/1")
        self.assertEqual(len(response.comments), 2)
        self.assertEqual(*response.comments)
        self.assertEqual(response.comments[0].text,
                         "%s|%s" % ("00" * 20, "ff" * 20))
        self.assertEqual(self.model_repository.get_calls,
                         [("fake.analyzer.FakeAnalyzer/1", FakeModel, "foo")] *
                         2)
        self.assertEqual(FakeAnalyzer.instance.config["one"], "two")
        self.assertEqual(FakeAnalyzer.service.get_data(), "XXX")
        self.assertTrue(FakeDummyAnalyzer.instance.analyzed)

    def test_process_push_event(self):
        request = PushEvent()
        request.commit_revision.head.internal_repository_url = "wow"
        request.commit_revision.head.reference_name = "refs/heads/master"
        request.commit_revision.head.hash = "80" * 20
        response = self.manager.process_push_event(request)
        self.assertIsInstance(response, EventResponse)
        self.assertEqual(
            response.analyzer_version, "fake.analyzer.FakeAnalyzer/1 "
            "fake.analyzer.FakeAnalyzer/1 "
            "fake.analyzer.FakeDummyAnalyzer/1")
        self.assertEqual(len(response.comments), 0)
        self.assertEqual(len(self.model_repository.set_calls), 2)
        self.assertEqual(self.model_repository.set_calls[0][:2],
                         ("fake.analyzer.FakeAnalyzer/1", "wow"))
        self.assertIsInstance(self.model_repository.set_calls[0][2], FakeModel)
        self.assertEqual(self.model_repository.set_calls[1][:2],
                         ("fake.analyzer.FakeAnalyzer/1", "wow"))
        self.assertIsInstance(self.model_repository.set_calls[1][2], FakeModel)
        self.assertEqual(FakeAnalyzer.service.get_bblfsh(), "YYY")
        self.assertFalse(FakeDummyAnalyzer.trained)

    def test_process_push_event_skip(self):
        FakeAnalyzer.skip_train = True
        request = PushEvent()
        request.commit_revision.head.internal_repository_url = "wow"
        request.commit_revision.head.reference_name = "refs/heads/master"
        request.commit_revision.head.hash = "80" * 20
        response = self.manager.process_push_event(request)
        self.assertIsInstance(response, EventResponse)
        self.assertEqual(
            response.analyzer_version, "fake.analyzer.FakeAnalyzer/1 "
            "fake.analyzer.FakeAnalyzer/1 "
            "fake.analyzer.FakeDummyAnalyzer/1")
        self.assertEqual(len(response.comments), 0)
        self.assertEqual(len(self.model_repository.get_calls), 2)
        self.assertEqual(len(self.model_repository.set_calls), 0)
        self.assertIsNone(FakeAnalyzer.service)