def fetch_user_data_for_campaigns()

in Solutions/Mimecast/Data Connectors/MimecastAT/UserData/mimecast_user_data_to_sentinel.py [0:0]


    def fetch_user_data_for_campaigns(self, campaign_id):
        """Get mimecast phishing user data from given campaign.

        Args:
            campaign (dict): campaign for which user data to be fetched.
        """
        __method_name = inspect.currentframe().f_code.co_name
        try:
            request_body = {
                "data": [{"id": campaign_id}],
                "meta": {"pagination": {"pageSize": consts.MAX_PAGE_SIZE}},
            }
            applogger.info(
                self.log_format.format(
                    consts.LOGS_STARTS_WITH,
                    __method_name,
                    self.azure_function_name,
                    "Fetching user data for campaign : {}.".format(campaign_id),
                )
            )
            next_page = True
            total_user_count = 0
            while next_page:
                if (
                    int(time.time())
                    >= self.function_start_time + consts.FUNCTION_APP_TIMEOUT_SECONDS
                ):
                    raise MimecastTimeoutException()
                user_data_response = self.make_rest_call(
                    method="POST", url=self.get_user_url, json=request_body
                )
                user_data = user_data_response.get("data", [])
                if len(user_data) > 0 and len(user_data[0].get("items", [])) > 0:
                    total_user_count += len(user_data[0]["items"])
                    user_data_items = user_data[0]["items"]
                    applogger.info(
                        self.log_format.format(
                            consts.LOGS_STARTS_WITH,
                            __method_name,
                            self.azure_function_name,
                            "Posting data to azure Sentinel log analytics, data count : {}.".format(
                                len(user_data_items)
                            ),
                        )
                    )
                    post_data(
                        json.dumps(user_data_items),
                        log_type=consts.TABLE_NAME["USER_DATA"],
                    )
                    next_page_token = user_data_response["meta"]["pagination"].get(
                        "next", ""
                    )
                    if next_page_token:
                        request_body["meta"]["pagination"][
                            "pageToken"
                        ] = next_page_token
                        applogger.info(
                            self.log_format.format(
                                consts.LOGS_STARTS_WITH,
                                __method_name,
                                self.azure_function_name,
                                "Found next in response : {}.".format(next_page_token),
                            )
                        )
                    else:
                        next_page = False
                        applogger.debug(
                            self.log_format.format(
                                consts.LOGS_STARTS_WITH,
                                __method_name,
                                self.azure_function_name,
                                "End of user data for campaign id : {}.".format(
                                    campaign_id
                                ),
                            )
                        )
                else:
                    next_page = False
                    applogger.info(
                        self.log_format.format(
                            consts.LOGS_STARTS_WITH,
                            __method_name,
                            self.azure_function_name,
                            "No user data found for campaign : {}.".format(campaign_id),
                        )
                    )
            applogger.info(
                self.log_format.format(
                    consts.LOGS_STARTS_WITH,
                    __method_name,
                    self.azure_function_name,
                    "Total user count : {} for campaign : {}.".format(
                        total_user_count, campaign_id
                    ),
                )
            )
        except KeyError as key_error:
            applogger.error(
                self.log_format.format(
                    consts.LOGS_STARTS_WITH,
                    __method_name,
                    self.azure_function_name,
                    consts.KEY_ERROR_MSG.format(key_error),
                )
            )
            raise MimecastException()
        except MimecastTimeoutException:
            raise MimecastTimeoutException()
        except RetryError as error:
            applogger.error(
                self.log_format.format(
                    consts.LOGS_STARTS_WITH,
                    __method_name,
                    self.azure_function_name,
                    consts.MAX_RETRY_ERROR_MSG.format(
                        error, error.last_attempt.exception()
                    ),
                )
            )
            raise MimecastException()
        except MimecastException:
            raise MimecastException()
        except Exception as err:
            applogger.error(
                self.log_format.format(
                    consts.LOGS_STARTS_WITH,
                    __method_name,
                    self.azure_function_name,
                    consts.UNEXPECTED_ERROR_MSG.format(err),
                )
            )
            raise MimecastException()