Example #1
0
def calculate_damage(
        damage_scenario_id, username=None, taskname=None, loglevel=20):
    """Call real_calculate_damage, send emails if an uncaught
    exception occurs.  Uncaught exceptions are usually problems in the
    code, not the input."""
    try:
        logger = logging.getLogger(taskname)
        damage_scenario = models.DamageScenario.objects.get(
            pk=damage_scenario_id)
        logger.info(
            "Starting scenario {} calculation...".format(damage_scenario))
        logger.info("Calculation started")
        damage_scenario.calculate(logger)
        logger.info("Calculation exited normally")
    except:
        logger.info("An exception has occurred")
        exc_info = sys.exc_info()
        tracebackbuf = StringIO.StringIO()
        traceback.print_exception(*exc_info, limit=None, file=tracebackbuf)
        logger.info(tracebackbuf.getvalue())

        emails.send_email_to_task(
            damage_scenario_id, 'email_exception',
            "WaterSchadeSchatter: berekening mislukt")

        emails.send_email_to_task(
            damage_scenario_id, 'email_exception_traceback',
            "WaterSchadeSchatter: berekening gecrasht",
            email=settings.LIZARD_DAMAGE_EXCEPTION_EMAIL, extra_context={
                'exception': "{}: {}".format(exc_info[0], exc_info[1]),
                'traceback': tracebackbuf.getvalue()
                })
Example #2
0
def calculate_benefit(
        benefit_scenario_id, username=None, taskname=None, loglevel=20):
    start_dt = datetime.datetime.now()
    logger = logging.getLogger(taskname)
    logger.info("calculate benefit")
    benefit_scenario = BenefitScenario.objects.get(pk=benefit_scenario_id)
    logger.info(
        "scenario: %d, %s" % (benefit_scenario.id, str(benefit_scenario)))

    errors = 0
    try:
        risk.create_benefit_map(
            benefit_scenario=benefit_scenario, logger=logger,
        )
    except:
        # For some reason logger.exception does not reach task logging.
        logger.error('Error creating benefit map.')
        for exception_line in traceback.format_exc().split('\n'):
            logger.error(exception_line)
        errors += 1

    # add BenefitScenarioResult objects for display on the map.

    if errors == 0:
        logger.info('STATS benefit van %s is klaar in %r' % (
            benefit_scenario.email,
            str(datetime.datetime.now() - start_dt)))
        logger.info(
            "creating email task for scenario %d" % benefit_scenario.id)
        subject = (
            'WaterSchadeSchatter: Resultaten beschikbaar voor scenario %s '
            % benefit_scenario.name)
        emails.send_email_to_task(
            benefit_scenario.id, 'email_ready_benefit',
            subject, username=username,
            scenario_type='benefit',
        )
        logger.info("finished")
    else:
        logger.info('STATS benefit van %s is mislukt in %r' % (
            benefit_scenario.email,
            str(datetime.datetime.now() - start_dt)))
        logger.info("there were errors in scenario %d" % benefit_scenario.id)
        logger.info("creating email task for error")
        subject = 'WaterSchadeSchatter: scenario %s heeft fouten' % (
            benefit_scenario.name,
        )
        emails.send_email_to_task(
            benefit_scenario.id, 'email_error', subject, username=username,
            scenario_type='benefit',
        )
        logger.info("finished with errors")
        return 'failure'