예제 #1
0
 def process_review_event(self, request: ReviewEvent) -> EventResponse:
     base_ptr = ReferencePointer.from_pb(request.commit_revision.base)
     head_ptr = ReferencePointer.from_pb(request.commit_revision.head)
     response = EventResponse()
     response.analyzer_version = self.version
     comments = []
     for analyzer in self._analyzers:
         try:
             mycfg = dict(request.configuration[analyzer.__name__])
         except (KeyError, ValueError):
             mycfg = {}
         model, cache_miss = self._model_repository.get(
             self._model_id(analyzer), analyzer.model_type, base_ptr.url)
         if cache_miss:
             self._log.info("cache miss: %s", analyzer.__name__)
         if model is None:
             self._log.info("training: %s", analyzer.__name__)
             model = analyzer.train(base_ptr, mycfg, self._data_service.get())
             self._model_repository.set(self._model_id(analyzer), base_ptr.url, model)
         self._log.debug("running %s", analyzer.__name__)
         results = analyzer(model, head_ptr.url, mycfg).analyze(
             base_ptr, head_ptr, self._data_service.get())
         self._log.info("%s: %d comments", analyzer.__name__, len(results))
         comments.extend(results)
     response.comments.extend(comments)
     return response
예제 #2
0
 def process_push_event(self,
                        request: PushEvent) -> EventResponse:  # noqa: D401
     """
     Callback for push events invoked by EventListener.
     """
     ptr = ReferencePointer.from_pb(request.commit_revision.head)
     data_service = self._data_service
     for analyzer in self._analyzers:
         if analyzer.model_type == DummyAnalyzerModel:
             continue
         try:
             mycfg = self._protobuf_struct_to_dict(
                 request.configuration[analyzer.name])
         except (KeyError, ValueError):
             mycfg = {}
         model = self._get_model(analyzer, ptr.url)
         if model is not None:
             must_train = analyzer.check_training_required(
                 model, ptr, mycfg, data_service)
             if not must_train:
                 self._log.info("skipped training %s", analyzer.name)
                 continue
         self._log.debug("training %s", analyzer.name)
         record_event("%s.train" % analyzer.name, 1)
         model = analyzer.train(ptr, mycfg, data_service)
         self._model_repository.set(self._model_id(analyzer), ptr.url,
                                    model)
     response = EventResponse()
     response.analyzer_version = self.version
     return response
예제 #3
0
 def process_push_event(self, request: PushEvent) -> EventResponse:
     ptr = ReferencePointer.from_pb(request.commit_revision.head)
     for analyzer in self._analyzers:
         self._log.debug("training %s", analyzer.__name__)
         try:
             mycfg = dict(request.configuration[analyzer.__name__])
         except (KeyError, ValueError):
             mycfg = {}
         model = analyzer.train(ptr, mycfg, self._data_service.get())
         self._model_repository.set(self._model_id(analyzer), ptr.url, model)
     response = EventResponse()
     response.analyzer_version = self.version
     return response
예제 #4
0
 def process_review_event(
         self, request: ReviewEvent) -> EventResponse:  # noqa: D401
     """
     Callback for review events invoked by EventListener.
     """
     base_ptr = ReferencePointer.from_pb(request.commit_revision.base)
     head_ptr = ReferencePointer.from_pb(request.commit_revision.head)
     response = EventResponse()
     response.analyzer_version = self.version
     comments = []
     for analyzer in self._analyzers:
         try:
             mycfg = self._protobuf_struct_to_dict(
                 request.configuration[analyzer.name])
             self._log.info("%s config: %s", analyzer.name, mycfg)
         except (KeyError, ValueError):
             mycfg = {}
             self._log.debug("no config was provided for %s", analyzer.name)
         if analyzer.model_type != DummyAnalyzerModel:
             model = self._get_model(analyzer, base_ptr.url)
             if model is None:
                 self._log.info("training: %s", analyzer.name)
                 record_event("%s.train" % analyzer.name, 1)
                 model = analyzer.train(base_ptr, mycfg, self._data_service)
                 self._model_repository.set(self._model_id(analyzer),
                                            base_ptr.url, model)
         else:
             model = DummyAnalyzerModel()
         self._log.debug("running %s", analyzer.name)
         record_event("%s.analyze" % analyzer.name, 1)
         results = analyzer(model, head_ptr.url,
                            mycfg).analyze(base_ptr, head_ptr,
                                           self._data_service)
         self._log.info("%s: %d comments", analyzer.name, len(results))
         record_event("%s.comments" % analyzer.name, len(results))
         comments.extend(results)
     response.comments.extend(comments)
     return response