def deploy()

in src/core/fraud_detector_model_based_deploy.py [0:0]


    def deploy(self, detector_name, detector_description, event_type_name: str, detector_rules,
               rule_execution_mode="FIRST_MATCHED", model_versions=None):
        """
        Deploy a model based Detector
        @param model_versions: A list of dict containing model information. For example: [{"modelId": model_name,
                                     "modelType": MODEL_TYPE_ONLINE_FRAUD_INSIGHTS,
                                     "modelDescription" : model_descriptions
                                     "modelVersionNumber": model_version}]
        @param detector_name:
        @param detector_rules:
        @param detector_description:
        @param rule_execution_mode: FIRST_MATCHED or ALL_MATCHED, see boto3 create_detector_version
        @return:
        """
        # Validate args
        assert model_versions is not None, "Model is mandatory"

        # Initialise detector
        self._logger.info("Initialise detector - {} ".format(detector_name))
        self.client.put_detector(
            detectorId=detector_name,
            eventTypeName=event_type_name,
            description=detector_description or detector_description)

        # Validate rules before hand..
        self._validate_rules(detector_rules)

        # Attempt to create the rule before deploying the model
        # So if rule creation fails, then the model doesnt run unnecessarily
        rules = []
        for r in detector_rules:
            for o in r.outcomes:
                self.client.put_outcome(name=o, description="Outcome for rule {}".format(r.description))
            rule_info = self.fraud_detector_utils.create_or_update_rule(detector_name, r)
            rules.append(rule_info)

        # Deploy  Models
        for model in model_versions:
            model_name = model['modelId']
            model_type = model['modelType']
            model_version = model['modelVersionNumber']
            self._logger.info("Deploying model {} with version {}".format(model_name, model_version))

            # Activate model
            self.client.update_model_version_status(
                modelId=model_name,
                modelType=model_type,
                modelVersionNumber=str(model_version),
                status=DEPLOY_MODEL_STATUS
            )
            # Wait for deployment to complete
            self.fraud_detector_utils.wait_until_model_status(model_name=model_name, model_version=model_version,
                                                              model_type=model_type, fail_states="ERROR",
                                                              success_states=DEPLOY_MODEL_STATUS)

            # Attach models and rules to detector
            self._logger.info("Assembling detector - {} with model {}".format(detector_name, model_name))

        # Copy all parameters except modelDescription to create detector version
        model_versions_p = [{k: v for k, v in i.items() if k != "modelDescription"} for i in model_versions]
        # Make sure model version is a string
        for v in model_versions_p:
            v["modelVersionNumber"] = str(v["modelVersionNumber"])

        response = self.client.create_detector_version(
            detectorId=detector_name,
            description=detector_description,
            modelVersions=model_versions_p,
            rules=rules,
            ruleExecutionMode=rule_execution_mode
        )
        detector_version = response["detectorVersionId"]

        # Activate detector
        self._logger.info(
            "Activate detector {}/{} ".format(detector_name, detector_version))
        self.client.update_detector_version_status(
            detectorId=detector_name,
            detectorVersionId=detector_version,
            status='ACTIVE'
        )

        self._logger.info("{} detector activated".format(detector_name))

        result = {
            "detectorVersionId": detector_version,
            "detectorId": detector_name
        }

        return result