示例#1
0
文件: views.py 项目: CBEPX/cdr-stats
def cdr_overview(request):
    """CDR graph by hourly/daily/monthly basis

    **Attributes**:

        * ``template`` - cdr/overview.html
        * ``form`` - CdrOverviewForm

    **Logic Description**:

        Get Call records from Postgresql table and build
        all monthly, daily, hourly analytics
    """
    # initialize variables
    hourly_charttype = "lineWithFocusChart"
    daily_charttype = "lineWithFocusChart"
    hourly_chartdata = {'x': []}
    daily_chartdata = {'x': []}
    metric = 'nbcalls'  # Default metric

    action = 'tabs-1'
    tday = datetime.today()
    switch_id = 0
    # assign initial value in form fields
    form = CdrOverviewForm(request.POST or None,
                           initial={'from_date': tday.strftime('%Y-%m-%d 00:00'),
                                    'to_date': tday.strftime('%Y-%m-%d 23:55'),
                                    'switch_id': switch_id})
    start_date = trunc_date_start(tday)
    end_date = trunc_date_end(tday)
    if form.is_valid():
        from_date = getvar(request, 'from_date')
        to_date = getvar(request, 'to_date')
        start_date = trunc_date_start(from_date)
        end_date = trunc_date_end(to_date)
        switch_id = getvar(request, 'switch_id')
        metric = getvar(request, 'metric')

    # get the number of hour that diff the date
    delta = end_date - start_date
    hour_diff = abs(divmod(delta.days * 86400 + delta.seconds, 60)[0]) / 60
    if hour_diff <= 72:
        display_chart = 'hourly'
    else:
        display_chart = 'daily'

    # check metric is valid
    if metric not in ['nbcalls', 'duration', 'billsec', 'buy_cost', 'sell_cost']:
        metric = 'nbcalls'

    extra_serie = {
        "tooltip": {"y_start": "", "y_end": " " + metric},
        "date_format": "%d %b %y %H:%M%p"
    }

    if display_chart == 'hourly':
        hourly_data = get_report_cdr_per_switch(request.user, 'hour', start_date, end_date, switch_id)

        for switch in hourly_data[metric]["columns"]:
            hourly_chartdata['x'] = hourly_data[metric]["x_timestamp"]
            hourly_chartdata['name' + str(switch)] = get_switch_ip_addr(switch)
            hourly_chartdata['y' + str(switch)] = hourly_data[metric]["values"][str(switch)]
            hourly_chartdata['extra' + str(switch)] = extra_serie

        total_calls = hourly_data["nbcalls"]["total"]
        total_duration = hourly_data["duration"]["total"]
        total_billsec = hourly_data["billsec"]["total"]
        total_buy_cost = hourly_data["buy_cost"]["total"]
        total_sell_cost = hourly_data["sell_cost"]["total"]

    elif display_chart == 'daily':
        daily_data = get_report_cdr_per_switch(request.user, 'day', start_date, end_date, switch_id)

        for switch in daily_data[metric]["columns"]:
            daily_chartdata['x'] = daily_data[metric]["x_timestamp"]
            daily_chartdata['name' + str(switch)] = get_switch_ip_addr(switch)
            daily_chartdata['y' + str(switch)] = daily_data[metric]["values"][str(switch)]
            daily_chartdata['extra' + str(switch)] = extra_serie

        total_calls = daily_data["nbcalls"]["total"]
        total_duration = daily_data["duration"]["total"]
        total_billsec = daily_data["billsec"]["total"]
        total_buy_cost = daily_data["buy_cost"]["total"]
        total_sell_cost = daily_data["sell_cost"]["total"]

    # Calculate the Average Time of Call
    metric_aggr = calculate_act_acd(total_calls, total_duration)

    # Get top 10 of country calls
    country_data = custom_sql_aggr_top_country(request.user, switch_id, 10, start_date, end_date)

    variables = {
        'action': action,
        'form': form,
        'display_chart': display_chart,
        'start_date': start_date,
        'end_date': end_date,
        'metric': metric,
        'hourly_chartdata': hourly_chartdata,
        'hourly_charttype': hourly_charttype,
        'hourly_chartcontainer': 'hourly_container',
        'hourly_extra': {
            'x_is_date': True,
            'x_axis_format': '%d %b %y %H%p',
            'tag_script_js': True,
            'jquery_on_ready': True,
        },
        'daily_chartdata': daily_chartdata,
        'daily_charttype': daily_charttype,
        'daily_chartcontainer': 'daily_container',
        'daily_extra': {
            'x_is_date': True,
            'x_axis_format': '%d %b %Y',
            'tag_script_js': True,
            'jquery_on_ready': True,
        },
        'total_calls': total_calls,
        'total_duration': total_duration,
        'total_billsec': total_billsec,
        'total_buy_cost': total_buy_cost,
        'total_sell_cost': total_sell_cost,
        'metric_aggr': metric_aggr,
        'country_data': country_data,
    }
    return render_to_response('cdr/overview.html', variables, context_instance=RequestContext(request))
示例#2
0
def run_alarm(alarm_obj, logger):
    """
    Perform Alarm Check
    """
    running_alarm_test_data = {
        'running_alarm_status': True,
        'current_value': None,
        'previous_value': None,
    }
    user = False
    switch_id = 0

    if alarm_obj.type == ALARM_TYPE.ALOC:
        # ALOC (average length of call)
        logger.debug('ALOC (Average Length Of Call)')

        # return start and end date of previous/current day
        date_dict = get_start_end_date(alarm_obj.alert_condition_add_on)

        # Previous date data
        start_date = date_dict['p_start_date']
        end_date = date_dict['p_end_date']

        daily_data = get_report_cdr_per_switch(user, 'day', start_date, end_date, switch_id)

        total_calls = daily_data["nbcalls"]["total"]
        total_duration = daily_data["duration"]["total"]
        ACD = math.floor(total_duration / total_calls)

        if alarm_obj.alert_condition == ALERT_CONDITION.IS_LESS_THAN or \
                alarm_obj.alert_condition == ALERT_CONDITION.IS_GREATER_THAN:
            running_alarm_test_data['previous_value'] = ACD
            chk_alert_value(alarm_obj, ACD)
        else:
            previous_date_duration = ACD

        # Current date data
        start_date = date_dict['c_start_date']
        end_date = date_dict['c_end_date']

        daily_data = get_report_cdr_per_switch(user, 'day', start_date, end_date, switch_id)

        total_calls = daily_data["nbcalls"]["total"]
        total_duration = daily_data["duration"]["total"]
        ACD = math.floor(total_duration / total_calls)

        if alarm_obj.alert_condition == ALERT_CONDITION.IS_LESS_THAN or \
                alarm_obj.alert_condition == ALERT_CONDITION.IS_GREATER_THAN:
            running_alarm_test_data['current_value'] = ACD
            chk_alert_value(alarm_obj, ACD)
        else:
            current_date_duration = ACD
            running_alarm_test_data['current_value'] = ACD
            running_alarm_test_data['previous_value'] = previous_date_duration
            chk_alert_value(alarm_obj, current_date_duration, previous_date_duration)

    elif alarm_obj.type == ALARM_TYPE.ASR:
        # ASR (Answer Seize Ratio)
        logger.debug('ASR (Answer Seize Ratio)')
        # return start and end date of previous/current day
        date_dict = get_start_end_date(alarm_obj.alert_condition_add_on)

        # hangup_cause_q850 - 16 - NORMAL_CLEARING
        hangup_cause_q850 = 16

        # Previous date data
        start_date = date_dict['p_start_date']
        end_date = date_dict['p_end_date']

        limit = 10
        hangup_cause_id = False
        # TODO: Regroup the 2 calls to custom_sql_aggr_top_hangup to get the hangup
        (hangup_cause_data, total_calls, total_duration, total_billsec, total_buy_cost, total_sell_cost) = \
            custom_sql_aggr_top_hangup(user, switch_id, hangup_cause_id, limit, start_date, end_date)

        pre_total_record = total_calls

        hangup_cause_id = get_hangupcause_id(hangup_cause_q850)
        (hangup_cause_data, total_calls, total_duration, total_billsec, total_buy_cost, total_sell_cost) = \
            custom_sql_aggr_top_hangup(user, switch_id, hangup_cause_id, limit, start_date, end_date)
        pre_total_answered_record = total_calls

        # pre_total_record should not be 0
        pre_total_record = 1 if pre_total_record == 0 else pre_total_record
        previous_asr = pre_total_answered_record / pre_total_record

        if alarm_obj.alert_condition == ALERT_CONDITION.IS_LESS_THAN or \
                alarm_obj.alert_condition == ALERT_CONDITION.IS_GREATER_THAN:
            running_alarm_test_data['previous_value'] = previous_asr
            chk_alert_value(alarm_obj, previous_asr)
        else:
            previous_asr = previous_asr

        # Current date data
        start_date = date_dict['c_start_date']
        end_date = date_dict['c_end_date']

        limit = 10
        hangup_cause_id = False
        # TODO: Regroup the 2 calls to custom_sql_aggr_top_hangup to get the hangup
        (hangup_cause_data, total_calls, total_duration, total_billsec, total_buy_cost, total_sell_cost) = \
            custom_sql_aggr_top_hangup(user, switch_id, hangup_cause_id, limit, start_date, end_date)

        cur_total_record = total_calls

        hangup_cause_id = get_hangupcause_id(hangup_cause_q850)
        (hangup_cause_data, total_calls, total_duration, total_billsec, total_buy_cost, total_sell_cost) = \
            custom_sql_aggr_top_hangup(user, switch_id, hangup_cause_id, limit, start_date, end_date)
        cur_total_answered_record = total_calls

        # cur_total_record should not be 0
        cur_total_record = 1 if cur_total_record == 0 else cur_total_record
        current_asr = cur_total_answered_record / cur_total_record

        if alarm_obj.alert_condition == ALERT_CONDITION.IS_LESS_THAN or \
                alarm_obj.alert_condition == ALERT_CONDITION.IS_GREATER_THAN:
            running_alarm_test_data['current_value'] = current_asr
            chk_alert_value(alarm_obj, current_asr)
        else:
            running_alarm_test_data['current_value'] = current_asr
            running_alarm_test_data['previous_value'] = previous_asr
            chk_alert_value(alarm_obj, current_asr, previous_asr)

    return running_alarm_test_data
示例#3
0
def billing_report(request):
    """CDR billing graph by daily basis

    **Attributes**:

        * ``template`` - voip_billing/billing_report.html
        * ``form`` - BillingReportForm

    **Logic Description**:

        Retrieve call records from PostgreSQL and build the
        daily billing analytics for given date range
    """
    switch_id = 0
    tday = datetime.today()
    total_data = []
    charttype = "lineWithFocusChart"
    hourly_chartdata = {"x": []}

    form = BillingReportForm(request.POST or None,
                             initial={'from_date': tday.strftime('%Y-%m-%d 00:00'),
                                    'to_date': tday.strftime('%Y-%m-%d 23:55'),
                                    'switch_id': switch_id})
    start_date = trunc_date_start(tday)
    end_date = trunc_date_end(tday)

    if form.is_valid():
        from_date = getvar(request, 'from_date')
        to_date = getvar(request, 'to_date')
        start_date = trunc_date_start(from_date)
        end_date = trunc_date_end(to_date)
        switch_id = getvar(request, 'switch_id')

    metrics = ['buy_cost', 'sell_cost']

    hourly_data = get_report_cdr_per_switch(request.user, 'hour', start_date, end_date, switch_id)

    hourly_chartdata['x'] = hourly_data["nbcalls"]["x_timestamp"]

    i = 0
    for metric in metrics:
        extra_serie = {
            "tooltip": {"y_start": "", "y_end": " " + metric},
            "date_format": "%d %b %y %H:%M%p"
        }
        for switch in hourly_data[metric]["columns"]:
            i = i + 1
            hourly_chartdata['name' + str(i)] = get_switch_ip_addr(switch) + "_" + metric
            hourly_chartdata['y' + str(i)] = hourly_data[metric]["values"][str(switch)]
            hourly_chartdata['extra' + str(i)] = extra_serie

    total_calls = hourly_data["nbcalls"]["total"]
    total_duration = hourly_data["duration"]["total"]
    total_billsec = hourly_data["billsec"]["total"]
    total_buy_cost = hourly_data["buy_cost"]["total"]
    total_sell_cost = hourly_data["sell_cost"]["total"]

    # Calculate the Average Time of Call
    metric_aggr = calculate_act_acd(total_calls, total_duration)

    # Get top 10 of country calls
    country_data = custom_sql_aggr_top_country(request.user, switch_id, 10, start_date, end_date)

    data = {
        'form': form,
        'total_data': total_data,
        'start_date': start_date,
        'end_date': end_date,
        'charttype': charttype,
        'chartdata': hourly_chartdata,
        'chartcontainer': 'chart_container',
        'extra': {
            'x_is_date': True,
            'x_axis_format': '%d %b %Y',
            'tag_script_js': True,
            'jquery_on_ready': True,
        },
        'total_calls': total_calls,
        'total_duration': total_duration,
        'total_billsec': total_billsec,
        'total_buy_cost': total_buy_cost,
        'total_sell_cost': total_sell_cost,
        'metric_aggr': metric_aggr,
        'country_data': country_data,
    }
    return render_to_response('voip_billing/billing_report.html',
                              data,
                              context_instance=RequestContext(request))
示例#4
0
文件: views.py 项目: rewvad/test-cdr
def cdr_overview(request):
    """CDR graph by hourly/daily/monthly basis

    **Attributes**:

        * ``template`` - cdr/overview.html
        * ``form`` - CdrOverviewForm

    **Logic Description**:

        Get Call records from Postgresql table and build
        all monthly, daily, hourly analytics
    """
    # initialize variables
    hourly_charttype = "lineWithFocusChart"
    daily_charttype = "lineWithFocusChart"
    hourly_chartdata = {'x': []}
    daily_chartdata = {'x': []}
    metric = 'nbcalls'  # Default metric

    action = 'tabs-1'
    tday = datetime.today()
    switch_id = 0
    # assign initial value in form fields
    form = CdrOverviewForm(request.POST or None,
                           initial={'from_date': tday.strftime('%Y-%m-%d 00:00'),
                                    'to_date': tday.strftime('%Y-%m-%d 23:55'),
                                    'switch_id': switch_id})
    start_date = trunc_date_start(tday)
    end_date = trunc_date_end(tday)
    if form.is_valid():
        from_date = getvar(request, 'from_date')
        to_date = getvar(request, 'to_date')
        start_date = trunc_date_start(from_date)
        end_date = trunc_date_end(to_date)
        switch_id = getvar(request, 'switch_id')
        metric = getvar(request, 'metric')

    # get the number of hour that diff the date
    delta = end_date - start_date
    hour_diff = abs(divmod(delta.days * 86400 + delta.seconds, 60)[0]) / 60
    if hour_diff <= 72:
        display_chart = 'hourly'
    else:
        display_chart = 'daily'

    # check metric is valid
    if metric not in ['nbcalls', 'duration', 'billsec', 'buy_cost', 'sell_cost']:
        metric = 'nbcalls'

    extra_serie = {
        "tooltip": {"y_start": "", "y_end": " " + metric},
        "date_format": "%d %b %y %H:%M%p"
    }

    if display_chart == 'hourly':
        hourly_data = get_report_cdr_per_switch(request.user, 'hour', start_date, end_date, switch_id)

        for switch in hourly_data[metric]["columns"]:
            hourly_chartdata['x'] = hourly_data[metric]["x_timestamp"]
            hourly_chartdata['name' + str(switch)] = get_switch_ip_addr(switch)
            hourly_chartdata['y' + str(switch)] = hourly_data[metric]["values"][str(switch)]
            hourly_chartdata['extra' + str(switch)] = extra_serie

        total_calls = hourly_data["nbcalls"]["total"]
        total_duration = hourly_data["duration"]["total"]
        total_billsec = hourly_data["billsec"]["total"]
        total_buy_cost = hourly_data["buy_cost"]["total"]
        total_sell_cost = hourly_data["sell_cost"]["total"]

    elif display_chart == 'daily':
        daily_data = get_report_cdr_per_switch(request.user, 'day', start_date, end_date, switch_id)

        for switch in daily_data[metric]["columns"]:
            daily_chartdata['x'] = daily_data[metric]["x_timestamp"]
            daily_chartdata['name' + str(switch)] = get_switch_ip_addr(switch)
            daily_chartdata['y' + str(switch)] = daily_data[metric]["values"][str(switch)]
            daily_chartdata['extra' + str(switch)] = extra_serie

        total_calls = daily_data["nbcalls"]["total"]
        total_duration = daily_data["duration"]["total"]
        total_billsec = daily_data["billsec"]["total"]
        total_buy_cost = daily_data["buy_cost"]["total"]
        total_sell_cost = daily_data["sell_cost"]["total"]

    # Calculate the Average Time of Call
    metric_aggr = calculate_act_acd(total_calls, total_duration)

    # Get top 10 of country calls
    country_data = custom_sql_aggr_top_country(request.user, switch_id, 10, start_date, end_date)

    variables = {
        'action': action,
        'form': form,
        'display_chart': display_chart,
        'start_date': start_date,
        'end_date': end_date,
        'metric': metric,
        'hourly_chartdata': hourly_chartdata,
        'hourly_charttype': hourly_charttype,
        'hourly_chartcontainer': 'hourly_container',
        'hourly_extra': {
            'x_is_date': True,
            'x_axis_format': '%d %b %y %H%p',
            'tag_script_js': True,
            'jquery_on_ready': True,
        },
        'daily_chartdata': daily_chartdata,
        'daily_charttype': daily_charttype,
        'daily_chartcontainer': 'daily_container',
        'daily_extra': {
            'x_is_date': True,
            'x_axis_format': '%d %b %Y',
            'tag_script_js': True,
            'jquery_on_ready': True,
        },
        'total_calls': total_calls,
        'total_duration': total_duration,
        'total_billsec': total_billsec,
        'total_buy_cost': total_buy_cost,
        'total_sell_cost': total_sell_cost,
        'metric_aggr': metric_aggr,
        'country_data': country_data,
    }
    return render_to_response('cdr/overview.html', variables, context_instance=RequestContext(request))
示例#5
0
文件: views.py 项目: rewvad/test-cdr
def billing_report(request):
    """CDR billing graph by daily basis

    **Attributes**:

        * ``template`` - voip_billing/billing_report.html
        * ``form`` - BillingReportForm

    **Logic Description**:

        Retrieve call records from PostgreSQL and build the
        daily billing analytics for given date range
    """
    switch_id = 0
    tday = datetime.today()
    total_data = []
    charttype = "lineWithFocusChart"
    hourly_chartdata = {"x": []}

    form = BillingReportForm(request.POST or None,
                             initial={
                                 'from_date': tday.strftime('%Y-%m-%d 00:00'),
                                 'to_date': tday.strftime('%Y-%m-%d 23:55'),
                                 'switch_id': switch_id
                             })
    start_date = trunc_date_start(tday)
    end_date = trunc_date_end(tday)

    if form.is_valid():
        from_date = getvar(request, 'from_date')
        to_date = getvar(request, 'to_date')
        start_date = trunc_date_start(from_date)
        end_date = trunc_date_end(to_date)
        switch_id = getvar(request, 'switch_id')

    metrics = ['buy_cost', 'sell_cost']

    hourly_data = get_report_cdr_per_switch(request.user, 'hour', start_date,
                                            end_date, switch_id)

    hourly_chartdata['x'] = hourly_data["nbcalls"]["x_timestamp"]

    i = 0
    for metric in metrics:
        extra_serie = {
            "tooltip": {
                "y_start": "",
                "y_end": " " + metric
            },
            "date_format": "%d %b %y %H:%M%p"
        }
        for switch in hourly_data[metric]["columns"]:
            i = i + 1
            hourly_chartdata[
                'name' + str(i)] = get_switch_ip_addr(switch) + "_" + metric
            hourly_chartdata['y' + str(i)] = hourly_data[metric]["values"][str(
                switch)]
            hourly_chartdata['extra' + str(i)] = extra_serie

    total_calls = hourly_data["nbcalls"]["total"]
    total_duration = hourly_data["duration"]["total"]
    total_billsec = hourly_data["billsec"]["total"]
    total_buy_cost = hourly_data["buy_cost"]["total"]
    total_sell_cost = hourly_data["sell_cost"]["total"]

    # Calculate the Average Time of Call
    metric_aggr = calculate_act_acd(total_calls, total_duration)

    # Get top 10 of country calls
    country_data = custom_sql_aggr_top_country(request.user, switch_id, 10,
                                               start_date, end_date)

    data = {
        'form': form,
        'total_data': total_data,
        'start_date': start_date,
        'end_date': end_date,
        'charttype': charttype,
        'chartdata': hourly_chartdata,
        'chartcontainer': 'chart_container',
        'extra': {
            'x_is_date': True,
            'x_axis_format': '%d %b %Y',
            'tag_script_js': True,
            'jquery_on_ready': True,
        },
        'total_calls': total_calls,
        'total_duration': total_duration,
        'total_billsec': total_billsec,
        'total_buy_cost': total_buy_cost,
        'total_sell_cost': total_sell_cost,
        'metric_aggr': metric_aggr,
        'country_data': country_data,
    }
    return render_to_response('voip_billing/billing_report.html',
                              data,
                              context_instance=RequestContext(request))
示例#6
0
文件: tasks.py 项目: CBEPX/cdr-stats
def run_alarm(alarm_obj, logger):
    """
    Perform Alarm Check
    """
    running_alarm_test_data = {"running_alarm_status": True, "current_value": None, "previous_value": None}
    user = False
    switch_id = 0

    if alarm_obj.type == ALARM_TYPE.ALOC:
        # ALOC (average length of call)
        logger.debug("ALOC (Average Length Of Call)")

        # return start and end date of previous/current day
        date_dict = get_start_end_date(alarm_obj.alert_condition_add_on)

        # Previous date data
        start_date = date_dict["p_start_date"]
        end_date = date_dict["p_end_date"]

        daily_data = get_report_cdr_per_switch(user, "day", start_date, end_date, switch_id)

        total_calls = daily_data["nbcalls"]["total"]
        total_duration = daily_data["duration"]["total"]
        ACD = math.floor(total_duration / total_calls)

        if (
            alarm_obj.alert_condition == ALERT_CONDITION.IS_LESS_THAN
            or alarm_obj.alert_condition == ALERT_CONDITION.IS_GREATER_THAN
        ):
            running_alarm_test_data["previous_value"] = ACD
            chk_alert_value(alarm_obj, ACD)
        else:
            previous_date_duration = ACD

        # Current date data
        start_date = date_dict["c_start_date"]
        end_date = date_dict["c_end_date"]

        daily_data = get_report_cdr_per_switch(user, "day", start_date, end_date, switch_id)

        total_calls = daily_data["nbcalls"]["total"]
        total_duration = daily_data["duration"]["total"]
        ACD = math.floor(total_duration / total_calls)

        if (
            alarm_obj.alert_condition == ALERT_CONDITION.IS_LESS_THAN
            or alarm_obj.alert_condition == ALERT_CONDITION.IS_GREATER_THAN
        ):
            running_alarm_test_data["current_value"] = ACD
            chk_alert_value(alarm_obj, ACD)
        else:
            current_date_duration = ACD
            running_alarm_test_data["current_value"] = ACD
            running_alarm_test_data["previous_value"] = previous_date_duration
            chk_alert_value(alarm_obj, current_date_duration, previous_date_duration)

    elif alarm_obj.type == ALARM_TYPE.ASR:
        # ASR (Answer Seize Ratio)
        logger.debug("ASR (Answer Seize Ratio)")
        # return start and end date of previous/current day
        date_dict = get_start_end_date(alarm_obj.alert_condition_add_on)

        # hangup_cause_q850 - 16 - NORMAL_CLEARING
        hangup_cause_q850 = 16

        # Previous date data
        start_date = date_dict["p_start_date"]
        end_date = date_dict["p_end_date"]

        limit = 10
        hangup_cause_id = False
        # TODO: Regroup the 2 calls to custom_sql_aggr_top_hangup to get the hangup
        (
            hangup_cause_data,
            total_calls,
            total_duration,
            total_billsec,
            total_buy_cost,
            total_sell_cost,
        ) = custom_sql_aggr_top_hangup(user, switch_id, hangup_cause_id, limit, start_date, end_date)

        pre_total_record = total_calls

        hangup_cause_id = get_hangupcause_id(hangup_cause_q850)
        (
            hangup_cause_data,
            total_calls,
            total_duration,
            total_billsec,
            total_buy_cost,
            total_sell_cost,
        ) = custom_sql_aggr_top_hangup(user, switch_id, hangup_cause_id, limit, start_date, end_date)
        pre_total_answered_record = total_calls

        # pre_total_record should not be 0
        pre_total_record = 1 if pre_total_record == 0 else pre_total_record
        previous_asr = pre_total_answered_record / pre_total_record

        if (
            alarm_obj.alert_condition == ALERT_CONDITION.IS_LESS_THAN
            or alarm_obj.alert_condition == ALERT_CONDITION.IS_GREATER_THAN
        ):
            running_alarm_test_data["previous_value"] = previous_asr
            chk_alert_value(alarm_obj, previous_asr)
        else:
            previous_asr = previous_asr

        # Current date data
        start_date = date_dict["c_start_date"]
        end_date = date_dict["c_end_date"]

        limit = 10
        hangup_cause_id = False
        # TODO: Regroup the 2 calls to custom_sql_aggr_top_hangup to get the hangup
        (
            hangup_cause_data,
            total_calls,
            total_duration,
            total_billsec,
            total_buy_cost,
            total_sell_cost,
        ) = custom_sql_aggr_top_hangup(user, switch_id, hangup_cause_id, limit, start_date, end_date)

        cur_total_record = total_calls

        hangup_cause_id = get_hangupcause_id(hangup_cause_q850)
        (
            hangup_cause_data,
            total_calls,
            total_duration,
            total_billsec,
            total_buy_cost,
            total_sell_cost,
        ) = custom_sql_aggr_top_hangup(user, switch_id, hangup_cause_id, limit, start_date, end_date)
        cur_total_answered_record = total_calls

        # cur_total_record should not be 0
        cur_total_record = 1 if cur_total_record == 0 else cur_total_record
        current_asr = cur_total_answered_record / cur_total_record

        if (
            alarm_obj.alert_condition == ALERT_CONDITION.IS_LESS_THAN
            or alarm_obj.alert_condition == ALERT_CONDITION.IS_GREATER_THAN
        ):
            running_alarm_test_data["current_value"] = current_asr
            chk_alert_value(alarm_obj, current_asr)
        else:
            running_alarm_test_data["current_value"] = current_asr
            running_alarm_test_data["previous_value"] = previous_asr
            chk_alert_value(alarm_obj, current_asr, previous_asr)

    return running_alarm_test_data