def post_c_level()

in src/handlers/high_level_reports_handler.py [0:0]


    def post_c_level(self, event: CLevelGetReportModel):
        models = []
        rabbitmq = self._rmq.get_customer_rabbitmq(event.customer_id)
        if not rabbitmq:
            raise self._rmq.no_rabbitmq_response().exc()

        builder = MaestroModelBuilder(receivers=tuple(event.receivers))

        for typ in event.new_types:
            rep = self._rms.get_latest_for_customer(event.customer_id, typ)
            if not rep:
                _LOG.warning(f'Cannot find {typ} for {event.customer_id}')
                continue
            self._rms.fetch_data_from_s3(rep)

            previous = self._rms.get_latest_for_customer(
                customer=event.customer_id,
                type_=typ,
                till=utc_datetime() + relativedelta(months=-1),
            )
            if not previous:
                _LOG.info(
                    'Previous clevel report not found, diffs will be empty'
                )
                previous_data = {}
            else:
                self._rms.fetch_data_from_s3(previous)
                previous_data = previous.data.as_dict()
            current_data = rep.data.as_dict()
            for cl, data in current_data.items():
                add_diff(
                    data,
                    previous_data.get(cl, {}),
                    exclude=('total_scanned_tenants',),
                )
            base = builder.build_base(rep)
            base['data'] = current_data

            models.append(
                self._rmq.build_m3_json_model(
                    notification_type=SRE_REPORTS_TYPE_TO_M3_MAPPING[typ],
                    data=base,
                )
            )

        if not models:
            raise (
                ResponseFactory(HTTPStatus.NOT_FOUND)
                .message(
                    'No collected reports found to send. Update metrics first'
                )
                .exc()
            )
        code = self._rmq.send_to_m3(
            rabbitmq=rabbitmq, command=RabbitCommand.SEND_MAIL, models=models
        )
        if code != 200:
            raise (
                ResponseFactory(HTTPStatus.SERVICE_UNAVAILABLE)
                .message('Could not send message to RabbitMQ')
                .exc()
            )
        return build_response(
            code=HTTPStatus.ACCEPTED, content='Successfully sent'
        )